ETH Price: $3,100.33 (+1.09%)
Gas: 11 Gwei

Contract

0x77F98c147a37564c32E48054Bff7692A1F97f343
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
0x60806040130016882021-08-11 4:12:57983 days ago1628655177IN
 Create: FeswGovernor
0 ETH0.1125697336

Advanced mode:
Parent Transaction Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeswGovernor

Compiler Version
v0.7.0+commit.9e61f92b

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2021-08-17
*/

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.7.0;
pragma experimental ABIEncoderV2;

contract FeswGovernor {
    /// @notice The name of this contract
    string public constant name = "Feswap Governor";
    
    uint public constant QUORUM_VOTES               = 40_000_000e18;        // 4% of Fesw
    uint public constant PROPOSAL_THRESHOLD         = 10_000_000e18;        // 1% of Fesw
    uint public constant PROPOSAL_MAX_OPERATIONS    = 10;                   // 10 actions
    uint public constant VOTING_PERIOD              = 7 days;               // 7 days

    /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed
    uint public quorumVotes;

    /// @notice The number of votes required in order for a voter to become a proposer
    uint public proposalThreshold;

    /// @notice The maximum number of actions that can be included in a proposal
    uint public proposalMaxOperations;

    /// @notice The duration of voting on a proposal, in blocks
    uint public votingPeriod;

    /// @notice The address of the Feswap Protocol Timelock
    TimelockInterface public timelock;

    /// @notice The address of the Feswap governance token
    FeswaInterface public Feswa;

    /// @notice The total number of proposals
    uint public proposalCount;

    struct Proposal {
        // Unique id for looking up a proposal
        uint id;

        // Creator of the proposal
        address proposer;

        // the ordered list of target addresses for calls to be made
        address[] targets;

        // The ordered list of values (i.e. msg.value) to be passed to the calls to be made
        uint[] values;

        // The ordered list of function signatures to be called
        string[] signatures;

        // The ordered list of calldata to be passed to each call
        bytes[] calldatas;

        // The block at which voting begins: holders must delegate their votes prior to this block
        uint startBlock;        
        uint startBlockTime;

        // The block at which voting ends: votes must be cast prior to this block
        uint endBlockTime;

        // The timestamp that the proposal will be available for execution, set once the vote succeeds
        uint eta;

        // Current number of votes in favor of this proposal
        uint forVotes;

        // Current number of votes in opposition to this proposal
        uint againstVotes;

        // Flag marking whether the proposal has been canceled
        bool canceled;

        // Flag marking whether the proposal has been executed
        bool executed;
    }
    
    /// @notice Ballot receipt record for a voter
    struct Receipt {
        // Whether or not a vote has been cast
        bool hasVoted;

        // Whether or not the voter supports the proposal
        bool support;

        // The number of votes the voter had, which were cast
        uint96 votes;
    }

    /// @notice Possible states that a proposal may be in
    enum ProposalState {
        Pending,
        Active,
        Canceled,
        Defeated,
        Succeeded,
        Queued,
        Expired,
        Executed
    }

    /// @notice The official record of all proposals ever proposed
    mapping (uint => Proposal) public proposals;

    /// @notice Receipts of ballots for the entire set of voters
    mapping (uint => mapping (address => Receipt)) public receipts;

    /// @notice The latest proposal for each proposer
    mapping (address => uint) public latestProposalIds;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the ballot struct used by the contract
    bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,bool support)");

    /// @notice An event emitted when a new proposal is created
    event ProposalCreated(uint id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, 
                          uint startBlockTime, uint endBlockTime, string description);

    /// @notice An event emitted when a vote has been cast on a proposal
    event VoteCast(address voter, uint proposalId, bool support, uint votes);

    /// @notice An event emitted when a proposal has been canceled
    event ProposalCanceled(uint id);

    /// @notice An event emitted when a proposal has been queued in the Timelock
    event ProposalQueued(uint id, uint eta);

    /// @notice An event emitted when a proposal has been executed in the Timelock
    event ProposalExecuted(uint id);

    constructor(address timelock_, address Feswa_) {
        timelock                = TimelockInterface(timelock_);
        Feswa                   = FeswaInterface(Feswa_);
        quorumVotes             = QUORUM_VOTES;
        proposalThreshold       = PROPOSAL_THRESHOLD;
        proposalMaxOperations   = PROPOSAL_MAX_OPERATIONS;
        votingPeriod            = VOTING_PERIOD;
    }

    function config(uint quorumVotes_, uint proposalThreshold_, uint proposalMaxOperations_, uint votingPeriod_) public {
        require(msg.sender == address(timelock), "FeswGovernor:: Not Timelock");
        if (quorumVotes != 0)           quorumVotes = quorumVotes_;
        if (proposalThreshold != 0)     proposalThreshold = proposalThreshold_;
        if (proposalMaxOperations != 0) proposalMaxOperations = proposalMaxOperations_;
        if (votingPeriod != 0)          votingPeriod = votingPeriod_;
    }

    function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) {
        require(Feswa.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold, "FeswGovernor::propose: proposer votes below proposal threshold");
        require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "FeswGovernor::propose: proposal function information arity mismatch");
        require(targets.length != 0, "FeswGovernor::propose: must provide actions");
        require(targets.length <= proposalMaxOperations, "FeswGovernor::propose: too many actions");

        uint latestProposalId = latestProposalIds[msg.sender];
        if (latestProposalId != 0) {
          ProposalState proposersLatestProposalState = state(latestProposalId);
          require(proposersLatestProposalState != ProposalState.Active, "FeswGovernor::propose: one live proposal per proposer, found an already active proposal");
          require(proposersLatestProposalState != ProposalState.Pending, "FeswGovernor::propose: one live proposal per proposer, found an already pending proposal");
        }

        uint startBlockTime = block.timestamp;
        uint endBlockTime = add256(startBlockTime, votingPeriod);

        proposalCount++;
        Proposal memory newProposal;
        newProposal.id = proposalCount;
        newProposal.proposer = msg.sender;
        newProposal.targets = targets;
        newProposal.values = values;
        newProposal.signatures = signatures;
        newProposal.calldatas = calldatas;
        newProposal.startBlock = block.number;
        newProposal.startBlockTime = startBlockTime;
        newProposal.endBlockTime = endBlockTime;
        
        proposals[newProposal.id] = newProposal;
        latestProposalIds[newProposal.proposer] = newProposal.id;

        emit ProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, startBlockTime, endBlockTime, description);
        return newProposal.id;
    }

    function queue(uint proposalId) public {
        require(state(proposalId) == ProposalState.Succeeded, "FeswGovernor::queue: proposal can only be queued if it is succeeded");

        Proposal storage proposal = proposals[proposalId];
        uint eta = add256(block.timestamp, timelock.delay());
        for (uint i = 0; i < proposal.targets.length; i++) {
            _queueOrRevert(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta);
        }
        proposal.eta = eta;
        emit ProposalQueued(proposalId, eta);
    }

    function _queueOrRevert(address target, uint value, string memory signature, bytes memory data, uint eta) internal {
        require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), 
                    "FeswGovernor::_queueOrRevert: proposal action already queued at eta");
        timelock.queueTransaction(target, value, signature, data, eta);
    }

    function execute(uint proposalId) public payable {
        require(state(proposalId) == ProposalState.Queued, "FeswGovernor::execute: proposal can only be executed if it is queued");
        Proposal storage proposal = proposals[proposalId];
        proposal.executed = true;
        for (uint i = 0; i < proposal.targets.length; i++) {
            timelock.executeTransaction{value:proposal.values[i]}(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }
        emit ProposalExecuted(proposalId);
    }

    function cancel(uint proposalId) public {
        require(state(proposalId) != ProposalState.Executed, "FeswGovernor::cancel: cannot cancel executed proposal");

        Proposal storage proposal = proposals[proposalId];
        require(Feswa.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold, "FeswGovernor::cancel: proposer above threshold");

        proposal.canceled = true;
        for (uint i = 0; i < proposal.targets.length; i++) {
            timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }

        emit ProposalCanceled(proposalId);
    }

    function getActions(uint proposalId) public view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas) {
        Proposal storage p = proposals[proposalId];
        return (p.targets, p.values, p.signatures, p.calldatas);
    }

    function getReceipt(uint proposalId, address voter) public view returns (Receipt memory) {
        return receipts[proposalId][voter];
    }

    function state(uint proposalId) public view returns (ProposalState) {
        require(proposalCount >= proposalId && proposalId > 0, "FeswGovernor::state: invalid proposal id");
        Proposal storage proposal = proposals[proposalId];
        if (proposal.canceled) {
            return ProposalState.Canceled;
        } else if (block.timestamp <= proposal.startBlockTime) {
            return ProposalState.Pending;
        } else if (block.timestamp <= proposal.endBlockTime) {
            return ProposalState.Active;
        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes) {
            return ProposalState.Defeated;
        } else if (proposal.eta == 0) {
            return ProposalState.Succeeded;
        } else if (proposal.executed) {
            return ProposalState.Executed;
        } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) {
            return ProposalState.Expired;
        } else {
            return ProposalState.Queued;
        }
    }

    function castVote(uint proposalId, bool support) public {
        return _castVote(msg.sender, proposalId, support);
    }

    function castVoteBySig(uint proposalId, bool support, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, support));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "FeswGovernor::castVoteBySig: invalid signature");
        return _castVote(signatory, proposalId, support);
    }

    function _castVote(address voter, uint proposalId, bool support) internal {
        require(state(proposalId) == ProposalState.Active, "FeswGovernor::_castVote: voting is closed");
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = receipts[proposalId][voter];
        require(receipt.hasVoted == false, "FeswGovernor::_castVote: voter already voted");
        uint96 votes = Feswa.getPriorVotes(voter, proposal.startBlock);

        if (support) {
            proposal.forVotes = add256(proposal.forVotes, votes);
        } else {
            proposal.againstVotes = add256(proposal.againstVotes, votes);
        }

        receipt.hasVoted = true;
        receipt.support = support;
        receipt.votes = votes;

        emit VoteCast(voter, proposalId, support, votes);
    }

    function add256(uint256 a, uint256 b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub256(uint256 a, uint256 b) internal pure returns (uint) {
        require(b <= a, "subtraction underflow");
        return a - b;
    }

    function getChainId() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

interface TimelockInterface {
    function delay() external view returns (uint);
    function GRACE_PERIOD() external view returns (uint);
    function acceptAdmin() external;
    function queuedTransactions(bytes32 hash) external view returns (bool);
    function queueTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external returns (bytes32);
    function cancelTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external;
    function executeTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external payable returns (bytes memory);
}

interface FeswaInterface {
    function getPriorVotes(address account, uint blockNumber) external view returns (uint96);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"Feswa_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startBlockTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlockTime","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"VoteCast","type":"event"},{"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Feswa","outputs":[{"internalType":"contract FeswaInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSAL_MAX_OPERATIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUORUM_VOTES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quorumVotes_","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold_","type":"uint256"},{"internalType":"uint256","name":"proposalMaxOperations_","type":"uint256"},{"internalType":"uint256","name":"votingPeriod_","type":"uint256"}],"name":"config","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct FeswGovernor.Receipt","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"startBlockTime","type":"uint256"},{"internalType":"uint256","name":"endBlockTime","type":"uint256"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"receipts","outputs":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint96","name":"votes","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum FeswGovernor.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200364e3803806200364e833981016040819052620000349162000090565b600480546001600160a01b039384166001600160a01b031991821617909155600580549290931691161790556a21165458500521280000006000556a084595161401484a000000600155600a60025562093a80600355620000e7565b60008060408385031215620000a3578182fd5b8251620000b081620000ce565b6020840151909250620000c381620000ce565b809150509250929050565b6001600160a01b0381168114620000e457600080fd5b50565b61355780620000f76000396000f3fe6080604052600436106101ac5760003560e01c8063671dd275116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610476578063deaaa7cc14610496578063e23a9a52146104ab578063fe0d94c1146104d8576101ac565b8063d33219b41461042c578063da35c66414610441578063da95691a14610456576101ac565b8063a6c26603116100c6578063a6c26603146103cd578063b1610d7e146103e2578063b58131b0146103f7578063cbd08c8c1461040c576101ac565b8063671dd2751461038157806372a108e8146103965780637bdbe4d0146103b8576101ac565b806324bc1a64116101595780633e4f49e6116101335780633e4f49e6146102e557806340e58ee5146103125780634178b249146103325780634634c61f14610361576101ac565b806324bc1a641461028b578063328dd982146102a057806336e7048a146102d0576101ac565b806315373e3d1161018a57806315373e3d1461023457806317977c611461025657806320606b7014610276576101ac565b8063013cf08b146101b157806302a251a3146101f057806306fdde0314610212575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046126bd565b6104eb565b6040516101e79a999897969594939291906133e5565b60405180910390f35b3480156101fc57600080fd5b5061020561055a565b6040516101e79190612b5b565b34801561021e57600080fd5b50610227610560565b6040516101e79190612c00565b34801561024057600080fd5b5061025461024f366004612701565b610599565b005b34801561026257600080fd5b5061020561027136600461252f565b6105a8565b34801561028257600080fd5b506102056105ba565b34801561029757600080fd5b506102056105de565b3480156102ac57600080fd5b506102c06102bb3660046126bd565b6105e4565b6040516101e79493929190612add565b3480156102dc57600080fd5b506102056108bc565b3480156102f157600080fd5b506103056103003660046126bd565b6108c1565b6040516101e79190612bec565b34801561031e57600080fd5b5061025461032d3660046126bd565b610a85565b34801561033e57600080fd5b5061035261034d3660046126d5565b610d4c565b6040516101e793929190612b35565b34801561036d57600080fd5b5061025461037c366004612730565b610d8c565b34801561038d57600080fd5b50610205610f8a565b3480156103a257600080fd5b506103ab610f99565b6040516101e79190612bcb565b3480156103c457600080fd5b50610205610fb5565b3480156103d957600080fd5b50610205610fbb565b3480156103ee57600080fd5b50610205610fca565b34801561040357600080fd5b50610205610fd1565b34801561041857600080fd5b50610254610427366004612786565b610fd7565b34801561043857600080fd5b506103ab611066565b34801561044d57600080fd5b50610205611082565b34801561046257600080fd5b5061020561047136600461254a565b611088565b34801561048257600080fd5b506102546104913660046126bd565b61153f565b3480156104a257600080fd5b50610205611844565b3480156104b757600080fd5b506104cb6104c63660046126d5565b611868565b6040516101e7919061330f565b6102546104e63660046126bd565b6118e6565b60076020819052600091825260409091208054600182015460068301549383015460088401546009850154600a860154600b870154600c90970154959773ffffffffffffffffffffffffffffffffffffffff909516969495939492939192909160ff808216916101009004168a565b60035481565b6040518060400160405280600f81526020017f46657377617020476f7665726e6f72000000000000000000000000000000000081525081565b6105a4338383611b0e565b5050565b60096020526000908152604090205481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60005481565b6060806060806000600760008781526020019081526020016000209050806002018160030182600401836005018380548060200260200160405190810160405280929190818152602001828054801561067357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610648575b50505050509350828054806020026020016040519081016040528092919081815260200182805480156106c557602002820191906000526020600020905b8154815260200190600101908083116106b1575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156107b65760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156107a25780601f10610777576101008083540402835291602001916107a2565b820191906000526020600020905b81548152906001019060200180831161078557829003601f168201915b5050505050815260200190600101906106ed565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156108a65760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050815260200190600101906107dd565b5050505090509450945094509450509193509193565b600a81565b600081600654101580156108d55750600082115b610914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612c70565b60405180910390fd5b6000828152600760205260409020600c81015460ff1615610939576002915050610a80565b8060070154421161094e576000915050610a80565b80600801544211610963576001915050610a80565b80600b015481600a015411158061097f575060005481600a0154105b1561098e576003915050610a80565b60098101546109a1576004915050610a80565b600c810154610100900460ff16156109bd576007915050610a80565b610a6a8160090154600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2d57600080fd5b505afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190612632565b611d9c565b4210610a7a576006915050610a80565b60059150505b919050565b6007610a90826108c1565b6007811115610a9b57fe5b1415610ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612dd3565b60008181526007602052604090206001805460055482840154919273ffffffffffffffffffffffffffffffffffffffff9182169263782d6fe1921690610b1a904390611de2565b6040518363ffffffff1660e01b8152600401610b379291906129d3565b60206040518083038186803b158015610b4f57600080fd5b505afa158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8791906127b7565b6bffffffffffffffffffffffff1610610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612f10565b600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b6002820154811015610d105760045460028301805473ffffffffffffffffffffffffffffffffffffffff9092169163591fcdfe919084908110610c3b57fe5b60009182526020909120015460038501805473ffffffffffffffffffffffffffffffffffffffff9092169185908110610c7057fe5b9060005260206000200154856004018581548110610c8a57fe5b90600052602060002001866005018681548110610ca357fe5b9060005260206000200187600901546040518663ffffffff1660e01b8152600401610cd2959493929190612a96565b600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505060019092019150610bfc9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c82604051610d409190612b5b565b60405180910390a15050565b600860209081526000928352604080842090915290825290205460ff808216916101008104909116906201000090046bffffffffffffffffffffffff1683565b60408051808201909152600f81527f46657377617020476f7665726e6f72000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f22f36df5bb944924cdf1bc87e66d8eaf516f7dddddd96bf66459cb9deb1c72d6610e0d611e24565b30604051602001610e219493929190612b64565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610e7093929190612b95565b60405160208183030381529060405280519060200120905060008282604051602001610e9d92919061299d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610eda9493929190612bad565b6020604051602081039080840390855afa158015610efc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612fca565b610f7f818a8a611b0e565b505050505050505050565b6a211654585005212800000081565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6a084595161401484a00000081565b62093a8081565b60015481565b60045473ffffffffffffffffffffffffffffffffffffffff163314611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b9061313e565b600054156110365760008490555b600154156110445760018390555b600254156110525760028290555b600354156110605760038190555b50505050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6001805460055460009273ffffffffffffffffffffffffffffffffffffffff9091169063782d6fe19033906110be904390611de2565b6040518363ffffffff1660e01b81526004016110db9291906129d3565b60206040518083038186803b1580156110f357600080fd5b505afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906127b7565b6bffffffffffffffffffffffff1611611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612c13565b84518651148015611182575083518651145b801561118f575082518651145b6111c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b906131d2565b85516111fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613027565b6002548651111561123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613175565b3360009081526009602052604090205480156112eb57600061125b826108c1565b9050600181600781111561126b57fe5b14156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b9061328c565b60008160078111156112b157fe5b14156112e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612e8d565b505b600042905060006112fe82600354611d9c565b6006805460010190559050611311611fd3565b60065480825233602080840191825260408085018e8152606086018e9052608086018d905260a086018c90524360c087015260e08601889052610100860187905260009485526007835293208451815591516001830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790559151805184936113c092600285019291019061205c565b50606082015180516113dc9160038401916020909101906120e6565b50608082015180516113f891600484019160209091019061212d565b5060a08201518051611414916005840191602090910190612186565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff021916908315150217905550905050806000015160096000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161152999989796959493929190613342565b60405180910390a1519998505050505050505050565b600461154a826108c1565b600781111561155557fe5b1461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b906130bb565b60008181526007602090815260408083206004805483517f6a42b8f8000000000000000000000000000000000000000000000000000000008152935192959461160c94429473ffffffffffffffffffffffffffffffffffffffff90931693636a42b8f8938282019392909190829003018186803b158015610a2d57600080fd5b905060005b60028301548110156117fd576117f583600201828154811061162f57fe5b60009182526020909120015460038501805473ffffffffffffffffffffffffffffffffffffffff909216918490811061166457fe5b906000526020600020015485600401848154811061167e57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416939093049283018590048502810185019091528181529283018282801561172a5780601f106116ff5761010080835404028352916020019161172a565b820191906000526020600020905b81548152906001019060200180831161170d57829003601f168201915b505050505086600501858154811061173e57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156117ea5780601f106117bf576101008083540402835291602001916117ea565b820191906000526020600020905b8154815290600101906020018083116117cd57829003601f168201915b505050505086611e28565b600101611611565b50600982018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892906118379085908490613444565b60405180910390a1505050565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b6118706121df565b50600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684528252918290208251606081018452905460ff80821615158352610100820416151592820192909252620100009091046bffffffffffffffffffffffff16918101919091525b92915050565b60056118f1826108c1565b60078111156118fc57fe5b14611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612ccd565b6000818152600760205260408120600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055905b6002820154811015611ade5760045460038301805473ffffffffffffffffffffffffffffffffffffffff90921691630825f38f9190849081106119b057fe5b90600052602060002001548460020184815481106119ca57fe5b60009182526020909120015460038601805473ffffffffffffffffffffffffffffffffffffffff90921691869081106119ff57fe5b9060005260206000200154866004018681548110611a1957fe5b90600052602060002001876005018781548110611a3257fe5b9060005260206000200188600901546040518763ffffffff1660e01b8152600401611a61959493929190612a96565b6000604051808303818588803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ad5919081019061264a565b50600101611971565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051610d409190612b5b565b6001611b19836108c1565b6007811115611b2457fe5b14611b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612e30565b60008281526007602090815260408083206008835281842073ffffffffffffffffffffffffffffffffffffffff88168552909252909120805460ff1615611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612f6d565b60055460068301546040517f782d6fe100000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff169163782d6fe191611c2a918a916004016129d3565b60206040518083038186803b158015611c4257600080fd5b505afa158015611c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7a91906127b7565b90508315611ca857611c9e83600a0154826bffffffffffffffffffffffff16611d9c565b600a840155611cca565b611cc483600b0154826bffffffffffffffffffffffff16611d9c565b600b8401555b815460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010085151502177fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff16620100006bffffffffffffffffffffffff8316021782556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611d8c9088908890889086906129f9565b60405180910390a1505050505050565b600082820183811015611ddb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613084565b9392505050565b600082821115611e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613255565b50900390565b4690565b60045460405173ffffffffffffffffffffffffffffffffffffffff9091169063f2b0653790611e639088908890889088908890602001612a3c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611e959190612b5b565b60206040518083038186803b158015611ead57600080fd5b505afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee59190612616565b15611f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612d50565b600480546040517f3a66f90100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691633a66f90191611f79918991899189918991899101612a3c565b602060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcb9190612632565b505050505050565b604051806101c0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8280548282559060005260206000209081019282156120d6579160200282015b828111156120d657825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061207c565b506120e29291506121ff565b5090565b828054828255906000526020600020908101928215612121579160200282015b82811115612121578251825591602001919060010190612106565b506120e2929150612236565b82805482825590600052602060002090810192821561217a579160200282015b8281111561217a578251805161216a91849160209091019061224b565b509160200191906001019061214d565b506120e29291506122b8565b8280548282559060005260206000209081019282156121d3579160200282015b828111156121d357825180516121c391849160209091019061224b565b50916020019190600101906121a6565b506120e29291506122d5565b604080516060810182526000808252602082018190529181019190915290565b5b808211156120e25780547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101612200565b5b808211156120e25760008155600101612237565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061228c57805160ff1916838001178555612121565b828001600101855582156121215791820182811115612121578251825591602001919060010190612106565b808211156120e25760006122cc82826122f2565b506001016122b8565b808211156120e25760006122e982826122f2565b506001016122d5565b50805460018160011615610100020316600290046000825580601f106123185750612336565b601f0160209004906000526020600020908101906123369190612236565b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146118e057600080fd5b600082601f83011261236d578081fd5b813561238061237b82613479565b613452565b8181529150602080830190848101818402860182018710156123a157600080fd5b60005b848110156123c8576123b68883612339565b845292820192908201906001016123a4565b505050505092915050565b600082601f8301126123e3578081fd5b81356123f161237b82613479565b818152915060208083019084810160005b848110156123c857612419888484358a01016124e1565b84529282019290820190600101612402565b600082601f83011261243b578081fd5b813561244961237b82613479565b818152915060208083019084810160005b848110156123c857612471888484358a01016124e1565b8452928201929082019060010161245a565b600082601f830112612493578081fd5b81356124a161237b82613479565b8181529150602080830190848101818402860182018710156124c257600080fd5b60005b848110156123c8578135845292820192908201906001016124c5565b600082601f8301126124f1578081fd5b81356124ff61237b82613499565b915080825283602082850101111561251657600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612540578081fd5b611ddb8383612339565b600080600080600060a08688031215612561578081fd5b853567ffffffffffffffff80821115612578578283fd5b61258489838a0161235d565b96506020880135915080821115612599578283fd5b6125a589838a01612483565b955060408801359150808211156125ba578283fd5b6125c689838a0161242b565b945060608801359150808211156125db578283fd5b6125e789838a016123d3565b935060808801359150808211156125fc578283fd5b50612609888289016124e1565b9150509295509295909350565b600060208284031215612627578081fd5b8151611ddb81613513565b600060208284031215612643578081fd5b5051919050565b60006020828403121561265b578081fd5b815167ffffffffffffffff811115612671578182fd5b8201601f81018413612681578182fd5b805161268f61237b82613499565b8181528560208385010111156126a3578384fd5b6126b48260208301602086016134e7565b95945050505050565b6000602082840312156126ce578081fd5b5035919050565b600080604083850312156126e7578182fd5b823591506126f88460208501612339565b90509250929050565b60008060408385031215612713578182fd5b82359150602083013561272581613513565b809150509250929050565b600080600080600060a08688031215612747578283fd5b85359450602086013561275981613513565b9350604086013560ff8116811461276e578384fd5b94979396509394606081013594506080013592915050565b6000806000806080858703121561279b578182fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156127c8578081fd5b81516bffffffffffffffffffffffff81168114611ddb578182fd5b6000815180845260208085019450808401835b8381101561282857815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016127f6565b509495945050505050565b6000815180845260208085019450848183028601828601855b858110156128765783830389526128648383516128b2565b9885019892509084019060010161284c565b5090979650505050505050565b6000815180845260208085019450808401835b8381101561282857815187529582019590820190600101612896565b600081518084526128ca8160208601602086016134e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815460018082166000811461291a576001811461295657612994565b607f600284041686527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166020870152604086019350612994565b60028304808752612966866134db565b60005b8281101561298a5781546020828b0101528482019150602081019050612969565b8801602001955050505b50505092915050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9490941684526020840192909252151560408301526bffffffffffffffffffffffff16606082015260800190565b600073ffffffffffffffffffffffffffffffffffffffff8716825285602083015260a06040830152612a7160a08301866128b2565b8281036060840152612a8381866128b2565b9150508260808301529695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8716825285602083015260a06040830152612acb60a08301866128fc565b8281036060840152612a8381866128fc565b600060808252612af060808301876127e3565b8281036020840152612b028187612883565b90508281036040840152612b168186612833565b90508281036060840152612b2a8185612833565b979650505050505050565b921515835290151560208301526bffffffffffffffffffffffff16604082015260600190565b90815260200190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6020810160088310612bfa57fe5b91905290565b600060208252611ddb60208301846128b2565b6020808252603e908201527f46657377476f7665726e6f723a3a70726f706f73653a2070726f706f7365722060408201527f766f7465732062656c6f772070726f706f73616c207468726573686f6c640000606082015260800190565b60208082526028908201527f46657377476f7665726e6f723a3a73746174653a20696e76616c69642070726f60408201527f706f73616c206964000000000000000000000000000000000000000000000000606082015260800190565b60208082526044908201527f46657377476f7665726e6f723a3a657865637574653a2070726f706f73616c2060408201527f63616e206f6e6c7920626520657865637574656420696620697420697320717560608201527f6575656400000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526043908201527f46657377476f7665726e6f723a3a5f71756575654f725265766572743a20707260408201527f6f706f73616c20616374696f6e20616c7265616479207175657565642061742060608201527f6574610000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526035908201527f46657377476f7665726e6f723a3a63616e63656c3a2063616e6e6f742063616e60408201527f63656c2065786563757465642070726f706f73616c0000000000000000000000606082015260800190565b60208082526029908201527f46657377476f7665726e6f723a3a5f63617374566f74653a20766f74696e672060408201527f697320636c6f7365640000000000000000000000000000000000000000000000606082015260800190565b60208082526058908201527f46657377476f7665726e6f723a3a70726f706f73653a206f6e65206c6976652060408201527f70726f706f73616c207065722070726f706f7365722c20666f756e6420616e2060608201527f616c72656164792070656e64696e672070726f706f73616c0000000000000000608082015260a00190565b6020808252602e908201527f46657377476f7665726e6f723a3a63616e63656c3a2070726f706f736572206160408201527f626f7665207468726573686f6c64000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f46657377476f7665726e6f723a3a5f63617374566f74653a20766f746572206160408201527f6c726561647920766f7465640000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f46657377476f7665726e6f723a3a63617374566f746542795369673a20696e7660408201527f616c6964207369676e6174757265000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f46657377476f7665726e6f723a3a70726f706f73653a206d7573742070726f7660408201527f69646520616374696f6e73000000000000000000000000000000000000000000606082015260800190565b60208082526011908201527f6164646974696f6e206f766572666c6f77000000000000000000000000000000604082015260600190565b60208082526043908201527f46657377476f7665726e6f723a3a71756575653a2070726f706f73616c20636160408201527f6e206f6e6c79206265207175657565642069662069742069732073756363656560608201527f6465640000000000000000000000000000000000000000000000000000000000608082015260a00190565b6020808252601b908201527f46657377476f7665726e6f723a3a204e6f742054696d656c6f636b0000000000604082015260600190565b60208082526027908201527f46657377476f7665726e6f723a3a70726f706f73653a20746f6f206d616e792060408201527f616374696f6e7300000000000000000000000000000000000000000000000000606082015260800190565b60208082526043908201527f46657377476f7665726e6f723a3a70726f706f73653a2070726f706f73616c2060408201527f66756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6160608201527f7463680000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526015908201527f7375627472616374696f6e20756e646572666c6f770000000000000000000000604082015260600190565b60208082526057908201527f46657377476f7665726e6f723a3a70726f706f73653a206f6e65206c6976652060408201527f70726f706f73616c207065722070726f706f7365722c20666f756e6420616e2060608201527f616c7265616479206163746976652070726f706f73616c000000000000000000608082015260a00190565b8151151581526020808301511515908201526040918201516bffffffffffffffffffffffff169181019190915260600190565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b1660208401528060408401526133788184018b6127e3565b9050828103606084015261338c818a612883565b905082810360808401526133a08189612833565b905082810360a08401526133b48188612833565b90508560c08401528460e08401528281036101008401526133d581856128b2565b9c9b505050505050505050505050565b998a5273ffffffffffffffffffffffffffffffffffffffff9890981660208a015260408901969096526060880194909452608087019290925260a086015260c085015260e0840152151561010083015215156101208201526101400190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561347157600080fd5b604052919050565b600067ffffffffffffffff82111561348f578081fd5b5060209081020190565b600067ffffffffffffffff8211156134af578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60009081526020902090565b60005b838110156135025781810151838201526020016134ea565b838111156110605750506000910152565b801515811461233657600080fdfea2646970667358221220c178f60f481c098fb1f270bd650cf9d46ee5d8821cf1d4367413ecef65ac3bc864736f6c63430007000033000000000000000000000000d24347c40f4ed36f326f82e3befffaf3b8d436a10000000000000000000000004269eaec0710b874ea55e2aedc8fb66223522bbe

Deployed Bytecode

0x6080604052600436106101ac5760003560e01c8063671dd275116100ec578063d33219b41161008a578063ddf0b00911610064578063ddf0b00914610476578063deaaa7cc14610496578063e23a9a52146104ab578063fe0d94c1146104d8576101ac565b8063d33219b41461042c578063da35c66414610441578063da95691a14610456576101ac565b8063a6c26603116100c6578063a6c26603146103cd578063b1610d7e146103e2578063b58131b0146103f7578063cbd08c8c1461040c576101ac565b8063671dd2751461038157806372a108e8146103965780637bdbe4d0146103b8576101ac565b806324bc1a64116101595780633e4f49e6116101335780633e4f49e6146102e557806340e58ee5146103125780634178b249146103325780634634c61f14610361576101ac565b806324bc1a641461028b578063328dd982146102a057806336e7048a146102d0576101ac565b806315373e3d1161018a57806315373e3d1461023457806317977c611461025657806320606b7014610276576101ac565b8063013cf08b146101b157806302a251a3146101f057806306fdde0314610212575b600080fd5b3480156101bd57600080fd5b506101d16101cc3660046126bd565b6104eb565b6040516101e79a999897969594939291906133e5565b60405180910390f35b3480156101fc57600080fd5b5061020561055a565b6040516101e79190612b5b565b34801561021e57600080fd5b50610227610560565b6040516101e79190612c00565b34801561024057600080fd5b5061025461024f366004612701565b610599565b005b34801561026257600080fd5b5061020561027136600461252f565b6105a8565b34801561028257600080fd5b506102056105ba565b34801561029757600080fd5b506102056105de565b3480156102ac57600080fd5b506102c06102bb3660046126bd565b6105e4565b6040516101e79493929190612add565b3480156102dc57600080fd5b506102056108bc565b3480156102f157600080fd5b506103056103003660046126bd565b6108c1565b6040516101e79190612bec565b34801561031e57600080fd5b5061025461032d3660046126bd565b610a85565b34801561033e57600080fd5b5061035261034d3660046126d5565b610d4c565b6040516101e793929190612b35565b34801561036d57600080fd5b5061025461037c366004612730565b610d8c565b34801561038d57600080fd5b50610205610f8a565b3480156103a257600080fd5b506103ab610f99565b6040516101e79190612bcb565b3480156103c457600080fd5b50610205610fb5565b3480156103d957600080fd5b50610205610fbb565b3480156103ee57600080fd5b50610205610fca565b34801561040357600080fd5b50610205610fd1565b34801561041857600080fd5b50610254610427366004612786565b610fd7565b34801561043857600080fd5b506103ab611066565b34801561044d57600080fd5b50610205611082565b34801561046257600080fd5b5061020561047136600461254a565b611088565b34801561048257600080fd5b506102546104913660046126bd565b61153f565b3480156104a257600080fd5b50610205611844565b3480156104b757600080fd5b506104cb6104c63660046126d5565b611868565b6040516101e7919061330f565b6102546104e63660046126bd565b6118e6565b60076020819052600091825260409091208054600182015460068301549383015460088401546009850154600a860154600b870154600c90970154959773ffffffffffffffffffffffffffffffffffffffff909516969495939492939192909160ff808216916101009004168a565b60035481565b6040518060400160405280600f81526020017f46657377617020476f7665726e6f72000000000000000000000000000000000081525081565b6105a4338383611b0e565b5050565b60096020526000908152604090205481565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60005481565b6060806060806000600760008781526020019081526020016000209050806002018160030182600401836005018380548060200260200160405190810160405280929190818152602001828054801561067357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610648575b50505050509350828054806020026020016040519081016040528092919081815260200182805480156106c557602002820191906000526020600020905b8154815260200190600101908083116106b1575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156107b65760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156107a25780601f10610777576101008083540402835291602001916107a2565b820191906000526020600020905b81548152906001019060200180831161078557829003601f168201915b5050505050815260200190600101906106ed565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156108a65760008481526020908190208301805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156108925780601f1061086757610100808354040283529160200191610892565b820191906000526020600020905b81548152906001019060200180831161087557829003601f168201915b5050505050815260200190600101906107dd565b5050505090509450945094509450509193509193565b600a81565b600081600654101580156108d55750600082115b610914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612c70565b60405180910390fd5b6000828152600760205260409020600c81015460ff1615610939576002915050610a80565b8060070154421161094e576000915050610a80565b80600801544211610963576001915050610a80565b80600b015481600a015411158061097f575060005481600a0154105b1561098e576003915050610a80565b60098101546109a1576004915050610a80565b600c810154610100900460ff16156109bd576007915050610a80565b610a6a8160090154600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1a287e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2d57600080fd5b505afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190612632565b611d9c565b4210610a7a576006915050610a80565b60059150505b919050565b6007610a90826108c1565b6007811115610a9b57fe5b1415610ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612dd3565b60008181526007602052604090206001805460055482840154919273ffffffffffffffffffffffffffffffffffffffff9182169263782d6fe1921690610b1a904390611de2565b6040518363ffffffff1660e01b8152600401610b379291906129d3565b60206040518083038186803b158015610b4f57600080fd5b505afa158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8791906127b7565b6bffffffffffffffffffffffff1610610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612f10565b600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560005b6002820154811015610d105760045460028301805473ffffffffffffffffffffffffffffffffffffffff9092169163591fcdfe919084908110610c3b57fe5b60009182526020909120015460038501805473ffffffffffffffffffffffffffffffffffffffff9092169185908110610c7057fe5b9060005260206000200154856004018581548110610c8a57fe5b90600052602060002001866005018681548110610ca357fe5b9060005260206000200187600901546040518663ffffffff1660e01b8152600401610cd2959493929190612a96565b600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505060019092019150610bfc9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c82604051610d409190612b5b565b60405180910390a15050565b600860209081526000928352604080842090915290825290205460ff808216916101008104909116906201000090046bffffffffffffffffffffffff1683565b60408051808201909152600f81527f46657377617020476f7665726e6f72000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f22f36df5bb944924cdf1bc87e66d8eaf516f7dddddd96bf66459cb9deb1c72d6610e0d611e24565b30604051602001610e219493929190612b64565b60405160208183030381529060405280519060200120905060007f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee8787604051602001610e7093929190612b95565b60405160208183030381529060405280519060200120905060008282604051602001610e9d92919061299d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610eda9493929190612bad565b6020604051602081039080840390855afa158015610efc573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612fca565b610f7f818a8a611b0e565b505050505050505050565b6a211654585005212800000081565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6a084595161401484a00000081565b62093a8081565b60015481565b60045473ffffffffffffffffffffffffffffffffffffffff163314611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b9061313e565b600054156110365760008490555b600154156110445760018390555b600254156110525760028290555b600354156110605760038190555b50505050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b6001805460055460009273ffffffffffffffffffffffffffffffffffffffff9091169063782d6fe19033906110be904390611de2565b6040518363ffffffff1660e01b81526004016110db9291906129d3565b60206040518083038186803b1580156110f357600080fd5b505afa158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b91906127b7565b6bffffffffffffffffffffffff1611611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612c13565b84518651148015611182575083518651145b801561118f575082518651145b6111c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b906131d2565b85516111fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613027565b6002548651111561123a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613175565b3360009081526009602052604090205480156112eb57600061125b826108c1565b9050600181600781111561126b57fe5b14156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b9061328c565b60008160078111156112b157fe5b14156112e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612e8d565b505b600042905060006112fe82600354611d9c565b6006805460010190559050611311611fd3565b60065480825233602080840191825260408085018e8152606086018e9052608086018d905260a086018c90524360c087015260e08601889052610100860187905260009485526007835293208451815591516001830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790559151805184936113c092600285019291019061205c565b50606082015180516113dc9160038401916020909101906120e6565b50608082015180516113f891600484019160209091019061212d565b5060a08201518051611414916005840191602090910190612186565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff021916908315150217905550905050806000015160096000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e60405161152999989796959493929190613342565b60405180910390a1519998505050505050505050565b600461154a826108c1565b600781111561155557fe5b1461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b906130bb565b60008181526007602090815260408083206004805483517f6a42b8f8000000000000000000000000000000000000000000000000000000008152935192959461160c94429473ffffffffffffffffffffffffffffffffffffffff90931693636a42b8f8938282019392909190829003018186803b158015610a2d57600080fd5b905060005b60028301548110156117fd576117f583600201828154811061162f57fe5b60009182526020909120015460038501805473ffffffffffffffffffffffffffffffffffffffff909216918490811061166457fe5b906000526020600020015485600401848154811061167e57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416939093049283018590048502810185019091528181529283018282801561172a5780601f106116ff5761010080835404028352916020019161172a565b820191906000526020600020905b81548152906001019060200180831161170d57829003601f168201915b505050505086600501858154811061173e57fe5b600091825260209182902001805460408051601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001871615020190941693909304928301859004850281018501909152818152928301828280156117ea5780601f106117bf576101008083540402835291602001916117ea565b820191906000526020600020905b8154815290600101906020018083116117cd57829003601f168201915b505050505086611e28565b600101611611565b50600982018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892906118379085908490613444565b60405180910390a1505050565b7f8e25870c07e0b0b3884c78da52790939a455c275406c44ae8b434b692fb916ee81565b6118706121df565b50600082815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684528252918290208251606081018452905460ff80821615158352610100820416151592820192909252620100009091046bffffffffffffffffffffffff16918101919091525b92915050565b60056118f1826108c1565b60078111156118fc57fe5b14611933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612ccd565b6000818152600760205260408120600c810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055905b6002820154811015611ade5760045460038301805473ffffffffffffffffffffffffffffffffffffffff90921691630825f38f9190849081106119b057fe5b90600052602060002001548460020184815481106119ca57fe5b60009182526020909120015460038601805473ffffffffffffffffffffffffffffffffffffffff90921691869081106119ff57fe5b9060005260206000200154866004018681548110611a1957fe5b90600052602060002001876005018781548110611a3257fe5b9060005260206000200188600901546040518763ffffffff1660e01b8152600401611a61959493929190612a96565b6000604051808303818588803b158015611a7a57600080fd5b505af1158015611a8e573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ad5919081019061264a565b50600101611971565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051610d409190612b5b565b6001611b19836108c1565b6007811115611b2457fe5b14611b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612e30565b60008281526007602090815260408083206008835281842073ffffffffffffffffffffffffffffffffffffffff88168552909252909120805460ff1615611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612f6d565b60055460068301546040517f782d6fe100000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff169163782d6fe191611c2a918a916004016129d3565b60206040518083038186803b158015611c4257600080fd5b505afa158015611c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7a91906127b7565b90508315611ca857611c9e83600a0154826bffffffffffffffffffffffff16611d9c565b600a840155611cca565b611cc483600b0154826bffffffffffffffffffffffff16611d9c565b600b8401555b815460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010085151502177fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff16620100006bffffffffffffffffffffffff8316021782556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611d8c9088908890889086906129f9565b60405180910390a1505050505050565b600082820183811015611ddb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613084565b9392505050565b600082821115611e1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90613255565b50900390565b4690565b60045460405173ffffffffffffffffffffffffffffffffffffffff9091169063f2b0653790611e639088908890889088908890602001612a3c565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611e959190612b5b565b60206040518083038186803b158015611ead57600080fd5b505afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee59190612616565b15611f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90612d50565b600480546040517f3a66f90100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691633a66f90191611f79918991899189918991899101612a3c565b602060405180830381600087803b158015611f9357600080fd5b505af1158015611fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcb9190612632565b505050505050565b604051806101c0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8280548282559060005260206000209081019282156120d6579160200282015b828111156120d657825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061207c565b506120e29291506121ff565b5090565b828054828255906000526020600020908101928215612121579160200282015b82811115612121578251825591602001919060010190612106565b506120e2929150612236565b82805482825590600052602060002090810192821561217a579160200282015b8281111561217a578251805161216a91849160209091019061224b565b509160200191906001019061214d565b506120e29291506122b8565b8280548282559060005260206000209081019282156121d3579160200282015b828111156121d357825180516121c391849160209091019061224b565b50916020019190600101906121a6565b506120e29291506122d5565b604080516060810182526000808252602082018190529181019190915290565b5b808211156120e25780547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101612200565b5b808211156120e25760008155600101612237565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061228c57805160ff1916838001178555612121565b828001600101855582156121215791820182811115612121578251825591602001919060010190612106565b808211156120e25760006122cc82826122f2565b506001016122b8565b808211156120e25760006122e982826122f2565b506001016122d5565b50805460018160011615610100020316600290046000825580601f106123185750612336565b601f0160209004906000526020600020908101906123369190612236565b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146118e057600080fd5b600082601f83011261236d578081fd5b813561238061237b82613479565b613452565b8181529150602080830190848101818402860182018710156123a157600080fd5b60005b848110156123c8576123b68883612339565b845292820192908201906001016123a4565b505050505092915050565b600082601f8301126123e3578081fd5b81356123f161237b82613479565b818152915060208083019084810160005b848110156123c857612419888484358a01016124e1565b84529282019290820190600101612402565b600082601f83011261243b578081fd5b813561244961237b82613479565b818152915060208083019084810160005b848110156123c857612471888484358a01016124e1565b8452928201929082019060010161245a565b600082601f830112612493578081fd5b81356124a161237b82613479565b8181529150602080830190848101818402860182018710156124c257600080fd5b60005b848110156123c8578135845292820192908201906001016124c5565b600082601f8301126124f1578081fd5b81356124ff61237b82613499565b915080825283602082850101111561251657600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215612540578081fd5b611ddb8383612339565b600080600080600060a08688031215612561578081fd5b853567ffffffffffffffff80821115612578578283fd5b61258489838a0161235d565b96506020880135915080821115612599578283fd5b6125a589838a01612483565b955060408801359150808211156125ba578283fd5b6125c689838a0161242b565b945060608801359150808211156125db578283fd5b6125e789838a016123d3565b935060808801359150808211156125fc578283fd5b50612609888289016124e1565b9150509295509295909350565b600060208284031215612627578081fd5b8151611ddb81613513565b600060208284031215612643578081fd5b5051919050565b60006020828403121561265b578081fd5b815167ffffffffffffffff811115612671578182fd5b8201601f81018413612681578182fd5b805161268f61237b82613499565b8181528560208385010111156126a3578384fd5b6126b48260208301602086016134e7565b95945050505050565b6000602082840312156126ce578081fd5b5035919050565b600080604083850312156126e7578182fd5b823591506126f88460208501612339565b90509250929050565b60008060408385031215612713578182fd5b82359150602083013561272581613513565b809150509250929050565b600080600080600060a08688031215612747578283fd5b85359450602086013561275981613513565b9350604086013560ff8116811461276e578384fd5b94979396509394606081013594506080013592915050565b6000806000806080858703121561279b578182fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156127c8578081fd5b81516bffffffffffffffffffffffff81168114611ddb578182fd5b6000815180845260208085019450808401835b8381101561282857815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016127f6565b509495945050505050565b6000815180845260208085019450848183028601828601855b858110156128765783830389526128648383516128b2565b9885019892509084019060010161284c565b5090979650505050505050565b6000815180845260208085019450808401835b8381101561282857815187529582019590820190600101612896565b600081518084526128ca8160208601602086016134e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000815460018082166000811461291a576001811461295657612994565b607f600284041686527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083166020870152604086019350612994565b60028304808752612966866134db565b60005b8281101561298a5781546020828b0101528482019150602081019050612969565b8801602001955050505b50505092915050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9490941684526020840192909252151560408301526bffffffffffffffffffffffff16606082015260800190565b600073ffffffffffffffffffffffffffffffffffffffff8716825285602083015260a06040830152612a7160a08301866128b2565b8281036060840152612a8381866128b2565b9150508260808301529695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8716825285602083015260a06040830152612acb60a08301866128fc565b8281036060840152612a8381866128fc565b600060808252612af060808301876127e3565b8281036020840152612b028187612883565b90508281036040840152612b168186612833565b90508281036060840152612b2a8185612833565b979650505050505050565b921515835290151560208301526bffffffffffffffffffffffff16604082015260600190565b90815260200190565b9384526020840192909252604083015273ffffffffffffffffffffffffffffffffffffffff16606082015260800190565b92835260208301919091521515604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6020810160088310612bfa57fe5b91905290565b600060208252611ddb60208301846128b2565b6020808252603e908201527f46657377476f7665726e6f723a3a70726f706f73653a2070726f706f7365722060408201527f766f7465732062656c6f772070726f706f73616c207468726573686f6c640000606082015260800190565b60208082526028908201527f46657377476f7665726e6f723a3a73746174653a20696e76616c69642070726f60408201527f706f73616c206964000000000000000000000000000000000000000000000000606082015260800190565b60208082526044908201527f46657377476f7665726e6f723a3a657865637574653a2070726f706f73616c2060408201527f63616e206f6e6c7920626520657865637574656420696620697420697320717560608201527f6575656400000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526043908201527f46657377476f7665726e6f723a3a5f71756575654f725265766572743a20707260408201527f6f706f73616c20616374696f6e20616c7265616479207175657565642061742060608201527f6574610000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526035908201527f46657377476f7665726e6f723a3a63616e63656c3a2063616e6e6f742063616e60408201527f63656c2065786563757465642070726f706f73616c0000000000000000000000606082015260800190565b60208082526029908201527f46657377476f7665726e6f723a3a5f63617374566f74653a20766f74696e672060408201527f697320636c6f7365640000000000000000000000000000000000000000000000606082015260800190565b60208082526058908201527f46657377476f7665726e6f723a3a70726f706f73653a206f6e65206c6976652060408201527f70726f706f73616c207065722070726f706f7365722c20666f756e6420616e2060608201527f616c72656164792070656e64696e672070726f706f73616c0000000000000000608082015260a00190565b6020808252602e908201527f46657377476f7665726e6f723a3a63616e63656c3a2070726f706f736572206160408201527f626f7665207468726573686f6c64000000000000000000000000000000000000606082015260800190565b6020808252602c908201527f46657377476f7665726e6f723a3a5f63617374566f74653a20766f746572206160408201527f6c726561647920766f7465640000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f46657377476f7665726e6f723a3a63617374566f746542795369673a20696e7660408201527f616c6964207369676e6174757265000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f46657377476f7665726e6f723a3a70726f706f73653a206d7573742070726f7660408201527f69646520616374696f6e73000000000000000000000000000000000000000000606082015260800190565b60208082526011908201527f6164646974696f6e206f766572666c6f77000000000000000000000000000000604082015260600190565b60208082526043908201527f46657377476f7665726e6f723a3a71756575653a2070726f706f73616c20636160408201527f6e206f6e6c79206265207175657565642069662069742069732073756363656560608201527f6465640000000000000000000000000000000000000000000000000000000000608082015260a00190565b6020808252601b908201527f46657377476f7665726e6f723a3a204e6f742054696d656c6f636b0000000000604082015260600190565b60208082526027908201527f46657377476f7665726e6f723a3a70726f706f73653a20746f6f206d616e792060408201527f616374696f6e7300000000000000000000000000000000000000000000000000606082015260800190565b60208082526043908201527f46657377476f7665726e6f723a3a70726f706f73653a2070726f706f73616c2060408201527f66756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6160608201527f7463680000000000000000000000000000000000000000000000000000000000608082015260a00190565b60208082526015908201527f7375627472616374696f6e20756e646572666c6f770000000000000000000000604082015260600190565b60208082526057908201527f46657377476f7665726e6f723a3a70726f706f73653a206f6e65206c6976652060408201527f70726f706f73616c207065722070726f706f7365722c20666f756e6420616e2060608201527f616c7265616479206163746976652070726f706f73616c000000000000000000608082015260a00190565b8151151581526020808301511515908201526040918201516bffffffffffffffffffffffff169181019190915260600190565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b1660208401528060408401526133788184018b6127e3565b9050828103606084015261338c818a612883565b905082810360808401526133a08189612833565b905082810360a08401526133b48188612833565b90508560c08401528460e08401528281036101008401526133d581856128b2565b9c9b505050505050505050505050565b998a5273ffffffffffffffffffffffffffffffffffffffff9890981660208a015260408901969096526060880194909452608087019290925260a086015260c085015260e0840152151561010083015215156101208201526101400190565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561347157600080fd5b604052919050565b600067ffffffffffffffff82111561348f578081fd5b5060209081020190565b600067ffffffffffffffff8211156134af578081fd5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60009081526020902090565b60005b838110156135025781810151838201526020016134ea565b838111156110605750506000910152565b801515811461233657600080fdfea2646970667358221220c178f60f481c098fb1f270bd650cf9d46ee5d8821cf1d4367413ecef65ac3bc864736f6c63430007000033

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

000000000000000000000000d24347c40f4ed36f326f82e3befffaf3b8d436a10000000000000000000000004269eaec0710b874ea55e2aedc8fb66223522bbe

-----Decoded View---------------
Arg [0] : timelock_ (address): 0xd24347C40f4ed36f326f82E3bEFFfaf3B8D436a1
Arg [1] : Feswa_ (address): 0x4269eaec0710b874ea55e2AeDc8Fb66223522Bbe

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d24347c40f4ed36f326f82e3befffaf3b8d436a1
Arg [1] : 0000000000000000000000004269eaec0710b874ea55e2aedc8fb66223522bbe


Deployed Bytecode Sourcemap

99:13696:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3369:43;;;;;;;;;;-1:-1:-1;3369:43:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1073:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;171:47::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11699:124::-;;;;;;;;;;-1:-1:-1;11699:124:0;;;;;:::i;:::-;;:::i;:::-;;3613:50;;;;;;;;;;-1:-1:-1;3613:50:0;;;;;:::i;:::-;;:::i;3736:122::-;;;;;;;;;;;;;:::i;726:23::-;;;;;;;;;;;;;:::i;10190:287::-;;;;;;;;;;-1:-1:-1;10190:287:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;413:52::-;;;;;;;;;;;;;:::i;10635:1056::-;;;;;;;;;;-1:-1:-1;10635:1056:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9500:682::-;;;;;;;;;;-1:-1:-1;9500:682:0;;;;;:::i;:::-;;:::i;3487:62::-;;;;;;;;;;-1:-1:-1;3487:62:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;11831:624::-;;;;;;;;;;-1:-1:-1;11831:624:0;;;;;:::i;:::-;;:::i;231:63::-;;;;;;;;;;;;;:::i;1269:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;966:33::-;;;;;;;;;;;;;:::i;322:63::-;;;;;;;;;;;;;:::i;504:56::-;;;;;;;;;;;;;:::i;846:29::-;;;;;;;;;;;;;:::i;5253:516::-;;;;;;;;;;-1:-1:-1;5253:516:0;;;;;:::i;:::-;;:::i;1167:33::-;;;;;;;;;;;;;:::i;1352:25::-;;;;;;;;;;;;;:::i;5777:2144::-;;;;;;;;;;-1:-1:-1;5777:2144:0;;;;;:::i;:::-;;:::i;7929:578::-;;;;;;;;;;-1:-1:-1;7929:578:0;;;;;:::i;:::-;;:::i;3948:94::-;;;;;;;;;;;;;:::i;10485:142::-;;;;;;;;;;-1:-1:-1;10485:142:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8920:572::-;;;;;;:::i;:::-;;:::i;3369:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1073:24::-;;;;:::o;171:47::-;;;;;;;;;;;;;;;;;;;:::o;11699:124::-;11773:42;11783:10;11795;11807:7;11773:9;:42::i;:::-;11699:124;;:::o;3613:50::-;;;;;;;;;;;;;:::o;3736:122::-;3778:80;3736:122;:::o;726:23::-;;;;:::o;10190:287::-;10248:24;10274:20;10296:26;10324:24;10361:18;10382:9;:21;10392:10;10382:21;;;;;;;;;;;10361:42;;10422:1;:9;;10433:1;:8;;10443:1;:12;;10457:1;:11;;10414:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10190:287;;;;;:::o;413:52::-;463:2;413:52;:::o;10635:1056::-;10688:13;10739:10;10722:13;;:27;;:45;;;;;10766:1;10753:10;:14;10722:45;10714:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;10823:25;10851:21;;;:9;:21;;;;;10887:17;;;;;;10883:801;;;10928:22;10921:29;;;;;10883:801;10991:8;:23;;;10972:15;:42;10968:716;;11038:21;11031:28;;;;;10968:716;11100:8;:21;;;11081:15;:40;11077:607;;11145:20;11138:27;;;;;11077:607;11208:8;:21;;;11187:8;:17;;;:42;;:77;;;;11253:11;;11233:8;:17;;;:31;11187:77;11183:501;;;11288:22;11281:29;;;;;11183:501;11332:12;;;;11328:356;;11373:23;11366:30;;;;;11328:356;11418:17;;;;;;;;;11414:270;;;11459:22;11452:29;;;;;11414:270;11522:45;11529:8;:12;;;11543:8;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11522:6;:45::i;:::-;11503:15;:64;11499:185;;11591:21;11584:28;;;;;11499:185;11652:20;11645:27;;;10635:1056;;;;:::o;9500:682::-;9580:22;9559:17;9565:10;9559:5;:17::i;:::-;:43;;;;;;;;;;9551:109;;;;;;;;;;;;:::i;:::-;9673:25;9701:21;;;:9;:21;;;;;9807:17;;;9741:5;;9761:17;;;;9807;;9741:5;;;;;:19;;9761:17;;9780:23;;9787:12;;9780:6;:23::i;:::-;9741:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:83;;;9733:142;;;;;;;;;;;;:::i;:::-;9888:17;;;:24;;;;9908:4;9888:24;;;:17;9923:206;9944:16;;;:23;9940:27;;9923:206;;;9989:8;;10016:16;;;:19;;9989:8;;;;;:26;;10016:16;10033:1;;10016:19;;;;;;;;;;;;;;;;10037:15;;;:18;;10016:19;;;;;10053:1;;10037:18;;;;;;;;;;;;;;10057:8;:19;;10077:1;10057:22;;;;;;;;;;;;;;;10081:8;:18;;10100:1;10081:21;;;;;;;;;;;;;;;10104:8;:12;;;9989:128;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9969:3:0;;;;;-1:-1:-1;9923:206:0;;-1:-1:-1;9923:206:0;;;10146:28;10163:10;10146:28;;;;;;:::i;:::-;;;;;;;;9500:682;;:::o;3487:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11831:624::-;12014:4;;;;;;;;;;;;;;;;;;11934:23;3778:80;11998:22;12022:12;:10;:12::i;:::-;12044:4;11970:80;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11960:91;;;;;;11934:117;;12062:18;3990:52;12121:10;12133:7;12093:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12083:59;;;;;;12062:80;;12153:14;12209:15;12226:10;12180:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12170:68;;;;;;12153:85;;12249:17;12269:26;12279:6;12287:1;12290;12293;12269:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12269:26:0;;;;;;-1:-1:-1;;12314:23:0;;;12306:82;;;;;;;;;;;;:::i;:::-;12406:41;12416:9;12427:10;12439:7;12406:9;:41::i;:::-;12399:48;;;;11831:624;;;;;:::o;231:63::-;281:13;231:63;:::o;1269:27::-;;;;;;:::o;966:33::-;;;;:::o;322:63::-;372:13;322:63;:::o;504:56::-;554:6;504:56;:::o;846:29::-;;;;:::o;5253:516::-;5410:8;;;;5388:10;:31;5380:71;;;;;;;;;;;;:::i;:::-;5466:11;;:16;5462:58;;5494:11;:26;;;5462:58;5535:17;;:22;5531:70;;5563:17;:38;;;5531:70;5616:21;;:26;5612:78;;5644:21;:46;;;5612:78;5705:12;;:17;5701:60;;5733:12;:28;;;5701:60;5253:516;;;;:::o;1167:33::-;;;;;;:::o;1352:25::-;;;;:::o;5777:2144::-;6023:17;;;5964:5;;5939:4;;5964:5;;;;;:19;;5984:10;;5996:23;;6003:12;;5996:6;:23::i;:::-;5964:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:76;;;5956:151;;;;;;;;;;;;:::i;:::-;6144:6;:13;6126:7;:14;:31;:70;;;;;6179:10;:17;6161:7;:14;:35;6126:70;:108;;;;;6218:9;:16;6200:7;:14;:34;6126:108;6118:188;;;;;;;;;;;;:::i;:::-;6325:14;;6317:75;;;;;;;;;;;;:::i;:::-;6429:21;;6411:7;:14;:39;;6403:91;;;;;;;;;;;;:::i;:::-;6549:10;6507:21;6531:29;;;:17;:29;;;;;;6575:21;;6571:452;;6611:42;6656:23;6662:16;6656:5;:23::i;:::-;6611:68;-1:-1:-1;6732:20:0;6700:28;:52;;;;;;;;;;6692:152;;;;;;;;;;;;:::i;:::-;6897:21;6865:28;:53;;;;;;;;;;6857:154;;;;;;;;;;;;:::i;:::-;6571:452;;7035:19;7057:15;7035:37;;7083:17;7103:36;7110:14;7126:12;;7103:6;:36::i;:::-;7152:13;:15;;;;;;7083:56;-1:-1:-1;7178:27:0;;:::i;:::-;7233:13;;7216:30;;;7280:10;7257:20;;;;:33;;;7301:19;;;;:29;;;7341:18;;;:27;;;7379:22;;;:35;;;7425:21;;;:33;;;7494:12;7469:22;;;:37;7517:26;;;:43;;;7571:24;;;:39;;;-1:-1:-1;7631:25:0;;;:9;:25;;;;:39;;;;;;;;;;;;;7257:33;7631:39;;;;;;;;;;;;;7216:30;;7631:39;;;;;;;;;;:::i;:::-;-1:-1:-1;7631:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7631:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7631:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7723:11;:14;;;7681:17;:39;7699:11;:20;;;7681:39;;;;;;;;;;;;;;;:56;;;;7755:126;7771:11;:14;;;7787:10;7799:7;7808:6;7816:10;7828:9;7839:14;7855:12;7869:11;7755:126;;;;;;;;;;;;;;:::i;:::-;;;;;;;;7899:14;;5777:2144;-1:-1:-1;;;;;;;;;5777:2144:0:o;7929:578::-;8008:23;7987:17;7993:10;7987:5;:17::i;:::-;:44;;;;;;;;;7979:124;;;;;;;;;;;;:::i;:::-;8116:25;8144:21;;;:9;:21;;;;;;;;8211:8;;;:16;;;;;;;8144:21;;8116:25;8187:41;;8194:15;;8211:8;;;;;:14;;:16;;;;8144:21;8211:16;;;;;;;;:8;:16;;;;;;;;;;8187:41;8176:52;;8244:6;8239:185;8260:16;;;:23;8256:27;;8239:185;;;8305:107;8320:8;:16;;8337:1;8320:19;;;;;;;;;;;;;;;;;;8341:15;;;:18;;8320:19;;;;;8357:1;;8341:18;;;;;;;;;;;;;;8361:8;:19;;8381:1;8361:22;;;;;;;;;;;;;;;;;;8305:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8361:22;8305:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8385:8;:18;;8404:1;8385:21;;;;;;;;;;;;;;;;;;8305:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8385:21;8305:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8408:3;8305:14;:107::i;:::-;8285:3;;8239:185;;;-1:-1:-1;8434:12:0;;;:18;;;8468:31;;;;;;8483:10;;8449:3;;8468:31;:::i;:::-;;;;;;;;7929:578;;;:::o;3948:94::-;3990:52;3948:94;:::o;10485:142::-;10558:14;;:::i;:::-;-1:-1:-1;10592:20:0;;;;:8;:20;;;;;;;;:27;;;;;;;;;;;10585:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10485:142;;;;;:::o;8920:572::-;9009:20;8988:17;8994:10;8988:5;:17::i;:::-;:41;;;;;;;;;8980:122;;;;;;;;;;;;:::i;:::-;9113:25;9141:21;;;:9;:21;;;;;9173:17;;;:24;;;;;;;;9141:21;9208:233;9229:16;;;:23;9225:27;;9208:233;;;9274:8;;9308:15;;;:18;;9274:8;;;;;:27;;9308:15;9324:1;;9308:18;;;;;;;;;;;;;;9328:8;:16;;9345:1;9328:19;;;;;;;;;;;;;;;;;;9349:15;;;:18;;9328:19;;;;;9365:1;;9349:18;;;;;;;;;;;;;;9369:8;:19;;9389:1;9369:22;;;;;;;;;;;;;;;9393:8;:18;;9412:1;9393:21;;;;;;;;;;;;;;;9416:8;:12;;;9274:155;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9254:3:0;;9208:233;;;;9456:28;9473:10;9456:28;;;;;;:::i;12463:840::-;12577:20;12556:17;12562:10;12556:5;:17::i;:::-;:41;;;;;;;;;12548:95;;;;;;;;;;;;:::i;:::-;12654:25;12682:21;;;:9;:21;;;;;;;;12740:8;:20;;;;;:27;;;;;;;;;;;12786:16;;;;:25;12778:82;;;;;;;;;;;;:::i;:::-;12886:5;;12913:19;;;;12886:47;;;;;12871:12;;12886:5;;;:19;;:47;;12906:5;;12886:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12871:62;;12950:7;12946:185;;;12994:32;13001:8;:17;;;13020:5;12994:32;;:6;:32::i;:::-;12974:17;;;:52;12946:185;;;13083:36;13090:8;:21;;;13113:5;13083:36;;:6;:36::i;:::-;13059:21;;;:60;12946:185;13143:23;;13162:4;13143:23;;;;;13177:25;;13143:23;13177:25;;;;;13213:21;;;;;;;;;;13252:43;;;;;;13261:5;;13268:10;;13177:25;;13213:21;;13252:43;:::i;:::-;;;;;;;;12463:840;;;;;;:::o;13311:166::-;13372:4;13398:5;;;13422:6;;;;13414:36;;;;;;;;;;;;:::i;:::-;13468:1;13311:166;-1:-1:-1;;;13311:166:0:o;13485:149::-;13546:4;13576:1;13571;:6;;13563:40;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13621:5:0;;;13485:149::o;13642:150::-;13749:9;13642:150;:::o;8515:397::-;8650:8;;8688:47;;8650:8;;;;;:27;;8688:47;;8699:6;;8707:5;;8714:9;;8725:4;;8731:3;;8688:47;;;:::i;:::-;;;;;;;;;;;;;8678:58;;;;;;8650:87;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8649:88;8641:190;;;;;;;;;;;;:::i;:::-;8842:8;;;:62;;;;;:8;;;;;:25;;:62;;8868:6;;8876:5;;8883:9;;8894:4;;8900:3;;8842:62;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8515:397;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;5:130::-;72:20;;55003:42;54992:54;;57396:35;;57386:2;;57445:1;;57435:12;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;-1:-1;;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;:::-;354:80;:::i;:::-;462:21;;;345:89;-1:-1;506:4;519:14;;;;494:17;;;608;;;599:27;;;;596:36;-1:-1;593:2;;;645:1;;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;760:37;793:3;781:10;760:37;:::i;:::-;748:50;;812:14;;;;840;;;;702:1;695:9;655:206;;;659:14;;;;;237:630;;;;:::o;891:705::-;;1017:3;1010:4;1002:6;998:17;994:27;984:2;;-1:-1;;1025:12;984:2;1072:6;1059:20;1094:89;1109:73;1175:6;1109:73;:::i;1094:89::-;1211:21;;;1085:98;-1:-1;1255:4;1268:14;;;;1243:17;;;1363:1;1348:242;1373:6;1370:1;1367:13;1348:242;;;1480:46;1522:3;1255:4;1456:3;1443:17;1247:6;1431:30;;1480:46;:::i;:::-;1468:59;;1541:14;;;;1569;;;;1395:1;1388:9;1348:242;;1621:708;;1748:3;1741:4;1733:6;1729:17;1725:27;1715:2;;-1:-1;;1756:12;1715:2;1803:6;1790:20;1825:90;1840:74;1907:6;1840:74;:::i;1825:90::-;1943:21;;;1816:99;-1:-1;1987:4;2000:14;;;;1975:17;;;2095:1;2080:243;2105:6;2102:1;2099:13;2080:243;;;2212:47;2255:3;1987:4;2188:3;2175:17;1979:6;2163:30;;2212:47;:::i;:::-;2200:60;;2274:14;;;;2302;;;;2127:1;2120:9;2080:243;;2355:707;;2472:3;2465:4;2457:6;2453:17;2449:27;2439:2;;-1:-1;;2480:12;2439:2;2527:6;2514:20;2549:80;2564:64;2621:6;2564:64;:::i;2549:80::-;2657:21;;;2540:89;-1:-1;2701:4;2714:14;;;;2689:17;;;2803;;;2794:27;;;;2791:36;-1:-1;2788:2;;;2840:1;;2830:12;2788:2;2865:1;2850:206;2875:6;2872:1;2869:13;2850:206;;;5032:20;;2943:50;;3007:14;;;;3035;;;;2897:1;2890:9;2850:206;;3615:440;;3716:3;3709:4;3701:6;3697:17;3693:27;3683:2;;-1:-1;;3724:12;3683:2;3771:6;3758:20;3793:64;3808:48;3849:6;3808:48;:::i;3793:64::-;3784:73;;3877:6;3870:5;3863:21;3981:3;3913:4;3972:6;3905;3963:16;;3960:25;3957:2;;;3998:1;;3988:12;3957:2;56688:6;3913:4;3905:6;3901:17;3913:4;3939:5;3935:16;56665:30;56744:1;56726:16;;;3913:4;56726:16;56719:27;3939:5;3676:379;-1:-1;;3676:379::o;5515:241::-;;5619:2;5607:9;5598:7;5594:23;5590:32;5587:2;;;-1:-1;;5625:12;5587:2;5687:53;5732:7;5708:22;5687:53;:::i;5763:1431::-;;;;;;6064:3;6052:9;6043:7;6039:23;6035:33;6032:2;;;-1:-1;;6071:12;6032:2;6129:17;6116:31;6167:18;;6159:6;6156:30;6153:2;;;-1:-1;;6189:12;6153:2;6219:78;6289:7;6280:6;6269:9;6265:22;6219:78;:::i;:::-;6209:88;;6362:2;6351:9;6347:18;6334:32;6320:46;;6167:18;6378:6;6375:30;6372:2;;;-1:-1;;6408:12;6372:2;6438:78;6508:7;6499:6;6488:9;6484:22;6438:78;:::i;:::-;6428:88;;6581:2;6570:9;6566:18;6553:32;6539:46;;6167:18;6597:6;6594:30;6591:2;;;-1:-1;;6627:12;6591:2;6657:88;6737:7;6728:6;6717:9;6713:22;6657:88;:::i;:::-;6647:98;;6810:2;6799:9;6795:18;6782:32;6768:46;;6167:18;6826:6;6823:30;6820:2;;;-1:-1;;6856:12;6820:2;6886:87;6965:7;6956:6;6945:9;6941:22;6886:87;:::i;:::-;6876:97;;7038:3;7027:9;7023:19;7010:33;6996:47;;6167:18;7055:6;7052:30;7049:2;;;-1:-1;;7085:12;7049:2;;7115:63;7170:7;7161:6;7150:9;7146:22;7115:63;:::i;:::-;7105:73;;;6026:1168;;;;;;;;:::o;7201:257::-;;7313:2;7301:9;7292:7;7288:23;7284:32;7281:2;;;-1:-1;;7319:12;7281:2;3282:6;3276:13;3294:30;3318:5;3294:30;:::i;7465:263::-;;7580:2;7568:9;7559:7;7555:23;7551:32;7548:2;;;-1:-1;;7586:12;7548:2;-1:-1;3551:13;;7542:186;-1:-1;7542:186::o;7735:360::-;;7859:2;7847:9;7838:7;7834:23;7830:32;7827:2;;;-1:-1;;7865:12;7827:2;7916:17;7910:24;7954:18;7946:6;7943:30;7940:2;;;-1:-1;;7976:12;7940:2;8047:22;;4169:4;4157:17;;4153:27;-1:-1;4143:2;;-1:-1;;4184:12;4143:2;4224:6;4218:13;4246:64;4261:48;4302:6;4261:48;:::i;4246:64::-;4330:6;4323:5;4316:21;4434:3;7859:2;4425:6;4358;4416:16;;4413:25;4410:2;;;-1:-1;;4441:12;4410:2;4461:39;4493:6;7859:2;4392:5;4388:16;7859:2;4358:6;4354:17;4461:39;:::i;:::-;7996:83;7821:274;-1:-1;;;;;7821:274::o;8102:241::-;;8206:2;8194:9;8185:7;8181:23;8177:32;8174:2;;;-1:-1;;8212:12;8174:2;-1:-1;5032:20;;8168:175;-1:-1;8168:175::o;8620:366::-;;;8741:2;8729:9;8720:7;8716:23;8712:32;8709:2;;;-1:-1;;8747:12;8709:2;5045:6;5032:20;8799:63;;8917:53;8962:7;8899:2;8942:9;8938:22;8917:53;:::i;:::-;8907:63;;8703:283;;;;;:::o;8993:360::-;;;9111:2;9099:9;9090:7;9086:23;9082:32;9079:2;;;-1:-1;;9117:12;9079:2;5045:6;5032:20;9169:63;;9269:2;9309:9;9305:22;3134:20;3159:30;3183:5;3159:30;:::i;:::-;9277:60;;;;9073:280;;;;;:::o;9360:733::-;;;;;;9527:3;9515:9;9506:7;9502:23;9498:33;9495:2;;;-1:-1;;9534:12;9495:2;5045:6;5032:20;9586:63;;9686:2;9726:9;9722:22;3134:20;3159:30;3183:5;3159:30;:::i;:::-;9694:60;-1:-1;9791:2;9828:22;;5308:20;55208:4;55197:16;;57884:33;;57874:2;;-1:-1;;57921:12;57874:2;9489:604;;;;-1:-1;9799:61;;9897:2;9936:22;;3403:20;;-1:-1;10005:3;10045:22;3403:20;;9489:604;-1:-1;;9489:604::o;10100:617::-;;;;;10255:3;10243:9;10234:7;10230:23;10226:33;10223:2;;;-1:-1;;10262:12;10223:2;-1:-1;;5032:20;;;10414:2;10453:22;;5032:20;;-1:-1;10522:2;10561:22;;5032:20;;10630:2;10669:22;5032:20;;-1:-1;10217:500;-1:-1;10217:500::o;10724:261::-;;10838:2;10826:9;10817:7;10813:23;10809:32;10806:2;;;-1:-1;;10844:12;10806:2;5459:6;5453:13;55297:26;58032:5;55286:38;58008:5;58005:34;57995:2;;-1:-1;;58043:12;12166:690;;12359:5;51701:12;53060:6;53055:3;53048:19;53097:4;;53092:3;53088:14;12371:93;;53097:4;12535:5;50733:14;-1:-1;12574:260;12599:6;12596:1;12593:13;12574:260;;;12660:13;;55003:42;54992:54;11966:37;;11146:14;;;;52539;;;;12621:1;12614:9;12574:260;;;-1:-1;12840:10;;12290:566;-1:-1;;;;;12290:566::o;12891:920::-;;13111:5;51701:12;53060:6;53055:3;53048:19;53097:4;;53092:3;53088:14;13123:102;;;53097:4;13282:6;13278:17;13273:3;13269:27;53097:4;13376:5;50733:14;-1:-1;13415:357;13440:6;13437:1;13434:13;13415:357;;;13502:9;13496:4;13492:20;13487:3;13480:33;11294:64;11354:3;13547:6;13541:13;11294:64;:::i;:::-;13751:14;;;;13561:90;-1:-1;52539:14;;;;13462:1;13455:9;13415:357;;;-1:-1;13795:10;;13033:778;-1:-1;;;;;;;13033:778::o;14815:690::-;;15008:5;51701:12;53060:6;53055:3;53048:19;53097:4;;53092:3;53088:14;15020:93;;53097:4;15184:5;50733:14;-1:-1;15223:260;15248:6;15245:1;15242:13;15223:260;;;15309:13;;15796:37;;11728:14;;;;52539;;;;15270:1;15263:9;15223:260;;16004:323;;16136:5;51701:12;53060:6;53055:3;53048:19;16219:52;16264:6;53097:4;53092:3;53088:14;53097:4;16245:5;16241:16;16219:52;:::i;:::-;57206:2;57186:14;57202:7;57182:28;16283:39;;;;53097:4;16283:39;;16084:243;-1:-1;;16084:243::o;16707:818::-;;16824:5;16818:12;16858:1;;16847:9;16843:17;16871:1;16866:247;;;;17124:1;17119:400;;;;16836:683;;16866:247;16944:4;16940:1;16929:9;16925:17;16921:28;53055:3;53048:19;17067:9;17056;17052:25;53097:4;53092:3;53088:14;17040:38;17092:14;53092:3;17092:14;17085:21;;16866:247;;17119:400;17188:1;17177:9;17173:17;53060:6;53055:3;53048:19;17296:37;17327:5;17296:37;:::i;:::-;-1:-1;17357:130;17371:6;17368:1;17365:13;17357:130;;;17436:7;17430:14;53097:4;17426:1;53092:3;17417:11;;17410:35;16858:1;17468:7;17464:15;17453:26;;53097:4;17390:1;17386:12;17381:17;;17357:130;;;17501:11;;53097:4;17501:11;;-1:-1;;;16836:683;;;;16794:731;;;;:::o;28662:659::-;21143:66;21123:87;;21108:1;21229:11;;15796:37;;;;29173:12;;;15796:37;29284:12;;;28907:414::o;29328:349::-;55003:42;54992:54;;;;11835:58;;29663:2;29648:18;;15796:37;29491:2;29476:18;;29462:215::o;30024:542::-;55003:42;54992:54;;;;11966:37;;30393:2;30378:18;;15796:37;;;;54680:13;54673:21;30470:2;30455:18;;15568:34;55297:26;55286:38;30552:2;30537:18;;28377:49;30228:3;30213:19;;30199:367::o;30573:840::-;;55003:42;54596:5;54992:54;11973:3;11966:37;15826:5;31015:2;31004:9;31000:18;15796:37;30850:3;31052:2;31041:9;31037:18;31030:48;31092:78;30850:3;30839:9;30835:19;31156:6;31092:78;:::i;:::-;31218:9;31212:4;31208:20;31203:2;31192:9;31188:18;31181:48;31243:76;31314:4;31305:6;31243:76;:::i;:::-;31235:84;;;15826:5;31398:3;31387:9;31383:19;15796:37;30821:592;;;;;;;;:::o;31420:828::-;;55003:42;11996:5;54992:54;11973:3;11966:37;15826:5;31856:2;31845:9;31841:18;15796:37;31691:3;31893:2;31882:9;31878:18;31871:48;31933:75;31691:3;31680:9;31676:19;31994:6;31933:75;:::i;:::-;32056:9;32050:4;32046:20;32041:2;32030:9;32026:18;32019:48;32081:73;32149:4;32140:6;32081:73;:::i;32255:1224::-;;32704:3;32726:17;32719:47;32780:108;32704:3;32693:9;32689:19;32874:6;32780:108;:::i;:::-;32936:9;32930:4;32926:20;32921:2;32910:9;32906:18;32899:48;32961:108;33064:4;33055:6;32961:108;:::i;:::-;32953:116;;33117:9;33111:4;33107:20;33102:2;33091:9;33087:18;33080:48;33142:128;33265:4;33256:6;33142:128;:::i;:::-;33134:136;;33318:9;33312:4;33308:20;33303:2;33292:9;33288:18;33281:48;33343:126;33464:4;33455:6;33343:126;:::i;:::-;33335:134;32675:804;-1:-1;;;;;;;32675:804::o;33486:416::-;54680:13;;54673:21;15568:34;;54680:13;;54673:21;33807:2;33792:18;;15568:34;55297:26;55286:38;33888:2;33873:18;;28497:36;33655:2;33640:18;;33626:276::o;33909:222::-;15796:37;;;34036:2;34021:18;;34007:124::o;34138:556::-;15796:37;;;34514:2;34499:18;;15796:37;;;;34597:2;34582:18;;15796:37;55003:42;54992:54;34680:2;34665:18;;11966:37;34349:3;34334:19;;34320:374::o;34701:432::-;15796:37;;;35042:2;35027:18;;15796:37;;;;54680:13;54673:21;35119:2;35104:18;;15568:34;34878:2;34863:18;;34849:284::o;35140:548::-;15796:37;;;55208:4;55197:16;;;;35508:2;35493:18;;28260:35;35591:2;35576:18;;15796:37;35674:2;35659:18;;15796:37;35347:3;35332:19;;35318:370::o;35695:268::-;55003:42;54992:54;;;;17627:73;;35845:2;35830:18;;35816:147::o;36251:250::-;36392:2;36377:18;;57308:1;57298:12;;57288:2;;57314:9;57288:2;17982:64;;;36363:138;:::o;36508:310::-;;36655:2;36676:17;36669:47;36730:78;36655:2;36644:9;36640:18;36794:6;36730:78;:::i;36825:416::-;37025:2;37039:47;;;19827:2;37010:18;;;53048:19;19863:34;53088:14;;;19843:55;19932:32;19918:12;;;19911:54;19984:12;;;36996:245::o;37248:416::-;37448:2;37462:47;;;20235:2;37433:18;;;53048:19;20271:34;53088:14;;;20251:55;20340:10;20326:12;;;20319:32;20370:12;;;37419:245::o;37671:416::-;37871:2;37885:47;;;20621:2;37856:18;;;53048:19;20657:34;53088:14;;;20637:55;20726:34;20712:12;;;20705:56;20795:6;20781:12;;;20774:28;20821:12;;;37842:245::o;38094:416::-;38294:2;38308:47;;;21479:2;38279:18;;;53048:19;21515:34;53088:14;;;21495:55;21584:34;21570:12;;;21563:56;21653:5;21639:12;;;21632:27;21678:12;;;38265:245::o;38517:416::-;38717:2;38731:47;;;21929:2;38702:18;;;53048:19;21965:34;53088:14;;;21945:55;22034:23;22020:12;;;22013:45;22077:12;;;38688:245::o;38940:416::-;39140:2;39154:47;;;22328:2;39125:18;;;53048:19;22364:34;53088:14;;;22344:55;22433:11;22419:12;;;22412:33;22464:12;;;39111:245::o;39363:416::-;39563:2;39577:47;;;22715:2;39548:18;;;53048:19;22751:34;53088:14;;;22731:55;22820:34;22806:12;;;22799:56;22889:26;22875:12;;;22868:48;22935:12;;;39534:245::o;39786:416::-;39986:2;40000:47;;;23186:2;39971:18;;;53048:19;23222:34;53088:14;;;23202:55;23291:16;23277:12;;;23270:38;23327:12;;;39957:245::o;40209:416::-;40409:2;40423:47;;;23578:2;40394:18;;;53048:19;23614:34;53088:14;;;23594:55;23683:14;23669:12;;;23662:36;23717:12;;;40380:245::o;40632:416::-;40832:2;40846:47;;;23968:2;40817:18;;;53048:19;24004:34;53088:14;;;23984:55;24073:16;24059:12;;;24052:38;24109:12;;;40803:245::o;41055:416::-;41255:2;41269:47;;;24360:2;41240:18;;;53048:19;24396:34;53088:14;;;24376:55;24465:13;24451:12;;;24444:35;24498:12;;;41226:245::o;41478:416::-;41678:2;41692:47;;;24749:2;41663:18;;;53048:19;24785;53088:14;;;24765:40;24824:12;;;41649:245::o;41901:416::-;42101:2;42115:47;;;25075:2;42086:18;;;53048:19;25111:34;53088:14;;;25091:55;25180:34;25166:12;;;25159:56;25249:5;25235:12;;;25228:27;25274:12;;;42072:245::o;42324:416::-;42524:2;42538:47;;;25525:2;42509:18;;;53048:19;25561:29;53088:14;;;25541:50;25610:12;;;42495:245::o;42747:416::-;42947:2;42961:47;;;25861:2;42932:18;;;53048:19;25897:34;53088:14;;;25877:55;25966:9;25952:12;;;25945:31;25995:12;;;42918:245::o;43170:416::-;43370:2;43384:47;;;26246:2;43355:18;;;53048:19;26282:34;53088:14;;;26262:55;26351:34;26337:12;;;26330:56;26420:5;26406:12;;;26399:27;26445:12;;;43341:245::o;43593:416::-;43793:2;43807:47;;;26696:2;43778:18;;;53048:19;26732:23;53088:14;;;26712:44;26775:12;;;43764:245::o;44016:416::-;44216:2;44230:47;;;27026:2;44201:18;;;53048:19;27062:34;53088:14;;;27042:55;27131:34;27117:12;;;27110:56;27200:25;27186:12;;;27179:47;27245:12;;;44187:245::o;44439:314::-;27545:23;;54680:13;54673:21;15568:34;;27713:4;27702:16;;;27696:23;54680:13;54673:21;27767:14;;;15568:34;27862:4;27851:16;;;27845:23;55297:26;55286:38;27920:14;;;28497:36;;;;44612:2;44597:18;;44583:170::o;44989:1888::-;;45606:3;15826:5;15803:3;15796:37;55003:42;54596:5;54992:54;45779:2;45768:9;45764:18;11835:58;45606:3;45816:2;45805:9;45801:18;45794:48;45856:108;45606:3;45595:9;45591:19;45950:6;45856:108;:::i;:::-;45848:116;;46012:9;46006:4;46002:20;45997:2;45986:9;45982:18;45975:48;46037:108;46140:4;46131:6;46037:108;:::i;:::-;46029:116;;46194:9;46188:4;46184:20;46178:3;46167:9;46163:19;46156:49;46219:128;46342:4;46333:6;46219:128;:::i;:::-;46211:136;;46396:9;46390:4;46386:20;46380:3;46369:9;46365:19;46358:49;46421:126;46542:4;46533:6;46421:126;:::i;:::-;46413:134;;15826:5;46626:3;46615:9;46611:19;15796:37;15826:5;46710:3;46699:9;46695:19;15796:37;46764:9;46758:4;46754:20;46748:3;46737:9;46733:19;46726:49;46789:78;46862:4;46853:6;46789:78;:::i;:::-;46781:86;45577:1300;-1:-1;;;;;;;;;;;;45577:1300::o;46884:1204::-;15796:37;;;55003:42;54992:54;;;;47416:2;47401:18;;11966:37;47499:2;47484:18;;15796:37;;;;47582:2;47567:18;;15796:37;;;;47665:3;47650:19;;15796:37;;;;47749:3;47734:19;;15796:37;47833:3;47818:19;;15796:37;47917:3;47902:19;;15796:37;54680:13;54673:21;47995:3;47980:19;;15568:34;54680:13;54673:21;48073:3;48058:19;;15568:34;47251:3;47236:19;;47222:866::o;48095:333::-;15796:37;;;48414:2;48399:18;;15796:37;48250:2;48235:18;;48221:207::o;48435:256::-;48497:2;48491:9;48523:17;;;48598:18;48583:34;;48619:22;;;48580:62;48577:2;;;48655:1;;48645:12;48577:2;48497;48664:22;48475:216;;-1:-1;48475:216::o;48698:304::-;;48857:18;48849:6;48846:30;48843:2;;;-1:-1;;48879:12;48843:2;-1:-1;48924:4;48912:17;;;48977:15;;48780:222::o;49961:321::-;;50104:18;50096:6;50093:30;50090:2;;;-1:-1;;50126:12;50090:2;-1:-1;50203:4;50180:17;50199:9;50176:33;50267:4;50257:15;;50027:255::o;51269:157::-;;51363:14;;;51405:4;51392:18;;;51322:104::o;56761:268::-;56826:1;56833:101;56847:6;56844:1;56841:13;56833:101;;;56914:11;;;56908:18;56895:11;;;56888:39;56869:2;56862:10;56833:101;;;56949:6;56946:1;56943:13;56940:2;;;-1:-1;;56826:1;56996:16;;56989:27;56810:219::o;57461:111::-;57542:5;54680:13;54673:21;57520:5;57517:32;57507:2;;57563:1;;57553:12

Swarm Source

ipfs://c178f60f481c098fb1f270bd650cf9d46ee5d8821cf1d4367413ecef65ac3bc8

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.