ETH Price: $2,632.49 (-1.01%)
Gas: 2 Gwei

Contract

0xc5807678dc9EA22360466909d959A80a0A06AD37
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040130105452021-08-12 13:11:511093 days ago1628773911IN
 Create: GovernorBravoDelegate
0 ETH0.1651193340.40908801

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GovernorBravoDelegate

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-12
*/

pragma solidity ^0.5.16;
pragma experimental ABIEncoderV2;


contract GovernorBravoEvents {
    /// @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 startBlock, uint endBlock, string description);

    /// @notice An event emitted when a vote has been cast on a proposal
    /// @param voter The address which casted a vote
    /// @param proposalId The proposal id which was voted on
    /// @param support Support value for the vote. 0=against, 1=for, 2=abstain
    /// @param votes Number of votes which were cast by the voter
    /// @param reason The reason given for the vote by the voter
    event VoteCast(address indexed voter, uint proposalId, uint8 support, uint votes, string reason);

    /// @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);

    /// @notice An event emitted when the voting delay is set
    event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay);

    /// @notice An event emitted when the voting period is set
    event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod);

    /// @notice Emitted when implementation is changed
    event NewImplementation(address oldImplementation, address newImplementation);

    /// @notice Emitted when proposal threshold is set
    event ProposalThresholdSet(uint oldProposalThreshold, uint newProposalThreshold);

    /// @notice Emitted when pendingAdmin is changed
    event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin);

    /// @notice Emitted when pendingAdmin is accepted, which means admin is updated
    event NewAdmin(address oldAdmin, address newAdmin);
}

contract GovernorBravoDelegatorStorage {
    /// @notice Administrator for this contract
    address public admin;

    /// @notice Pending administrator for this contract
    address public pendingAdmin;

    /// @notice Active brains of Governor
    address public implementation;

    /// @notice The address of the Governor Guardian
    address public guardian;
}


/**
 * @title Storage for Governor Bravo Delegate
 * @notice For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new
 * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention
 * GovernorBravoDelegateStorageVX.
 */
contract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage {

    /// @notice The delay before voting on a proposal may take place, once proposed, in blocks
    uint public votingDelay;

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

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

    /// @notice Initial proposal id set at become
    uint public initialProposalId;

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

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

    /// @notice The address of the bZx governance token
    StakingInterface public staking;

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

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


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

        /// @notice Creator of the proposal
        address proposer;

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

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

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

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

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

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

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

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

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

        /// @notice Current number of votes for abstaining for this proposal
        uint abstainVotes;

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

        /// @notice Flag marking whether the proposal has been executed
        bool executed;

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

    /// @notice Ballot receipt record for a voter
    struct Receipt {
        /// @notice Whether or not a vote has been cast
        bool hasVoted;

        /// @notice Whether or not the voter supports the proposal or abstains
        uint8 support;

        /// @notice 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
    }
}

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 StakingInterface {
    function votingBalanceOf(
        address account,
        uint proposalCount)
        external
        view
        returns (uint totalVotes);

    function votingBalanceOfNow(
        address account)
        external
        view
        returns (uint totalVotes);

    function _setProposalVals(
        address account,
        uint proposalCount)
        external
        returns (uint);
}


interface GovernorAlpha {
    /// @notice The total number of proposals
    function proposalCount() external returns (uint);
}

contract GovernorBravoDelegate is GovernorBravoDelegateStorageV1, GovernorBravoEvents {

    /// @notice The name of this contract
    string public constant name = "bZx Governor Bravo";

    /// @notice The minimum setable proposal threshold
    uint public constant MIN_PROPOSAL_THRESHOLD = 5150000e18; // 5,150,000 = 0.5% of BZRX

    /// @notice The maximum setable proposal threshold
    uint public constant MAX_PROPOSAL_THRESHOLD = 20600000e18; // 20,600,000 = 2% of BZRX

    /// @notice The minimum setable voting period
    uint public constant MIN_VOTING_PERIOD = 5760; // About 24 hours

    /// @notice The max setable voting period
    uint public constant MAX_VOTING_PERIOD = 80640; // About 2 weeks

    /// @notice The min setable voting delay
    uint public constant MIN_VOTING_DELAY = 1;

    /// @notice The max setable voting delay
    uint public constant MAX_VOTING_DELAY = 40320; // About 1 week

    /// @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 constant quorumVotes = 41200000e18; // 41,200,000 = 4% of BZRX

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

    /// @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,uint8 support)");

    /**
      * @notice Used to initialize the contract during delegator contructor
      * @param timelock_ The address of the Timelock
      * @param staking_ The address of the STAKING
      * @param votingPeriod_ The initial voting period
      * @param votingDelay_ The initial voting delay
      * @param proposalThreshold_ The initial proposal threshold
      */
    function initialize(address timelock_, address staking_, uint votingPeriod_, uint votingDelay_, uint proposalThreshold_) public {
        require(address(timelock) == address(0), "GovernorBravo::initialize: can only initialize once");
        require(msg.sender == admin, "GovernorBravo::initialize: admin only");
        require(timelock_ != address(0), "GovernorBravo::initialize: invalid timelock address");
        require(staking_ != address(0), "GovernorBravo::initialize: invalid STAKING address");
        require(votingPeriod_ >= MIN_VOTING_PERIOD && votingPeriod_ <= MAX_VOTING_PERIOD, "GovernorBravo::initialize: invalid voting period");
        require(votingDelay_ >= MIN_VOTING_DELAY && votingDelay_ <= MAX_VOTING_DELAY, "GovernorBravo::initialize: invalid voting delay");
        require(proposalThreshold_ >= MIN_PROPOSAL_THRESHOLD && proposalThreshold_ <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::initialize: invalid proposal threshold");

        timelock = TimelockInterface(timelock_);
        staking = StakingInterface(staking_);
        votingPeriod = votingPeriod_;
        votingDelay = votingDelay_;
        proposalThreshold = proposalThreshold_;

        guardian = msg.sender;
    }

    /**
      * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold
      * @param targets Target addresses for proposal calls
      * @param values Eth values for proposal calls
      * @param signatures Function signatures for proposal calls
      * @param calldatas Calldatas for proposal calls
      * @param description String description of the proposal
      * @return Proposal id of new proposal
      */
    function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) {
        require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorBravo::propose: proposal function information arity mismatch");
        require(targets.length != 0, "GovernorBravo::propose: must provide actions");
        require(targets.length <= proposalMaxOperations, "GovernorBravo::propose: too many actions");

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

        uint proposalId = proposalCount + 1;
        require(staking._setProposalVals(msg.sender, proposalId) > proposalThreshold, "GovernorBravo::propose: proposer votes below proposal threshold");
        proposalCount = proposalId;

        uint startBlock = add256(block.number, votingDelay);
        uint endBlock = add256(startBlock, votingPeriod);

        Proposal memory newProposal = Proposal({
            id: proposalId,
            proposer: msg.sender,
            eta: 0,
            targets: targets,
            values: values,
            signatures: signatures,
            calldatas: calldatas,
            startBlock: startBlock,
            endBlock: endBlock,
            forVotes: 0,
            againstVotes: 0,
            abstainVotes: 0,
            canceled: false,
            executed: false
        });

        proposals[proposalId] = newProposal;
        latestProposalIds[msg.sender] = proposalId;

        emit ProposalCreated(proposalId, msg.sender, targets, values, signatures, calldatas, startBlock, endBlock, description);
        return proposalId;
    }

    /**
      * @notice Queues a proposal of state succeeded
      * @param proposalId The id of the proposal to queue
      */
    function queue(uint proposalId) external {
        require(state(proposalId) == ProposalState.Succeeded, "GovernorBravo::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++) {
            queueOrRevertInternal(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta);
        }
        proposal.eta = eta;
        emit ProposalQueued(proposalId, eta);
    }

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

    /**
      * @notice Executes a queued proposal if eta has passed
      * @param proposalId The id of the proposal to execute
      */
    function execute(uint proposalId) external payable {
        require(state(proposalId) == ProposalState.Queued, "GovernorBravo::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);
    }

    /**
      * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold
      * @param proposalId The id of the proposal to cancel
      */
    function cancel(uint proposalId) external {
        require(state(proposalId) != ProposalState.Executed, "GovernorBravo::cancel: cannot cancel executed proposal");

        Proposal storage proposal = proposals[proposalId];
        require(msg.sender == proposal.proposer || staking.votingBalanceOfNow(proposal.proposer) < proposalThreshold || msg.sender == guardian, "GovernorBravo::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);
    }

    /**
      * @notice Gets actions of a proposal
      * @param proposalId the id of the proposal
      * @return Targets, values, signatures, and calldatas of the proposal actions
      */
    function getActions(uint proposalId) external 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);
    }

    /**
      * @notice Gets the receipt for a voter on a given proposal
      * @param proposalId the id of proposal
      * @param voter The address of the voter
      * @return The voting receipt
      */
    function getReceipt(uint proposalId, address voter) external view returns (Receipt memory) {
        return proposals[proposalId].receipts[voter];
    }

    /**
      * @notice Gets the state of a proposal
      * @param proposalId The id of the proposal
      * @return Proposal state
      */
    function state(uint proposalId) public view returns (ProposalState) {
        require(proposalCount >= proposalId && proposalId > initialProposalId, "GovernorBravo::state: invalid proposal id");
        Proposal storage proposal = proposals[proposalId];
        if (proposal.canceled) {
            return ProposalState.Canceled;
        } else if (block.number <= proposal.startBlock) {
            return ProposalState.Pending;
        } else if (block.number <= proposal.endBlock) {
            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;
        }
    }

    /**
      * @notice Cast a vote for a proposal
      * @param proposalId The id of the proposal to vote on
      * @param support The support value for the vote. 0=against, 1=for, 2=abstain
      */
    function castVote(uint proposalId, uint8 support) external {
        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), "");
    }

    /**
      * @notice Cast a vote for a proposal with a reason
      * @param proposalId The id of the proposal to vote on
      * @param support The support value for the vote. 0=against, 1=for, 2=abstain
      * @param reason The reason given for the vote by the voter
      */
    function castVoteWithReason(uint proposalId, uint8 support, string calldata reason) external {
        emit VoteCast(msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason);
    }

    /**
      * @notice Cast a vote for a proposal by signature
      * @dev External function that accepts EIP-712 signatures for voting on proposals.
      */
    function castVoteBySig(uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), 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), "GovernorBravo::castVoteBySig: invalid signature");
        emit VoteCast(signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), "");
    }

    /**
      * @notice Internal function that caries out voting logic
      * @param voter The voter that is casting their vote
      * @param proposalId The id of the proposal to vote on
      * @param support The support value for the vote. 0=against, 1=for, 2=abstain
      * @return The number of votes cast
      */
    function castVoteInternal(address voter, uint proposalId, uint8 support) internal returns (uint96) {
        require(state(proposalId) == ProposalState.Active, "GovernorBravo::castVoteInternal: voting is closed");
        require(support <= 2, "GovernorBravo::castVoteInternal: invalid vote type");
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = proposal.receipts[voter];
        require(receipt.hasVoted == false, "GovernorBravo::castVoteInternal: voter already voted");
        // 2**96-1 is greater than total supply of bzrx 1.3b*1e18 thus guaranteeing it won't ever overflow
        uint96 votes = uint96(staking.votingBalanceOf(voter, proposalId));

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

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

        return votes;
    }

    /**
      * @notice Admin function for setting the voting delay
      * @param newVotingDelay new voting delay, in blocks
      */
    function __setVotingDelay(uint newVotingDelay) external {
        require(msg.sender == admin, "GovernorBravo::__setVotingDelay: admin only");
        require(newVotingDelay >= MIN_VOTING_DELAY && newVotingDelay <= MAX_VOTING_DELAY, "GovernorBravo::__setVotingDelay: invalid voting delay");
        uint oldVotingDelay = votingDelay;
        votingDelay = newVotingDelay;

        emit VotingDelaySet(oldVotingDelay,votingDelay);
    }

    /**
      * @notice Admin function for setting the voting period
      * @param newVotingPeriod new voting period, in blocks
      */
    function __setVotingPeriod(uint newVotingPeriod) external {
        require(msg.sender == admin, "GovernorBravo::__setVotingPeriod: admin only");
        require(newVotingPeriod >= MIN_VOTING_PERIOD && newVotingPeriod <= MAX_VOTING_PERIOD, "GovernorBravo::__setVotingPeriod: invalid voting period");
        uint oldVotingPeriod = votingPeriod;
        votingPeriod = newVotingPeriod;

        emit VotingPeriodSet(oldVotingPeriod, votingPeriod);
    }

    /**
      * @notice Admin function for setting the proposal threshold
      * @dev newProposalThreshold must be greater than the hardcoded min
      * @param newProposalThreshold new proposal threshold
      */
    function __setProposalThreshold(uint newProposalThreshold) external {
        require(msg.sender == admin, "GovernorBravo::__setProposalThreshold: admin only");
        require(newProposalThreshold >= MIN_PROPOSAL_THRESHOLD && newProposalThreshold <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::__setProposalThreshold: invalid proposal threshold");
        uint oldProposalThreshold = proposalThreshold;
        proposalThreshold = newProposalThreshold;

        emit ProposalThresholdSet(oldProposalThreshold, proposalThreshold);
    }

    /**
      * @notice Begins transfer of admin rights. The newPendingAdmin must call `__acceptLocalAdmin` to finalize the transfer.
      * @dev Admin function to begin change of admin. The newPendingAdmin must call `__acceptLocalAdmin` to finalize the transfer.
      * @param newPendingAdmin New pending admin.
      */
    function __setPendingLocalAdmin(address newPendingAdmin) external {
        // Check caller = admin
        require(msg.sender == admin, "GovernorBravo:__setPendingLocalAdmin: admin only");

        // Save current value, if any, for inclusion in log
        address oldPendingAdmin = pendingAdmin;

        // Store pendingAdmin with value newPendingAdmin
        pendingAdmin = newPendingAdmin;

        // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin)
        emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin);
    }

    /**
      * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin
      * @dev Admin function for pending admin to accept role and update admin
      */
    function __acceptLocalAdmin() external {
        // Check caller is pendingAdmin and pendingAdmin ≠ address(0)
        require(msg.sender == pendingAdmin && msg.sender != address(0), "GovernorBravo:__acceptLocalAdmin: pending admin only");

        // Save current values for inclusion in log
        address oldAdmin = admin;
        address oldPendingAdmin = pendingAdmin;

        // Store admin with value pendingAdmin
        admin = pendingAdmin;

        // Clear the pending value
        pendingAdmin = address(0);

        emit NewAdmin(oldAdmin, admin);
        emit NewPendingAdmin(oldPendingAdmin, pendingAdmin);
    }

    function __changeGuardian(address guardian_) public {
        require(msg.sender == guardian, "GovernorBravo::__changeGuardian: sender must be gov guardian");
        require(guardian_ != address(0), "GovernorBravo::__changeGuardian: not allowed");
        guardian = guardian_;
    }

    function __acceptAdmin() public {
        require(msg.sender == guardian, "GovernorBravo::__acceptAdmin: sender must be gov guardian");
        timelock.acceptAdmin();
    }

    function __abdicate() public {
        require(msg.sender == guardian, "GovernorBravo::__abdicate: sender must be gov guardian");
        guardian = address(0);
    }

    function __queueSetTimelockPendingAdmin(address newPendingAdmin, uint eta) public {
        require(msg.sender == guardian, "GovernorBravo::__queueSetTimelockPendingAdmin: sender must be gov guardian");
        timelock.queueTransaction(address(timelock), 0, "setPendingAdmin(address)", abi.encode(newPendingAdmin), eta);
    }

    function __executeSetTimelockPendingAdmin(address newPendingAdmin, uint eta) public {
        require(msg.sender == guardian, "GovernorBravo::__executeSetTimelockPendingAdmin: sender must be gov guardian");
        timelock.executeTransaction(address(timelock), 0, "setPendingAdmin(address)", abi.encode(newPendingAdmin), eta);
    }

    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 getChainIdInternal() internal pure returns (uint) {
        uint chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"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":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","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":"uint256","name":"oldProposalThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"ProposalThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"VotingDelaySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"VotingPeriodSet","type":"event"},{"constant":true,"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTING_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_VOTING_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"__abdicate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"__acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"__acceptLocalAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"guardian_","type":"address"}],"name":"__changeGuardian","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"__executeSetTimelockPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"}],"name":"__queueSetTimelockPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"__setPendingLocalAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"__setProposalThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"__setVotingDelay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"__setVotingPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"}],"name":"castVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"string","name":"reason","type":"string"}],"name":"castVoteWithReason","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"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[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct GovernorBravoDelegateStorageV1.Receipt","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"staking_","type":"address"},{"internalType":"uint256","name":"votingPeriod_","type":"uint256"},{"internalType":"uint256","name":"votingDelay_","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold_","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"staking","outputs":[{"internalType":"contract StakingInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum GovernorBravoDelegateStorageV1.ProposalState","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506148f5806100206000396000f3fe6080604052600436106102725760003560e01c8063760fbc131161014f578063d13f90b4116100c1578063e23a9a521161007a578063e23a9a52146106d7578063e48083fe14610704578063e8997c4b14610719578063f851a44014610739578063fc4eee421461074e578063fe0d94c11461076357610272565b8063d13f90b414610638578063d33219b414610658578063da35c6641461066d578063da95691a14610682578063ddf0b009146106a2578063deaaa7cc146106c257610272565b8063a00ac53b11610113578063a00ac53b146105a4578063a64e024a146105c4578063b1126263146105d9578063b58131b0146105ee578063b5c4f54a14610603578063b9a619611461062357610272565b8063760fbc1314610525578063791f5d231461053a5780637b3c71d31461054f5780637bdbe4d01461056f578063915006711461058457610272565b8063328dd982116101e857806340e58ee5116101ac57806340e58ee514610484578063452a9320146104a45780634cf088d9146104b95780634db2b665146104db57806356781388146104f05780635c60da1b1461051057610272565b8063328dd982146103d257806335e588a1146104025780633932abb1146104225780633bccf4fd146104375780633e4f49e61461045757610272565b806320606b701161023a57806320606b701461033c578063215809ca1461035157806321f43e421461036657806324bc1a641461038657806325fd935a1461039b57806326782247146103b057610272565b8063013cf08b1461027757806302a251a3146102b657806306fdde03146102d857806316986a83146102fa57806317977c611461031c575b600080fd5b34801561028357600080fd5b50610297610292366004612dce565b610776565b6040516102ad9a9998979695949392919061460a565b60405180910390f35b3480156102c257600080fd5b506102cb6107d6565b6040516102ad9190614227565b3480156102e457600080fd5b506102ed6107dc565b6040516102ad91906142e3565b34801561030657600080fd5b5061031a610315366004612ba9565b61080a565b005b34801561032857600080fd5b506102cb610337366004612ba9565b61089c565b34801561034857600080fd5b506102cb6108ae565b34801561035d57600080fd5b506102cb6108c5565b34801561037257600080fd5b5061031a610381366004612c44565b6108cb565b34801561039257600080fd5b506102cb6109aa565b3480156103a757600080fd5b506102cb6109b9565b3480156103bc57600080fd5b506103c56109c8565b6040516102ad919061409e565b3480156103de57600080fd5b506103f26103ed366004612dce565b6109d7565b6040516102ad94939291906141da565b34801561040e57600080fd5b5061031a61041d366004612dce565b610c66565b34801561042e57600080fd5b506102cb610cf9565b34801561044357600080fd5b5061031a610452366004612eb4565b610cff565b34801561046357600080fd5b50610477610472366004612dce565b610ed5565b6040516102ad91906142d5565b34801561049057600080fd5b5061031a61049f366004612dce565b61105c565b3480156104b057600080fd5b506103c56112ac565b3480156104c557600080fd5b506104ce6112bb565b6040516102ad91906142c7565b3480156104e757600080fd5b5061031a6112ca565b3480156104fc57600080fd5b5061031a61050b366004612e1c565b6113a8565b34801561051c57600080fd5b506103c56113f2565b34801561053157600080fd5b5061031a611401565b34801561054657600080fd5b506102cb61143d565b34801561055b57600080fd5b5061031a61056a366004612e4c565b61144c565b34801561057b57600080fd5b506102cb61149c565b34801561059057600080fd5b5061031a61059f366004612c44565b6114a1565b3480156105b057600080fd5b5061031a6105bf366004612dce565b611577565b3480156105d057600080fd5b506102cb61161d565b3480156105e557600080fd5b506102cb611624565b3480156105fa57600080fd5b506102cb61162a565b34801561060f57600080fd5b5061031a61061e366004612ba9565b611630565b34801561062f57600080fd5b5061031a6116a2565b34801561064457600080fd5b5061031a610653366004612bcf565b611736565b34801561066457600080fd5b506104ce6118c4565b34801561067957600080fd5b506102cb6118d3565b34801561068e57600080fd5b506102cb61069d366004612c7e565b6118d9565b3480156106ae57600080fd5b5061031a6106bd366004612dce565b611ce5565b3480156106ce57600080fd5b506102cb611f61565b3480156106e357600080fd5b506106f76106f2366004612dec565b611f6d565b6040516102ad9190614554565b34801561071057600080fd5b506102cb611fda565b34801561072557600080fd5b5061031a610734366004612dce565b611fdf565b34801561074557600080fd5b506103c5612074565b34801561075a57600080fd5b506102cb612083565b61031a610771366004612dce565b612089565b600b602081905260009182526040909120805460018201546002830154600784015460088501546009860154600a87015497870154600c9097015495976001600160a01b0390951696939592949193909260ff808216916101009004168a565b60055481565b60405180604001604052806012815260200171625a7820476f7665726e6f7220427261766f60701b81525081565b6000546001600160a01b0316331461083d5760405162461bcd60e51b8152600401610834906144d4565b60405180910390fd5b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99061089090839085906140c7565b60405180910390a15050565b600c6020526000908152604090205481565b6040516108ba90614093565b604051809103902081565b61168081565b6003546001600160a01b031633146108f55760405162461bcd60e51b815260040161083490614344565b6009546040516001600160a01b0390911690630825f38f90829060009061092090879060200161409e565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161094f94939291906140e2565b600060405180830381600087803b15801561096957600080fd5b505af115801561097d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a59190810190612d99565b505050565b6a22147079ae94a4b600000081565b6a110a383cd74a525b00000081565b6001546001600160a01b031681565b6060806060806000600b600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610a5957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a3b575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b815481526020019060010190808311610a97575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610b7e5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610b6a5780601f10610b3f57610100808354040283529160200191610b6a565b820191906000526020600020905b815481529060010190602001808311610b4d57829003601f168201915b505050505081526020019060010190610ad3565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610c505760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b505050505081526020019060010190610ba5565b5050505090509450945094509450509193509193565b6000546001600160a01b03163314610c905760405162461bcd60e51b815260040161083490614514565b60018110158015610ca35750619d808111155b610cbf5760405162461bcd60e51b815260040161083490614534565b60048054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906108909083908590614690565b60045481565b6000604051610d0d90614093565b604080519182900382208282019091526012825271625a7820476f7665726e6f7220427261766f60701b6020909201919091527fbc5c853717ad7c00f37d69645b4cd93d06f28e37b72b51b5c13832805ab53c8d610d69612242565b30604051602001610d7d9493929190614235565b6040516020818303038152906040528051906020012090506000604051610da390614057565b604051908190038120610dbc918990899060200161426a565b60405160208183030381529060405280519060200120905060008282604051602001610de9929190614062565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e269493929190614292565b6020604051602081039080840390855afa158015610e48573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e7b5760405162461bcd60e51b8152600401610834906143a4565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610eb3858e8e612247565b604051610ec2939291906146e4565b60405180910390a2505050505050505050565b60008160085410158015610eea575060075482115b610f065760405162461bcd60e51b8152600401610834906144f4565b6000828152600b60205260409020600c81015460ff1615610f2b576002915050611057565b80600701544311610f40576000915050611057565b80600801544311610f55576001915050611057565b80600a01548160090154111580610f7a57506a22147079ae94a4b60000008160090154105b15610f89576003915050611057565b6002810154610f9c576004915050611057565b600c810154610100900460ff1615610fb8576007915050611057565b6002810154600954604080516360d143f160e11b8152905161104193926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b15801561100457600080fd5b505afa158015611018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061103c9190810190612d7b565b612435565b4210611051576006915050611057565b60059150505b919050565b600761106782610ed5565b600781111561107257fe5b14156110905760405162461bcd60e51b8152600401610834906144c4565b6000818152600b6020526040902060018101546001600160a01b031633148061113f5750600654600a54600183015460405163abbd3ab160e01b81526001600160a01b039283169263abbd3ab1926110ed9291169060040161409e565b60206040518083038186803b15801561110557600080fd5b505afa158015611119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061113d9190810190612d7b565b105b8061115457506003546001600160a01b031633145b6111705760405162461bcd60e51b815260040161083490614474565b600c8101805460ff1916600117905560005b600382015481101561127c576009546003830180546001600160a01b039092169163591fcdfe9190849081106111b457fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106111dc57fe5b90600052602060002001548560050185815481106111f657fe5b9060005260206000200186600601868154811061120f57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161123e959493929190614199565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b5050600190920191506111829050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516108909190614227565b6003546001600160a01b031681565b600a546001600160a01b031681565b6001546001600160a01b0316331480156112e357503315155b6112ff5760405162461bcd60e51b815260040161083490614454565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc926113639286929116906140c7565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916108909184916001600160a01b0316906140c7565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836113d7848383612247565b6040516113e6939291906146e4565b60405180910390a25050565b6002546001600160a01b031681565b6003546001600160a01b0316331461142b5760405162461bcd60e51b8152600401610834906143f4565b600380546001600160a01b0319169055565b6a04428e0f35d29496c0000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4858561147b848383612247565b868660405161148e95949392919061469e565b60405180910390a250505050565b600a81565b6003546001600160a01b031633146114cb5760405162461bcd60e51b815260040161083490614354565b6009546040516001600160a01b0390911690633a66f9019082906000906114f690879060200161409e565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161152594939291906140e2565b602060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109a59190810190612d7b565b6000546001600160a01b031633146115a15760405162461bcd60e51b815260040161083490614434565b6a04428e0f35d29496c0000081101580156115c757506a110a383cd74a525b0000008111155b6115e35760405162461bcd60e51b8152600401610834906144e4565b60068054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906108909083908590614690565b62013b0081565b619d8081565b60065481565b6003546001600160a01b0316331461165a5760405162461bcd60e51b815260040161083490614404565b6001600160a01b0381166116805760405162461bcd60e51b815260040161083490614464565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146116cc5760405162461bcd60e51b8152600401610834906143c4565b600960009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561171c57600080fd5b505af1158015611730573d6000803e3d6000fd5b50505050565b6009546001600160a01b03161561175f5760405162461bcd60e51b815260040161083490614304565b6000546001600160a01b031633146117895760405162461bcd60e51b8152600401610834906143e4565b6001600160a01b0385166117af5760405162461bcd60e51b815260040161083490614334565b6001600160a01b0384166117d55760405162461bcd60e51b815260040161083490614544565b61168083101580156117ea575062013b008311155b6118065760405162461bcd60e51b815260040161083490614504565b600182101580156118195750619d808211155b6118355760405162461bcd60e51b8152600401610834906143b4565b6a04428e0f35d29496c00000811015801561185b57506a110a383cd74a525b0000008111155b6118775760405162461bcd60e51b815260040161083490614384565b600980546001600160a01b039687166001600160a01b031991821617909155600a805495909616948116949094179094556005919091556004556006919091556003805490911633179055565b6009546001600160a01b031681565b60085481565b6000845186511480156118ed575083518651145b80156118fa575082518651145b6119165760405162461bcd60e51b8152600401610834906143d4565b85516119345760405162461bcd60e51b815260040161083490614444565b600a865111156119565760405162461bcd60e51b815260040161083490614484565b336000908152600c602052604090205480156119d357600061197782610ed5565b9050600181600781111561198757fe5b14156119a55760405162461bcd60e51b8152600401610834906144a4565b60008160078111156119b357fe5b14156119d15760405162461bcd60e51b815260040161083490614494565b505b600854600654600a54604051632a5522af60e01b81526001909301926001600160a01b0390911690632a5522af90611a1190339086906004016140ac565b602060405180830381600087803b158015611a2b57600080fd5b505af1158015611a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a639190810190612d7b565b11611a805760405162461bcd60e51b8152600401610834906144b4565b806008819055506000611a9543600454612435565b90506000611aa582600554612435565b9050611aaf6125b9565b604051806101c00160405280858152602001336001600160a01b03168152602001600081526020018c81526020018b81526020018a815260200189815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600b60008681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611b93929190612635565b5060808201518051611baf91600484019160209091019061269a565b5060a08201518051611bcb9160058401916020909101906126e1565b5060c08201518051611be791600684019160209091019061273a565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff02191690831515021790555090505083600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338d8d8d8d89898f604051611ccc99989796959493929190614562565b60405180910390a1509193505050505b95945050505050565b6004611cf082610ed5565b6007811115611cfb57fe5b14611d185760405162461bcd60e51b815260040161083490614414565b6000818152600b602090815260408083206009548251630d48571f60e31b81529251919493611d729342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561100457600080fd5b905060005b6003830154811015611f1a57611f12836003018281548110611d9557fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611dbd57fe5b9060005260206000200154856005018481548110611dd757fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e655780601f10611e3a57610100808354040283529160200191611e65565b820191906000526020600020905b815481529060010190602001808311611e4857829003601f168201915b5050505050866006018581548110611e7957fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611f075780601f10611edc57610100808354040283529160200191611f07565b820191906000526020600020905b815481529060010190602001808311611eea57829003601f168201915b50505050508661245a565b600101611d77565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611f549085908490614690565b60405180910390a1505050565b6040516108ba90614057565b611f75612793565b506000828152600b602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6000546001600160a01b031633146120095760405162461bcd60e51b815260040161083490614314565b611680811015801561201e575062013b008111155b61203a5760405162461bcd60e51b815260040161083490614524565b60058054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906108909083908590614690565b6000546001600160a01b031681565b60075481565b600561209482610ed5565b600781111561209f57fe5b146120bc5760405162461bcd60e51b815260040161083490614394565b6000818152600b60205260408120600c8101805461ff001916610100179055905b6003820154811015612212576009546004830180546001600160a01b0390921691630825f38f91908490811061210f57fe5b906000526020600020015484600301848154811061212957fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061215157fe5b906000526020600020015486600501868154811061216b57fe5b9060005260206000200187600601878154811061218457fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016121b3959493929190614199565b6000604051808303818588803b1580156121cc57600080fd5b505af11580156121e0573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122099190810190612d99565b506001016120dd565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516108909190614227565b465b90565b6000600161225484610ed5565b600781111561225f57fe5b1461227c5760405162461bcd60e51b815260040161083490614364565b60028260ff1611156122a05760405162461bcd60e51b8152600401610834906142f4565b6000838152600b602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156122e95760405162461bcd60e51b815260040161083490614374565b600a5460405163c115929760e01b81526000916001600160a01b03169063c11592979061231c908a908a90600401614131565b60206040518083038186803b15801561233457600080fd5b505afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061236c9190810190612d7b565b905060ff85166123975761238d83600a0154826001600160601b0316612435565b600a8401556123ed565b8460ff16600114156123c4576123ba8360090154826001600160601b0316612435565b60098401556123ed565b8460ff16600214156123ed576123e783600b0154826001600160601b0316612435565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b60008282018381101561242e5760405162461bcd60e51b815260040161083490614424565b6009546040516001600160a01b039091169063f2b0653790612488908890889088908890889060200161413f565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016124ba9190614227565b60206040518083038186803b1580156124d257600080fd5b505afa1580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061250a9190810190612d5d565b156125275760405162461bcd60e51b815260040161083490614324565b600954604051633a66f90160e01b81526001600160a01b0390911690633a66f9019061255f908890889088908890889060040161413f565b602060405180830381600087803b15801561257957600080fd5b505af115801561258d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125b19190810190612d7b565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b82805482825590600052602060002090810192821561268a579160200282015b8281111561268a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612655565b506126969291506127b3565b5090565b8280548282559060005260206000209081019282156126d5579160200282015b828111156126d55782518255916020019190600101906126ba565b506126969291506127d7565b82805482825590600052602060002090810192821561272e579160200282015b8281111561272e578251805161271e9184916020909101906127f1565b5091602001919060010190612701565b5061269692915061285e565b828054828255906000526020600020908101928215612787579160200282015b8281111561278757825180516127779184916020909101906127f1565b509160200191906001019061275a565b50612696929150612881565b604080516060810182526000808252602082018190529181019190915290565b61224491905b808211156126965780546001600160a01b03191681556001016127b9565b61224491905b8082111561269657600081556001016127dd565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061283257805160ff19168380011785556126d5565b828001600101855582156126d557918201828111156126d55782518255916020019190600101906126ba565b61224491905b8082111561269657600061287882826128a4565b50600101612864565b61224491905b8082111561269657600061289b82826128a4565b50600101612887565b50805460018160011615610100020316600290046000825580601f106128ca57506128e8565b601f0160209004906000526020600020908101906128e891906127d7565b50565b8035611fd481614863565b600082601f83011261290757600080fd5b813561291a61291582614744565b61471d565b9150818183526020840193506020810190508385602084028201111561293f57600080fd5b60005b8381101561296b578161295588826128eb565b8452506020928301929190910190600101612942565b5050505092915050565b600082601f83011261298657600080fd5b813561299461291582614744565b81815260209384019390925082018360005b8381101561296b57813586016129bc8882612ac0565b84525060209283019291909101906001016129a6565b600082601f8301126129e357600080fd5b81356129f161291582614744565b81815260209384019390925082018360005b8381101561296b5781358601612a198882612ac0565b8452506020928301929190910190600101612a03565b600082601f830112612a4057600080fd5b8135612a4e61291582614744565b91508181835260208401935060208101905083856020840282011115612a7357600080fd5b60005b8381101561296b5781612a898882612aaa565b8452506020928301929190910190600101612a76565b8051611fd481614877565b8035611fd481614880565b8051611fd481614880565b600082601f830112612ad157600080fd5b8135612adf61291582614765565b91508082526020830160208301858383011115612afb57600080fd5b612b06838284614817565b50505092915050565b600082601f830112612b2057600080fd5b8151612b2e61291582614765565b91508082526020830160208301858383011115612b4a57600080fd5b612b06838284614823565b60008083601f840112612b6757600080fd5b50813567ffffffffffffffff811115612b7f57600080fd5b602083019150836001820283011115612b9757600080fd5b9250929050565b8035611fd481614889565b600060208284031215612bbb57600080fd5b6000612bc784846128eb565b949350505050565b600080600080600060a08688031215612be757600080fd5b6000612bf388886128eb565b9550506020612c04888289016128eb565b9450506040612c1588828901612aaa565b9350506060612c2688828901612aaa565b9250506080612c3788828901612aaa565b9150509295509295909350565b60008060408385031215612c5757600080fd5b6000612c6385856128eb565b9250506020612c7485828601612aaa565b9150509250929050565b600080600080600060a08688031215612c9657600080fd5b853567ffffffffffffffff811115612cad57600080fd5b612cb9888289016128f6565b955050602086013567ffffffffffffffff811115612cd657600080fd5b612ce288828901612a2f565b945050604086013567ffffffffffffffff811115612cff57600080fd5b612d0b888289016129d2565b935050606086013567ffffffffffffffff811115612d2857600080fd5b612d3488828901612975565b925050608086013567ffffffffffffffff811115612d5157600080fd5b612c3788828901612ac0565b600060208284031215612d6f57600080fd5b6000612bc78484612a9f565b600060208284031215612d8d57600080fd5b6000612bc78484612ab5565b600060208284031215612dab57600080fd5b815167ffffffffffffffff811115612dc257600080fd5b612bc784828501612b0f565b600060208284031215612de057600080fd5b6000612bc78484612aaa565b60008060408385031215612dff57600080fd5b6000612e0b8585612aaa565b9250506020612c74858286016128eb565b60008060408385031215612e2f57600080fd5b6000612e3b8585612aaa565b9250506020612c7485828601612b9e565b60008060008060608587031215612e6257600080fd5b6000612e6e8787612aaa565b9450506020612e7f87828801612b9e565b935050604085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612b55565b95989497509550505050565b600080600080600060a08688031215612ecc57600080fd5b6000612ed88888612aaa565b9550506020612ee988828901612b9e565b9450506040612c1588828901612b9e565b6000612f068383612f35565b505060200190565b600061242e83836130d7565b6000612f0683836130bd565b612f2f816147e4565b82525050565b612f2f816147ac565b6000612f498261479f565b612f5381856147a3565b9350612f5e8361478d565b8060005b83811015612f8c578151612f768882612efa565b9750612f818361478d565b925050600101612f62565b509495945050505050565b6000612fa28261479f565b612fac81856147a3565b935083602082028501612fbe8561478d565b8060005b85811015612ff85784840389528151612fdb8582612f0e565b9450612fe68361478d565b60209a909a0199925050600101612fc2565b5091979650505050505050565b60006130108261479f565b61301a81856147a3565b93508360208202850161302c8561478d565b8060005b85811015612ff857848403895281516130498582612f0e565b94506130548361478d565b60209a909a0199925050600101613030565b60006130718261479f565b61307b81856147a3565b93506130868361478d565b8060005b83811015612f8c57815161309e8882612f1a565b97506130a98361478d565b92505060010161308a565b612f2f816147b7565b612f2f81612244565b612f2f6130d282612244565b612244565b60006130e28261479f565b6130ec81856147a3565b93506130fc818560208601614823565b6131058161484f565b9093019392505050565b60008154600181166000811461312c576001811461315257613191565b607f600283041661313d81876147a3565b60ff1984168152955050602085019250613191565b6002820461316081876147a3565b955061316b85614793565b60005b8281101561318a5781548882015260019091019060200161316e565b8701945050505b505092915050565b612f2f816147eb565b612f2f816147f6565b612f2f81614801565b60006131c083856147a3565b93506131cd838584614817565b6131058361484f565b60006131e36032836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000613237602883611057565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b60006132816033836147a3565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b60006132d6602c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e67506572696f6481526b3a2061646d696e206f6e6c7960a01b602082015260400192915050565b60006133246055836147a3565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b60006133a16033836147a3565b60008051602061489383398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b60006133e4600283611057565b61190160f01b815260020192915050565b6000613402604c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f6578656375746553657454696d656c81527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060208201526b33b7bb1033bab0b93234b0b760a11b604082015260600192915050565b6000613476604a836147a3565b7f476f7665726e6f72427261766f3a3a5f5f717565756553657454696d656c6f6381527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f6020820152693b1033bab0b93234b0b760b11b604082015260600192915050565b60006134e86031836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b600061353b6034836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b60006135916018836147a3565b7f73657450656e64696e6741646d696e2861646472657373290000000000000000815260200192915050565b60006135ca6035836147a3565b6000805160206148938339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b600061360f6045836147a3565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b600061367c602f836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b60006136cd602f836147a3565b60008051602061489383398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b600061370c6039836147a3565b7f476f7665726e6f72427261766f3a3a5f5f61636365707441646d696e3a20736581527f6e646572206d75737420626520676f7620677561726469616e00000000000000602082015260400192915050565b600061376b6044836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b60006137d76025836147a3565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b600061381e6036836147a3565b7f476f7665726e6f72427261766f3a3a5f5f61626469636174653a2073656e6465815275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b602082015260400192915050565b6000613876603c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f6368616e6765477561726469616e3a81527f2073656e646572206d75737420626520676f7620677561726469616e00000000602082015260400192915050565b60006138d56044836147a3565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b60006139416011836147a3565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b600061396e604383611057565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b60006139d96031836147a3565b7f476f7665726e6f72427261766f3a3a5f5f73657450726f706f73616c5468726581527073686f6c643a2061646d696e206f6e6c7960781b602082015260400192915050565b6000613a2c602c836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613a7a6034836147a3565b7f476f7665726e6f72427261766f3a5f5f6163636570744c6f63616c41646d696e8152733a2070656e64696e672061646d696e206f6e6c7960601b602082015260400192915050565b6000613ad0602c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f6368616e6765477561726469616e3a81526b081b9bdd08185b1b1bddd95960a21b602082015260400192915050565b6000613b1e602f836147a3565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613b6f6028836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000613bb96059836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613c3e6058836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611fd46000836147a3565b6000613cd0603f836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613d2f6036836147a3565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613d876030836147a3565b7f476f7665726e6f72427261766f3a5f5f73657450656e64696e674c6f63616c4181526f646d696e3a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613dd96041836147a3565b7f476f7665726e6f72427261766f3a3a5f5f73657450726f706f73616c5468726581527f73686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b6000613e426029836147a3565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613e8d6030836147a3565b60008051602061489383398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613ecd602b836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e6744656c61793a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b6000613f1a6037836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e67506572696f6481527f3a20696e76616c696420766f74696e6720706572696f64000000000000000000602082015260400192915050565b6000613f796035836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e6744656c61793a81527420696e76616c696420766f74696e672064656c617960581b602082015260400192915050565b6000613fd06032836147a3565b6000805160206148938339815191528152716964205354414b494e47206164647265737360701b602082015260400192915050565b8051606083019061401684826130b4565b506020820151614029602085018261403c565b506040820151611730604085018261404e565b612f2f816147d2565b612f2f8161480c565b612f2f816147d8565b6000611fd48261322a565b600061406d826133d7565b915061407982856130c6565b60208201915061408982846130c6565b5060200192915050565b6000611fd482613961565b60208101611fd48284612f35565b604081016140ba8285612f26565b61242e60208301846130bd565b604081016140d58285612f35565b61242e6020830184612f35565b60a081016140f08287612f35565b6140fd60208301866131ab565b818103604083015261410e81613584565b9050818103606083015261412281856130d7565b9050611cdc60808301846130bd565b604081016140ba8285612f35565b60a0810161414d8288612f35565b61415a60208301876130bd565b818103604083015261416c81866130d7565b9050818103606083015261418081856130d7565b905061418f60808301846130bd565b9695505050505050565b60a081016141a78288612f35565b6141b460208301876130bd565b81810360408301526141c6818661310f565b90508181036060830152614180818561310f565b608080825281016141eb8187612f3e565b905081810360208301526141ff8186613066565b905081810360408301526142138185613005565b9050818103606083015261418f8184612f97565b60208101611fd482846130bd565b6080810161424382876130bd565b61425060208301866130bd565b61425d60408301856130bd565b611cdc6060830184612f35565b6060810161427882866130bd565b61428560208301856130bd565b612bc7604083018461403c565b608081016142a082876130bd565b6142ad602083018661403c565b6142ba60408301856130bd565b611cdc60608301846130bd565b60208101611fd48284613199565b60208101611fd482846131a2565b6020808252810161242e81846130d7565b60208082528101611fd4816131d6565b60208082528101611fd481613274565b60208082528101611fd4816132c9565b60208082528101611fd481613317565b60208082528101611fd481613394565b60208082528101611fd4816133f5565b60208082528101611fd481613469565b60208082528101611fd4816134db565b60208082528101611fd48161352e565b60208082528101611fd4816135bd565b60208082528101611fd481613602565b60208082528101611fd48161366f565b60208082528101611fd4816136c0565b60208082528101611fd4816136ff565b60208082528101611fd48161375e565b60208082528101611fd4816137ca565b60208082528101611fd481613811565b60208082528101611fd481613869565b60208082528101611fd4816138c8565b60208082528101611fd481613934565b60208082528101611fd4816139cc565b60208082528101611fd481613a1f565b60208082528101611fd481613a6d565b60208082528101611fd481613ac3565b60208082528101611fd481613b11565b60208082528101611fd481613b62565b60208082528101611fd481613bac565b60208082528101611fd481613c31565b60208082528101611fd481613cc3565b60208082528101611fd481613d22565b60208082528101611fd481613d7a565b60208082528101611fd481613dcc565b60208082528101611fd481613e35565b60208082528101611fd481613e80565b60208082528101611fd481613ec0565b60208082528101611fd481613f0d565b60208082528101611fd481613f6c565b60208082528101611fd481613fc3565b60608101611fd48284614005565b6101208101614571828c6130bd565b61457e602083018b612f26565b8181036040830152614590818a612f3e565b905081810360608301526145a48189613066565b905081810360808301526145b88188613005565b905081810360a08301526145cc8187612f97565b90506145db60c08301866130bd565b6145e860e08301856130bd565b8181036101008301526145fb81846130d7565b9b9a5050505050505050505050565b6101408101614619828d6130bd565b614626602083018c612f35565b614633604083018b6130bd565b614640606083018a6130bd565b61464d60808301896130bd565b61465a60a08301886130bd565b61466760c08301876130bd565b61467460e08301866130bd565b6146826101008301856130b4565b6145fb6101208301846130b4565b604081016140ba82856130bd565b608081016146ac82886130bd565b6146b9602083018761403c565b6146c66040830186614045565b81810360608301526146d98184866131b4565b979650505050505050565b608081016146f282866130bd565b6146ff602083018561403c565b61470c6040830184614045565b8181036060830152611cdc81613cb6565b60405181810167ffffffffffffffff8111828210171561473c57600080fd5b604052919050565b600067ffffffffffffffff82111561475b57600080fd5b5060209081020190565b600067ffffffffffffffff82111561477c57600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611fd4826147c6565b151590565b8061105781614859565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611fd4825b6000611fd4826147ac565b6000611fd4826147bc565b6000611fd482612244565b6000611fd4826147d8565b82818337506000910152565b60005b8381101561483e578181015183820152602001614826565b838111156117305750506000910152565b601f01601f191690565b600881106128e857fe5b61486c816147ac565b81146128e857600080fd5b61486c816147b7565b61486c81612244565b61486c816147d256fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a723158200da32dee7ff2f2131f87759220e60f4a79b0e3ea70fd452d3019cad1ef2ffbdb6c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063760fbc131161014f578063d13f90b4116100c1578063e23a9a521161007a578063e23a9a52146106d7578063e48083fe14610704578063e8997c4b14610719578063f851a44014610739578063fc4eee421461074e578063fe0d94c11461076357610272565b8063d13f90b414610638578063d33219b414610658578063da35c6641461066d578063da95691a14610682578063ddf0b009146106a2578063deaaa7cc146106c257610272565b8063a00ac53b11610113578063a00ac53b146105a4578063a64e024a146105c4578063b1126263146105d9578063b58131b0146105ee578063b5c4f54a14610603578063b9a619611461062357610272565b8063760fbc1314610525578063791f5d231461053a5780637b3c71d31461054f5780637bdbe4d01461056f578063915006711461058457610272565b8063328dd982116101e857806340e58ee5116101ac57806340e58ee514610484578063452a9320146104a45780634cf088d9146104b95780634db2b665146104db57806356781388146104f05780635c60da1b1461051057610272565b8063328dd982146103d257806335e588a1146104025780633932abb1146104225780633bccf4fd146104375780633e4f49e61461045757610272565b806320606b701161023a57806320606b701461033c578063215809ca1461035157806321f43e421461036657806324bc1a641461038657806325fd935a1461039b57806326782247146103b057610272565b8063013cf08b1461027757806302a251a3146102b657806306fdde03146102d857806316986a83146102fa57806317977c611461031c575b600080fd5b34801561028357600080fd5b50610297610292366004612dce565b610776565b6040516102ad9a9998979695949392919061460a565b60405180910390f35b3480156102c257600080fd5b506102cb6107d6565b6040516102ad9190614227565b3480156102e457600080fd5b506102ed6107dc565b6040516102ad91906142e3565b34801561030657600080fd5b5061031a610315366004612ba9565b61080a565b005b34801561032857600080fd5b506102cb610337366004612ba9565b61089c565b34801561034857600080fd5b506102cb6108ae565b34801561035d57600080fd5b506102cb6108c5565b34801561037257600080fd5b5061031a610381366004612c44565b6108cb565b34801561039257600080fd5b506102cb6109aa565b3480156103a757600080fd5b506102cb6109b9565b3480156103bc57600080fd5b506103c56109c8565b6040516102ad919061409e565b3480156103de57600080fd5b506103f26103ed366004612dce565b6109d7565b6040516102ad94939291906141da565b34801561040e57600080fd5b5061031a61041d366004612dce565b610c66565b34801561042e57600080fd5b506102cb610cf9565b34801561044357600080fd5b5061031a610452366004612eb4565b610cff565b34801561046357600080fd5b50610477610472366004612dce565b610ed5565b6040516102ad91906142d5565b34801561049057600080fd5b5061031a61049f366004612dce565b61105c565b3480156104b057600080fd5b506103c56112ac565b3480156104c557600080fd5b506104ce6112bb565b6040516102ad91906142c7565b3480156104e757600080fd5b5061031a6112ca565b3480156104fc57600080fd5b5061031a61050b366004612e1c565b6113a8565b34801561051c57600080fd5b506103c56113f2565b34801561053157600080fd5b5061031a611401565b34801561054657600080fd5b506102cb61143d565b34801561055b57600080fd5b5061031a61056a366004612e4c565b61144c565b34801561057b57600080fd5b506102cb61149c565b34801561059057600080fd5b5061031a61059f366004612c44565b6114a1565b3480156105b057600080fd5b5061031a6105bf366004612dce565b611577565b3480156105d057600080fd5b506102cb61161d565b3480156105e557600080fd5b506102cb611624565b3480156105fa57600080fd5b506102cb61162a565b34801561060f57600080fd5b5061031a61061e366004612ba9565b611630565b34801561062f57600080fd5b5061031a6116a2565b34801561064457600080fd5b5061031a610653366004612bcf565b611736565b34801561066457600080fd5b506104ce6118c4565b34801561067957600080fd5b506102cb6118d3565b34801561068e57600080fd5b506102cb61069d366004612c7e565b6118d9565b3480156106ae57600080fd5b5061031a6106bd366004612dce565b611ce5565b3480156106ce57600080fd5b506102cb611f61565b3480156106e357600080fd5b506106f76106f2366004612dec565b611f6d565b6040516102ad9190614554565b34801561071057600080fd5b506102cb611fda565b34801561072557600080fd5b5061031a610734366004612dce565b611fdf565b34801561074557600080fd5b506103c5612074565b34801561075a57600080fd5b506102cb612083565b61031a610771366004612dce565b612089565b600b602081905260009182526040909120805460018201546002830154600784015460088501546009860154600a87015497870154600c9097015495976001600160a01b0390951696939592949193909260ff808216916101009004168a565b60055481565b60405180604001604052806012815260200171625a7820476f7665726e6f7220427261766f60701b81525081565b6000546001600160a01b0316331461083d5760405162461bcd60e51b8152600401610834906144d4565b60405180910390fd5b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99061089090839085906140c7565b60405180910390a15050565b600c6020526000908152604090205481565b6040516108ba90614093565b604051809103902081565b61168081565b6003546001600160a01b031633146108f55760405162461bcd60e51b815260040161083490614344565b6009546040516001600160a01b0390911690630825f38f90829060009061092090879060200161409e565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161094f94939291906140e2565b600060405180830381600087803b15801561096957600080fd5b505af115801561097d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109a59190810190612d99565b505050565b6a22147079ae94a4b600000081565b6a110a383cd74a525b00000081565b6001546001600160a01b031681565b6060806060806000600b600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610a5957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a3b575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b815481526020019060010190808311610a97575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610b7e5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610b6a5780601f10610b3f57610100808354040283529160200191610b6a565b820191906000526020600020905b815481529060010190602001808311610b4d57829003601f168201915b505050505081526020019060010190610ad3565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610c505760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610c3c5780601f10610c1157610100808354040283529160200191610c3c565b820191906000526020600020905b815481529060010190602001808311610c1f57829003601f168201915b505050505081526020019060010190610ba5565b5050505090509450945094509450509193509193565b6000546001600160a01b03163314610c905760405162461bcd60e51b815260040161083490614514565b60018110158015610ca35750619d808111155b610cbf5760405162461bcd60e51b815260040161083490614534565b60048054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93906108909083908590614690565b60045481565b6000604051610d0d90614093565b604080519182900382208282019091526012825271625a7820476f7665726e6f7220427261766f60701b6020909201919091527fbc5c853717ad7c00f37d69645b4cd93d06f28e37b72b51b5c13832805ab53c8d610d69612242565b30604051602001610d7d9493929190614235565b6040516020818303038152906040528051906020012090506000604051610da390614057565b604051908190038120610dbc918990899060200161426a565b60405160208183030381529060405280519060200120905060008282604051602001610de9929190614062565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e269493929190614292565b6020604051602081039080840390855afa158015610e48573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e7b5760405162461bcd60e51b8152600401610834906143a4565b806001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48a8a610eb3858e8e612247565b604051610ec2939291906146e4565b60405180910390a2505050505050505050565b60008160085410158015610eea575060075482115b610f065760405162461bcd60e51b8152600401610834906144f4565b6000828152600b60205260409020600c81015460ff1615610f2b576002915050611057565b80600701544311610f40576000915050611057565b80600801544311610f55576001915050611057565b80600a01548160090154111580610f7a57506a22147079ae94a4b60000008160090154105b15610f89576003915050611057565b6002810154610f9c576004915050611057565b600c810154610100900460ff1615610fb8576007915050611057565b6002810154600954604080516360d143f160e11b8152905161104193926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b15801561100457600080fd5b505afa158015611018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061103c9190810190612d7b565b612435565b4210611051576006915050611057565b60059150505b919050565b600761106782610ed5565b600781111561107257fe5b14156110905760405162461bcd60e51b8152600401610834906144c4565b6000818152600b6020526040902060018101546001600160a01b031633148061113f5750600654600a54600183015460405163abbd3ab160e01b81526001600160a01b039283169263abbd3ab1926110ed9291169060040161409e565b60206040518083038186803b15801561110557600080fd5b505afa158015611119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061113d9190810190612d7b565b105b8061115457506003546001600160a01b031633145b6111705760405162461bcd60e51b815260040161083490614474565b600c8101805460ff1916600117905560005b600382015481101561127c576009546003830180546001600160a01b039092169163591fcdfe9190849081106111b457fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106111dc57fe5b90600052602060002001548560050185815481106111f657fe5b9060005260206000200186600601868154811061120f57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161123e959493929190614199565b600060405180830381600087803b15801561125857600080fd5b505af115801561126c573d6000803e3d6000fd5b5050600190920191506111829050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c826040516108909190614227565b6003546001600160a01b031681565b600a546001600160a01b031681565b6001546001600160a01b0316331480156112e357503315155b6112ff5760405162461bcd60e51b815260040161083490614454565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc926113639286929116906140c7565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9916108909184916001600160a01b0316906140c7565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda483836113d7848383612247565b6040516113e6939291906146e4565b60405180910390a25050565b6002546001600160a01b031681565b6003546001600160a01b0316331461142b5760405162461bcd60e51b8152600401610834906143f4565b600380546001600160a01b0319169055565b6a04428e0f35d29496c0000081565b337fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4858561147b848383612247565b868660405161148e95949392919061469e565b60405180910390a250505050565b600a81565b6003546001600160a01b031633146114cb5760405162461bcd60e51b815260040161083490614354565b6009546040516001600160a01b0390911690633a66f9019082906000906114f690879060200161409e565b604051602081830303815290604052856040518563ffffffff1660e01b815260040161152594939291906140e2565b602060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109a59190810190612d7b565b6000546001600160a01b031633146115a15760405162461bcd60e51b815260040161083490614434565b6a04428e0f35d29496c0000081101580156115c757506a110a383cd74a525b0000008111155b6115e35760405162461bcd60e51b8152600401610834906144e4565b60068054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461906108909083908590614690565b62013b0081565b619d8081565b60065481565b6003546001600160a01b0316331461165a5760405162461bcd60e51b815260040161083490614404565b6001600160a01b0381166116805760405162461bcd60e51b815260040161083490614464565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031633146116cc5760405162461bcd60e51b8152600401610834906143c4565b600960009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561171c57600080fd5b505af1158015611730573d6000803e3d6000fd5b50505050565b6009546001600160a01b03161561175f5760405162461bcd60e51b815260040161083490614304565b6000546001600160a01b031633146117895760405162461bcd60e51b8152600401610834906143e4565b6001600160a01b0385166117af5760405162461bcd60e51b815260040161083490614334565b6001600160a01b0384166117d55760405162461bcd60e51b815260040161083490614544565b61168083101580156117ea575062013b008311155b6118065760405162461bcd60e51b815260040161083490614504565b600182101580156118195750619d808211155b6118355760405162461bcd60e51b8152600401610834906143b4565b6a04428e0f35d29496c00000811015801561185b57506a110a383cd74a525b0000008111155b6118775760405162461bcd60e51b815260040161083490614384565b600980546001600160a01b039687166001600160a01b031991821617909155600a805495909616948116949094179094556005919091556004556006919091556003805490911633179055565b6009546001600160a01b031681565b60085481565b6000845186511480156118ed575083518651145b80156118fa575082518651145b6119165760405162461bcd60e51b8152600401610834906143d4565b85516119345760405162461bcd60e51b815260040161083490614444565b600a865111156119565760405162461bcd60e51b815260040161083490614484565b336000908152600c602052604090205480156119d357600061197782610ed5565b9050600181600781111561198757fe5b14156119a55760405162461bcd60e51b8152600401610834906144a4565b60008160078111156119b357fe5b14156119d15760405162461bcd60e51b815260040161083490614494565b505b600854600654600a54604051632a5522af60e01b81526001909301926001600160a01b0390911690632a5522af90611a1190339086906004016140ac565b602060405180830381600087803b158015611a2b57600080fd5b505af1158015611a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a639190810190612d7b565b11611a805760405162461bcd60e51b8152600401610834906144b4565b806008819055506000611a9543600454612435565b90506000611aa582600554612435565b9050611aaf6125b9565b604051806101c00160405280858152602001336001600160a01b03168152602001600081526020018c81526020018b81526020018a815260200189815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600b60008681526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611b93929190612635565b5060808201518051611baf91600484019160209091019061269a565b5060a08201518051611bcb9160058401916020909101906126e1565b5060c08201518051611be791600684019160209091019061273a565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff02191690831515021790555090505083600c6000336001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338d8d8d8d89898f604051611ccc99989796959493929190614562565b60405180910390a1509193505050505b95945050505050565b6004611cf082610ed5565b6007811115611cfb57fe5b14611d185760405162461bcd60e51b815260040161083490614414565b6000818152600b602090815260408083206009548251630d48571f60e31b81529251919493611d729342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561100457600080fd5b905060005b6003830154811015611f1a57611f12836003018281548110611d9557fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611dbd57fe5b9060005260206000200154856005018481548110611dd757fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e655780601f10611e3a57610100808354040283529160200191611e65565b820191906000526020600020905b815481529060010190602001808311611e4857829003601f168201915b5050505050866006018581548110611e7957fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611f075780601f10611edc57610100808354040283529160200191611f07565b820191906000526020600020905b815481529060010190602001808311611eea57829003601f168201915b50505050508661245a565b600101611d77565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611f549085908490614690565b60405180910390a1505050565b6040516108ba90614057565b611f75612793565b506000828152600b602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6000546001600160a01b031633146120095760405162461bcd60e51b815260040161083490614314565b611680811015801561201e575062013b008111155b61203a5760405162461bcd60e51b815260040161083490614524565b60058054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828906108909083908590614690565b6000546001600160a01b031681565b60075481565b600561209482610ed5565b600781111561209f57fe5b146120bc5760405162461bcd60e51b815260040161083490614394565b6000818152600b60205260408120600c8101805461ff001916610100179055905b6003820154811015612212576009546004830180546001600160a01b0390921691630825f38f91908490811061210f57fe5b906000526020600020015484600301848154811061212957fe5b6000918252602090912001546004860180546001600160a01b03909216918690811061215157fe5b906000526020600020015486600501868154811061216b57fe5b9060005260206000200187600601878154811061218457fe5b9060005260206000200188600201546040518763ffffffff1660e01b81526004016121b3959493929190614199565b6000604051808303818588803b1580156121cc57600080fd5b505af11580156121e0573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122099190810190612d99565b506001016120dd565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516108909190614227565b465b90565b6000600161225484610ed5565b600781111561225f57fe5b1461227c5760405162461bcd60e51b815260040161083490614364565b60028260ff1611156122a05760405162461bcd60e51b8152600401610834906142f4565b6000838152600b602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156122e95760405162461bcd60e51b815260040161083490614374565b600a5460405163c115929760e01b81526000916001600160a01b03169063c11592979061231c908a908a90600401614131565b60206040518083038186803b15801561233457600080fd5b505afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061236c9190810190612d7b565b905060ff85166123975761238d83600a0154826001600160601b0316612435565b600a8401556123ed565b8460ff16600114156123c4576123ba8360090154826001600160601b0316612435565b60098401556123ed565b8460ff16600214156123ed576123e783600b0154826001600160601b0316612435565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b60008282018381101561242e5760405162461bcd60e51b815260040161083490614424565b6009546040516001600160a01b039091169063f2b0653790612488908890889088908890889060200161413f565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016124ba9190614227565b60206040518083038186803b1580156124d257600080fd5b505afa1580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061250a9190810190612d5d565b156125275760405162461bcd60e51b815260040161083490614324565b600954604051633a66f90160e01b81526001600160a01b0390911690633a66f9019061255f908890889088908890889060040161413f565b602060405180830381600087803b15801561257957600080fd5b505af115801561258d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125b19190810190612d7b565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b82805482825590600052602060002090810192821561268a579160200282015b8281111561268a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612655565b506126969291506127b3565b5090565b8280548282559060005260206000209081019282156126d5579160200282015b828111156126d55782518255916020019190600101906126ba565b506126969291506127d7565b82805482825590600052602060002090810192821561272e579160200282015b8281111561272e578251805161271e9184916020909101906127f1565b5091602001919060010190612701565b5061269692915061285e565b828054828255906000526020600020908101928215612787579160200282015b8281111561278757825180516127779184916020909101906127f1565b509160200191906001019061275a565b50612696929150612881565b604080516060810182526000808252602082018190529181019190915290565b61224491905b808211156126965780546001600160a01b03191681556001016127b9565b61224491905b8082111561269657600081556001016127dd565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061283257805160ff19168380011785556126d5565b828001600101855582156126d557918201828111156126d55782518255916020019190600101906126ba565b61224491905b8082111561269657600061287882826128a4565b50600101612864565b61224491905b8082111561269657600061289b82826128a4565b50600101612887565b50805460018160011615610100020316600290046000825580601f106128ca57506128e8565b601f0160209004906000526020600020908101906128e891906127d7565b50565b8035611fd481614863565b600082601f83011261290757600080fd5b813561291a61291582614744565b61471d565b9150818183526020840193506020810190508385602084028201111561293f57600080fd5b60005b8381101561296b578161295588826128eb565b8452506020928301929190910190600101612942565b5050505092915050565b600082601f83011261298657600080fd5b813561299461291582614744565b81815260209384019390925082018360005b8381101561296b57813586016129bc8882612ac0565b84525060209283019291909101906001016129a6565b600082601f8301126129e357600080fd5b81356129f161291582614744565b81815260209384019390925082018360005b8381101561296b5781358601612a198882612ac0565b8452506020928301929190910190600101612a03565b600082601f830112612a4057600080fd5b8135612a4e61291582614744565b91508181835260208401935060208101905083856020840282011115612a7357600080fd5b60005b8381101561296b5781612a898882612aaa565b8452506020928301929190910190600101612a76565b8051611fd481614877565b8035611fd481614880565b8051611fd481614880565b600082601f830112612ad157600080fd5b8135612adf61291582614765565b91508082526020830160208301858383011115612afb57600080fd5b612b06838284614817565b50505092915050565b600082601f830112612b2057600080fd5b8151612b2e61291582614765565b91508082526020830160208301858383011115612b4a57600080fd5b612b06838284614823565b60008083601f840112612b6757600080fd5b50813567ffffffffffffffff811115612b7f57600080fd5b602083019150836001820283011115612b9757600080fd5b9250929050565b8035611fd481614889565b600060208284031215612bbb57600080fd5b6000612bc784846128eb565b949350505050565b600080600080600060a08688031215612be757600080fd5b6000612bf388886128eb565b9550506020612c04888289016128eb565b9450506040612c1588828901612aaa565b9350506060612c2688828901612aaa565b9250506080612c3788828901612aaa565b9150509295509295909350565b60008060408385031215612c5757600080fd5b6000612c6385856128eb565b9250506020612c7485828601612aaa565b9150509250929050565b600080600080600060a08688031215612c9657600080fd5b853567ffffffffffffffff811115612cad57600080fd5b612cb9888289016128f6565b955050602086013567ffffffffffffffff811115612cd657600080fd5b612ce288828901612a2f565b945050604086013567ffffffffffffffff811115612cff57600080fd5b612d0b888289016129d2565b935050606086013567ffffffffffffffff811115612d2857600080fd5b612d3488828901612975565b925050608086013567ffffffffffffffff811115612d5157600080fd5b612c3788828901612ac0565b600060208284031215612d6f57600080fd5b6000612bc78484612a9f565b600060208284031215612d8d57600080fd5b6000612bc78484612ab5565b600060208284031215612dab57600080fd5b815167ffffffffffffffff811115612dc257600080fd5b612bc784828501612b0f565b600060208284031215612de057600080fd5b6000612bc78484612aaa565b60008060408385031215612dff57600080fd5b6000612e0b8585612aaa565b9250506020612c74858286016128eb565b60008060408385031215612e2f57600080fd5b6000612e3b8585612aaa565b9250506020612c7485828601612b9e565b60008060008060608587031215612e6257600080fd5b6000612e6e8787612aaa565b9450506020612e7f87828801612b9e565b935050604085013567ffffffffffffffff811115612e9c57600080fd5b612ea887828801612b55565b95989497509550505050565b600080600080600060a08688031215612ecc57600080fd5b6000612ed88888612aaa565b9550506020612ee988828901612b9e565b9450506040612c1588828901612b9e565b6000612f068383612f35565b505060200190565b600061242e83836130d7565b6000612f0683836130bd565b612f2f816147e4565b82525050565b612f2f816147ac565b6000612f498261479f565b612f5381856147a3565b9350612f5e8361478d565b8060005b83811015612f8c578151612f768882612efa565b9750612f818361478d565b925050600101612f62565b509495945050505050565b6000612fa28261479f565b612fac81856147a3565b935083602082028501612fbe8561478d565b8060005b85811015612ff85784840389528151612fdb8582612f0e565b9450612fe68361478d565b60209a909a0199925050600101612fc2565b5091979650505050505050565b60006130108261479f565b61301a81856147a3565b93508360208202850161302c8561478d565b8060005b85811015612ff857848403895281516130498582612f0e565b94506130548361478d565b60209a909a0199925050600101613030565b60006130718261479f565b61307b81856147a3565b93506130868361478d565b8060005b83811015612f8c57815161309e8882612f1a565b97506130a98361478d565b92505060010161308a565b612f2f816147b7565b612f2f81612244565b612f2f6130d282612244565b612244565b60006130e28261479f565b6130ec81856147a3565b93506130fc818560208601614823565b6131058161484f565b9093019392505050565b60008154600181166000811461312c576001811461315257613191565b607f600283041661313d81876147a3565b60ff1984168152955050602085019250613191565b6002820461316081876147a3565b955061316b85614793565b60005b8281101561318a5781548882015260019091019060200161316e565b8701945050505b505092915050565b612f2f816147eb565b612f2f816147f6565b612f2f81614801565b60006131c083856147a3565b93506131cd838584614817565b6131058361484f565b60006131e36032836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a81527120696e76616c696420766f7465207479706560701b602082015260400192915050565b6000613237602883611057565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b60006132816033836147a3565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b60006132d6602c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e67506572696f6481526b3a2061646d696e206f6e6c7960a01b602082015260400192915050565b60006133246055836147a3565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b60006133a16033836147a3565b60008051602061489383398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b60006133e4600283611057565b61190160f01b815260020192915050565b6000613402604c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f6578656375746553657454696d656c81527f6f636b50656e64696e6741646d696e3a2073656e646572206d7573742062652060208201526b33b7bb1033bab0b93234b0b760a11b604082015260600192915050565b6000613476604a836147a3565b7f476f7665726e6f72427261766f3a3a5f5f717565756553657454696d656c6f6381527f6b50656e64696e6741646d696e3a2073656e646572206d75737420626520676f6020820152693b1033bab0b93234b0b760b11b604082015260600192915050565b60006134e86031836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b600061353b6034836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b60006135916018836147a3565b7f73657450656e64696e6741646d696e2861646472657373290000000000000000815260200192915050565b60006135ca6035836147a3565b6000805160206148938339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b600061360f6045836147a3565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b600061367c602f836147a3565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b60006136cd602f836147a3565b60008051602061489383398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b600061370c6039836147a3565b7f476f7665726e6f72427261766f3a3a5f5f61636365707441646d696e3a20736581527f6e646572206d75737420626520676f7620677561726469616e00000000000000602082015260400192915050565b600061376b6044836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b60006137d76025836147a3565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b600061381e6036836147a3565b7f476f7665726e6f72427261766f3a3a5f5f61626469636174653a2073656e6465815275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b602082015260400192915050565b6000613876603c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f6368616e6765477561726469616e3a81527f2073656e646572206d75737420626520676f7620677561726469616e00000000602082015260400192915050565b60006138d56044836147a3565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b60006139416011836147a3565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b600061396e604383611057565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b60006139d96031836147a3565b7f476f7665726e6f72427261766f3a3a5f5f73657450726f706f73616c5468726581527073686f6c643a2061646d696e206f6e6c7960781b602082015260400192915050565b6000613a2c602c836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613a7a6034836147a3565b7f476f7665726e6f72427261766f3a5f5f6163636570744c6f63616c41646d696e8152733a2070656e64696e672061646d696e206f6e6c7960601b602082015260400192915050565b6000613ad0602c836147a3565b7f476f7665726e6f72427261766f3a3a5f5f6368616e6765477561726469616e3a81526b081b9bdd08185b1b1bddd95960a21b602082015260400192915050565b6000613b1e602f836147a3565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000613b6f6028836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000613bb96059836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000613c3e6058836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b6000611fd46000836147a3565b6000613cd0603f836147a3565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613d2f6036836147a3565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613d876030836147a3565b7f476f7665726e6f72427261766f3a5f5f73657450656e64696e674c6f63616c4181526f646d696e3a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613dd96041836147a3565b7f476f7665726e6f72427261766f3a3a5f5f73657450726f706f73616c5468726581527f73686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b6000613e426029836147a3565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613e8d6030836147a3565b60008051602061489383398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613ecd602b836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e6744656c61793a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b6000613f1a6037836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e67506572696f6481527f3a20696e76616c696420766f74696e6720706572696f64000000000000000000602082015260400192915050565b6000613f796035836147a3565b7f476f7665726e6f72427261766f3a3a5f5f736574566f74696e6744656c61793a81527420696e76616c696420766f74696e672064656c617960581b602082015260400192915050565b6000613fd06032836147a3565b6000805160206148938339815191528152716964205354414b494e47206164647265737360701b602082015260400192915050565b8051606083019061401684826130b4565b506020820151614029602085018261403c565b506040820151611730604085018261404e565b612f2f816147d2565b612f2f8161480c565b612f2f816147d8565b6000611fd48261322a565b600061406d826133d7565b915061407982856130c6565b60208201915061408982846130c6565b5060200192915050565b6000611fd482613961565b60208101611fd48284612f35565b604081016140ba8285612f26565b61242e60208301846130bd565b604081016140d58285612f35565b61242e6020830184612f35565b60a081016140f08287612f35565b6140fd60208301866131ab565b818103604083015261410e81613584565b9050818103606083015261412281856130d7565b9050611cdc60808301846130bd565b604081016140ba8285612f35565b60a0810161414d8288612f35565b61415a60208301876130bd565b818103604083015261416c81866130d7565b9050818103606083015261418081856130d7565b905061418f60808301846130bd565b9695505050505050565b60a081016141a78288612f35565b6141b460208301876130bd565b81810360408301526141c6818661310f565b90508181036060830152614180818561310f565b608080825281016141eb8187612f3e565b905081810360208301526141ff8186613066565b905081810360408301526142138185613005565b9050818103606083015261418f8184612f97565b60208101611fd482846130bd565b6080810161424382876130bd565b61425060208301866130bd565b61425d60408301856130bd565b611cdc6060830184612f35565b6060810161427882866130bd565b61428560208301856130bd565b612bc7604083018461403c565b608081016142a082876130bd565b6142ad602083018661403c565b6142ba60408301856130bd565b611cdc60608301846130bd565b60208101611fd48284613199565b60208101611fd482846131a2565b6020808252810161242e81846130d7565b60208082528101611fd4816131d6565b60208082528101611fd481613274565b60208082528101611fd4816132c9565b60208082528101611fd481613317565b60208082528101611fd481613394565b60208082528101611fd4816133f5565b60208082528101611fd481613469565b60208082528101611fd4816134db565b60208082528101611fd48161352e565b60208082528101611fd4816135bd565b60208082528101611fd481613602565b60208082528101611fd48161366f565b60208082528101611fd4816136c0565b60208082528101611fd4816136ff565b60208082528101611fd48161375e565b60208082528101611fd4816137ca565b60208082528101611fd481613811565b60208082528101611fd481613869565b60208082528101611fd4816138c8565b60208082528101611fd481613934565b60208082528101611fd4816139cc565b60208082528101611fd481613a1f565b60208082528101611fd481613a6d565b60208082528101611fd481613ac3565b60208082528101611fd481613b11565b60208082528101611fd481613b62565b60208082528101611fd481613bac565b60208082528101611fd481613c31565b60208082528101611fd481613cc3565b60208082528101611fd481613d22565b60208082528101611fd481613d7a565b60208082528101611fd481613dcc565b60208082528101611fd481613e35565b60208082528101611fd481613e80565b60208082528101611fd481613ec0565b60208082528101611fd481613f0d565b60208082528101611fd481613f6c565b60208082528101611fd481613fc3565b60608101611fd48284614005565b6101208101614571828c6130bd565b61457e602083018b612f26565b8181036040830152614590818a612f3e565b905081810360608301526145a48189613066565b905081810360808301526145b88188613005565b905081810360a08301526145cc8187612f97565b90506145db60c08301866130bd565b6145e860e08301856130bd565b8181036101008301526145fb81846130d7565b9b9a5050505050505050505050565b6101408101614619828d6130bd565b614626602083018c612f35565b614633604083018b6130bd565b614640606083018a6130bd565b61464d60808301896130bd565b61465a60a08301886130bd565b61466760c08301876130bd565b61467460e08301866130bd565b6146826101008301856130b4565b6145fb6101208301846130b4565b604081016140ba82856130bd565b608081016146ac82886130bd565b6146b9602083018761403c565b6146c66040830186614045565b81810360608301526146d98184866131b4565b979650505050505050565b608081016146f282866130bd565b6146ff602083018561403c565b61470c6040830184614045565b8181036060830152611cdc81613cb6565b60405181810167ffffffffffffffff8111828210171561473c57600080fd5b604052919050565b600067ffffffffffffffff82111561475b57600080fd5b5060209081020190565b600067ffffffffffffffff82111561477c57600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611fd4826147c6565b151590565b8061105781614859565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611fd4825b6000611fd4826147ac565b6000611fd4826147bc565b6000611fd482612244565b6000611fd4826147d8565b82818337506000910152565b60005b8381101561483e578181015183820152602001614826565b838111156117305750506000910152565b601f01601f191690565b600881106128e857fe5b61486c816147ac565b81146128e857600080fd5b61486c816147b7565b61486c81612244565b61486c816147d256fe476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616ca365627a7a723158200da32dee7ff2f2131f87759220e60f4a79b0e3ea70fd452d3019cad1ef2ffbdb6c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode Sourcemap

7296:19690:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3591:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3591:43:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2997:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2997:24:0;;;:::i;:::-;;;;;;;;7434:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7434:50:0;;;:::i;:::-;;;;;;;;23764:545;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23764:545:0;;;;;;;;:::i;:::-;;3698:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3698:50:0;;;;;;;;:::i;8676:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8676:122:0;;;:::i;7842:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7842:45:0;;;:::i;26150:336::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;26150:336:0;;;;;;;;:::i;8378:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8378:46:0;;;:::i;7698:57::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7698:57:0;;;:::i;2236:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2236:27:0;;;:::i;:::-;;;;;;;;16305:289;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16305:289:0;;;;;;;;:::i;:::-;;;;;;;;;;;21609:442;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21609:442:0;;;;;;;;:::i;2900:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2900:23:0;;;:::i;19265:687::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19265:687:0;;;;;;;;:::i;17125:1059::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17125:1059:0;;;;;;;;:::i;:::-;;;;;;;;15371:729;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15371:729:0;;;;;;;;:::i;2407:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2407:23:0;;;:::i;3483:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3483:31:0;;;:::i;:::-;;;;;;;;24498:649;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24498:649:0;;;:::i;18400:179::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18400:179:0;;;;;;;;:::i;2315:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2315:29:0;;;:::i;25635:169::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25635:169:0;;;:::i;7549:56::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7549:56:0;;;:::i;18875:217::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18875:217:0;;;;;;;;:::i;8542:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8542:47:0;;;:::i;25812:330::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25812:330:0;;;;;;;;:::i;22888:539::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22888:539:0;;;;;;;;:::i;7961:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7961:46:0;;;:::i;8175:45::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8175:45:0;;;:::i;3118:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3118:29:0;;;:::i;25155:288::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25155:288:0;;;;;;;;:::i;25451:176::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25451:176:0;;;:::i;9370:1226::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9370:1226:0;;;;;;;;:::i;3384:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3384:33:0;;;:::i;3292:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3292:25:0;;;:::i;11079:2223::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11079:2223:0;;;;;;;;:::i;13442:586::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13442:586:0;;;;;;;;:::i;8888:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8888:95:0;;;:::i;16816:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16816:154:0;;;;;;;;:::i;:::-;;;;;;;;8079:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8079:41:0;;;:::i;22201:459::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22201:459:0;;;;;;;;:::i;2150:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2150:20:0;;;:::i;3207:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3207:29:0;;;:::i;14586:575::-;;;;;;;;;:::i;3591:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3591:43:0;;;;;;;;;;;;;;;;;;;;;;:::o;2997:24::-;;;;:::o;7434:50::-;;;;;;;;;;;;;;-1:-1:-1;;;7434:50:0;;;;:::o;23764:545::-;23896:5;;-1:-1:-1;;;;;23896:5:0;23882:10;:19;23874:80;;;;-1:-1:-1;;;23874:80:0;;;;;;;;;;;;;;;;;24054:12;;;-1:-1:-1;;;;;24137:30:0;;;-1:-1:-1;;;;;;24137:30:0;;;;;;24252:49;;24054:12;;;24252:49;;;;24054:12;;24152:15;;24252:49;;;;;;;;;;23764:545;;:::o;3698:50::-;;;;;;;;;;;;;:::o;8676:122::-;8718:80;;;;;;;;;;;;;;8676:122;:::o;7842:45::-;7883:4;7842:45;:::o;26150:336::-;26267:8;;-1:-1:-1;;;;;26267:8:0;26253:10;:22;26245:111;;;;-1:-1:-1;;;26245:111:0;;;;;;;;;26367:8;;26445:27;;-1:-1:-1;;;;;26367:8:0;;;;:27;;:8;;;;26445:27;;26456:15;;26445:27;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26445:27:0;;;26474:3;26367:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26367:111:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26367:111:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;26367:111:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;26367:111:0;;;;;;;;;;26150:336;;:::o;8378:46::-;8413:11;8378:46;:::o;7698:57::-;7744:11;7698:57;:::o;2236:27::-;;;-1:-1:-1;;;;;2236:27:0;;:::o;16305:289::-;16365:24;16391:20;16413:26;16441:24;16478:18;16499:9;:21;16509:10;16499:21;;;;;;;;;;;16478:42;;16539:1;:9;;16550:1;:8;;16560:1;:12;;16574:1;:11;;16531:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16531:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16531:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16531:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16305:289;;;;;:::o;21609:442::-;21698:5;;-1:-1:-1;;;;;21698:5:0;21684:10;:19;21676:75;;;;-1:-1:-1;;;21676:75:0;;;;;;;;;8119:1;21770:14;:34;;:72;;;;;8215:5;21808:14;:34;;21770:72;21762:138;;;;-1:-1:-1;;;21762:138:0;;;;;;;;;21933:11;;;21955:28;;;;22001:42;;;;;;21933:11;;21969:14;;22001:42;;2900:23;;;;:::o;19265:687::-;19371:23;8718:80;;;;;;;;;;;;;;;;19451:4;;;;;;;;;-1:-1:-1;;;19451:4:0;;;;;;;;19435:22;19459:20;:18;:20::i;:::-;19489:4;19407:88;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19407:88:0;;;19397:99;;;;;;19371:125;;19507:18;8930:53;;;;;;;;;;;;;;;19538:48;;19566:10;;19578:7;;19538:48;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19538:48:0;;;19528:59;;;;;;19507:80;;19598:14;19654:15;19671:10;19625:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19625:57:0;;;19615:68;;;;;;19598:85;;19694:17;19714:26;19724:6;19732:1;19735;19738;19714:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19714:26:0;;-1:-1:-1;;19714:26:0;;;-1:-1:-1;;;;;;;19759:23:0;;19751:83;;;;-1:-1:-1;;;19751:83:0;;;;;;;;;19859:9;-1:-1:-1;;;;;19850:94:0;;19870:10;19882:7;19891:48;19908:9;19919:10;19931:7;19891:16;:48::i;:::-;19850:94;;;;;;;;;;;;;;;;;19265:687;;;;;;;;;:::o;17125:1059::-;17178:13;17229:10;17212:13;;:27;;:61;;;;;17256:17;;17243:10;:30;17212:61;17204:115;;;;-1:-1:-1;;;17204:115:0;;;;;;;;;17330:25;17358:21;;;:9;:21;;;;;17394:17;;;;;;17390:787;;;17435:22;17428:29;;;;;17390:787;17495:8;:19;;;17479:12;:35;17475:702;;17538:21;17531:28;;;;;17475:702;17597:8;:17;;;17581:12;:33;17577:600;;17638:20;17631:27;;;;;17577:600;17701:8;:21;;;17680:8;:17;;;:42;;:77;;;;8413:11;17726:8;:17;;;:31;17680:77;17676:501;;;17781:22;17774:29;;;;;17676:501;17825:12;;;;17821:356;;17866:23;17859:30;;;;;17821:356;17911:17;;;;;;;;;17907:270;;;17952:22;17945:29;;;;;17907:270;18022:12;;;;18036:8;;:23;;;-1:-1:-1;;;18036:23:0;;;;18015:45;;18022:12;-1:-1:-1;;;;;18036:8:0;;:21;;:23;;;;;;;;;;;;;;:8;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;18036:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18036:23:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18036:23:0;;;;;;;;;18015:6;:45::i;:::-;17996:15;:64;17992:185;;18084:21;18077:28;;;;;17992:185;18145:20;18138:27;;;17125:1059;;;;:::o;15371:729::-;15453:22;15432:17;15438:10;15432:5;:17::i;:::-;:43;;;;;;;;;;15424:110;;;;-1:-1:-1;;;15424:110:0;;;;;;;;;15547:25;15575:21;;;:9;:21;;;;;15629:17;;;;-1:-1:-1;;;;;15629:17:0;15615:10;:31;;:100;;-1:-1:-1;15698:17:0;;15650:7;;;15677:17;;;15650:45;;-1:-1:-1;;;15650:45:0;;-1:-1:-1;;;;;15650:7:0;;;;:26;;:45;;15677:17;;;15650:45;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15650:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15650:45:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15650:45:0;;;;;;;;;:65;15615:100;:126;;;-1:-1:-1;15733:8:0;;-1:-1:-1;;;;;15733:8:0;15719:10;:22;15615:126;15607:186;;;;-1:-1:-1;;;15607:186:0;;;;;;;;;15806:17;;;:24;;-1:-1:-1;;15806:24:0;15826:4;15806:24;;;:17;15841:206;15862:16;;;:23;15858:27;;15841:206;;;15907:8;;15934:16;;;:19;;-1:-1:-1;;;;;15907:8:0;;;;:26;;15934:16;15951:1;;15934:19;;;;;;;;;;;;;;;;15955:15;;;:18;;-1:-1:-1;;;;;15934:19:0;;;;15971:1;;15955:18;;;;;;;;;;;;;;15975:8;:19;;15995:1;15975:22;;;;;;;;;;;;;;;15999:8;:18;;16018:1;15999:21;;;;;;;;;;;;;;;16022:8;:12;;;15907:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15907:128:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15887:3:0;;;;;-1:-1:-1;15841:206:0;;-1:-1:-1;15841:206:0;;;16064:28;16081:10;16064:28;;;;;;;2407:23;;;-1:-1:-1;;;;;2407:23:0;;:::o;3483:31::-;;;-1:-1:-1;;;;;3483:31:0;;:::o;24498:649::-;24643:12;;-1:-1:-1;;;;;24643:12:0;24629:10;:26;:54;;;;-1:-1:-1;24659:10:0;:24;;24629:54;24621:119;;;;-1:-1:-1;;;24621:119:0;;;;;;;;;24806:16;24825:5;;;24867:12;;-1:-1:-1;;;;;24867:12:0;;;-1:-1:-1;;;;;;24940:20:0;;;;;;;;;25009:25;;;;;;25052;;24825:5;;;;24867:12;;25052:25;;;;24825:5;;25071;;;25052:25;;;;;;;;;;25126:12;;25093:46;;;;;;25109:15;;-1:-1:-1;;;;;25126:12:0;;25093:46;;18400:179;18484:10;18475:96;18496:10;18508:7;18517:49;18484:10;18496;18508:7;18517:16;:49::i;:::-;18475:96;;;;;;;;;;;;;;;;;18400:179;;:::o;2315:29::-;;;-1:-1:-1;;;;;2315:29:0;;:::o;25635:169::-;25697:8;;-1:-1:-1;;;;;25697:8:0;25683:10;:22;25675:89;;;;-1:-1:-1;;;25675:89:0;;;;;;;;;25775:8;:21;;-1:-1:-1;;;;;;25775:21:0;;;25635:169::o;7549:56::-;7595:10;7549:56;:::o;18875:217::-;18993:10;18984:100;19005:10;19017:7;19026:49;18993:10;19005;19017:7;19026:16;:49::i;:::-;19077:6;;18984:100;;;;;;;;;;;;;;;;;;;18875:217;;;;:::o;8542:47::-;8587:2;8542:47;:::o;25812:330::-;25927:8;;-1:-1:-1;;;;;25927:8:0;25913:10;:22;25905:109;;;;-1:-1:-1;;;25905:109:0;;;;;;;;;26025:8;;26101:27;;-1:-1:-1;;;;;26025:8:0;;;;:25;;:8;;;;26101:27;;26112:15;;26101:27;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26101:27:0;;;26130:3;26025:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26025:109:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26025:109:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26025:109:0;;;;;;;;22888:539;22989:5;;-1:-1:-1;;;;;22989:5:0;22975:10;:19;22967:81;;;;-1:-1:-1;;;22967:81:0;;;;;;;;;7595:10;23067:20;:46;;:96;;;;;7744:11;23117:20;:46;;23067:96;23059:174;;;;-1:-1:-1;;;23059:174:0;;;;;;;;;23272:17;;;23300:40;;;;23358:61;;;;;;23272:17;;23320:20;;23358:61;;7961:46;8002:5;7961:46;:::o;8175:45::-;8215:5;8175:45;:::o;3118:29::-;;;;:::o;25155:288::-;25240:8;;-1:-1:-1;;;;;25240:8:0;25226:10;:22;25218:95;;;;-1:-1:-1;;;25218:95:0;;;;;;;;;-1:-1:-1;;;;;25332:23:0;;25324:80;;;;-1:-1:-1;;;25324:80:0;;;;;;;;;25415:8;:20;;-1:-1:-1;;;;;;25415:20:0;-1:-1:-1;;;;;25415:20:0;;;;;;;;;;25155:288::o;25451:176::-;25516:8;;-1:-1:-1;;;;;25516:8:0;25502:10;:22;25494:92;;;;-1:-1:-1;;;25494:92:0;;;;;;;;;25597:8;;;;;;;;;-1:-1:-1;;;;;25597:8:0;-1:-1:-1;;;;;25597:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25597:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25597:22:0;;;;25451:176::o;9370:1226::-;9525:8;;-1:-1:-1;;;;;9525:8:0;9517:31;9509:95;;;;-1:-1:-1;;;9509:95:0;;;;;;;;;9637:5;;-1:-1:-1;;;;;9637:5:0;9623:10;:19;9615:69;;;;-1:-1:-1;;;9615:69:0;;;;;;;;;-1:-1:-1;;;;;9703:23:0;;9695:87;;;;-1:-1:-1;;;9695:87:0;;;;;;;;;-1:-1:-1;;;;;9801:22:0;;9793:85;;;;-1:-1:-1;;;9793:85:0;;;;;;;;;7883:4;9897:13;:34;;:72;;;;;8002:5;9935:13;:34;;9897:72;9889:133;;;;-1:-1:-1;;;9889:133:0;;;;;;;;;8119:1;10041:12;:32;;:68;;;;;8215:5;10077:12;:32;;10041:68;10033:128;;;;-1:-1:-1;;;10033:128:0;;;;;;;;;7595:10;10180:18;:44;;:92;;;;;7744:11;10228:18;:44;;10180:92;10172:158;;;;-1:-1:-1;;;10172:158:0;;;;;;;;;10343:8;:39;;-1:-1:-1;;;;;10343:39:0;;;-1:-1:-1;;;;;;10343:39:0;;;;;;;10393:7;:36;;;;;;;;;;;;;;;;10440:12;:28;;;;-1:-1:-1;10479:26:0;-1:-1:-1;10516:38:0;;;;-1:-1:-1;10567:21:0;;;;;10578:10;10567:21;;;9370:1226::o;3384:33::-;;;-1:-1:-1;;;;;3384:33:0;;:::o;3292:25::-;;;;:::o;11079:2223::-;11241:4;11284:6;:13;11266:7;:14;:31;:70;;;;;11319:10;:17;11301:7;:14;:35;11266:70;:108;;;;;11358:9;:16;11340:7;:14;:34;11266:108;11258:189;;;;-1:-1:-1;;;11258:189:0;;;;;;;;;11466:14;;11458:76;;;;-1:-1:-1;;;11458:76:0;;;;;;;;;8587:2;11553:7;:14;:39;;11545:92;;;;-1:-1:-1;;;11545:92:0;;;;;;;;;11692:10;11650:21;11674:29;;;:17;:29;;;;;;11718:21;;11714:460;;11756:42;11801:23;11807:16;11801:5;:23::i;:::-;11756:68;-1:-1:-1;11879:20:0;11847:28;:52;;;;;;;;;;11839:153;;;;-1:-1:-1;;;11839:153:0;;;;;;;;;12047:21;12015:28;:53;;;;;;;;;;12007:155;;;;-1:-1:-1;;;12007:155:0;;;;;;;;;11714:460;;12204:13;;12291:17;;12240:7;;:48;;-1:-1:-1;;;12240:48:0;;12220:1;12204:17;;;;-1:-1:-1;;;;;12240:7:0;;;;:24;;:48;;12265:10;;12204:17;;12240:48;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12240:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12240:48:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12240:48:0;;;;;;;;;:68;12232:144;;;;-1:-1:-1;;;12232:144:0;;;;;;;;;12403:10;12387:13;:26;;;;12426:15;12444:33;12451:12;12465:11;;12444:6;:33::i;:::-;12426:51;;12488:13;12504:32;12511:10;12523:12;;12504:6;:32::i;:::-;12488:48;;12549:27;;:::i;:::-;12579:454;;;;;;;;12607:10;12579:454;;;;12642:10;-1:-1:-1;;;;;12579:454:0;;;;;12672:1;12579:454;;;;12697:7;12579:454;;;;12727:6;12579:454;;;;12760:10;12579:454;;;;12796:9;12579:454;;;;12832:10;12579:454;;;;12867:8;12579:454;;;;12900:1;12579:454;;;;12930:1;12579:454;;;;12960:1;12579:454;;;;12986:5;12579:454;;;;;;13016:5;12579:454;;;;;12549:484;;13070:11;13046:9;:21;13056:10;13046:21;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13046:35:0;;;;;-1:-1:-1;;;;;13046:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13046:35:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13046:35:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13046:35:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13124:10;13092:17;:29;13110:10;-1:-1:-1;;;;;13092:29:0;-1:-1:-1;;;;;13092:29:0;;;;;;;;;;;;:42;;;;13152:114;13168:10;13180;13192:7;13201:6;13209:10;13221:9;13232:10;13244:8;13254:11;13152:114;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13284:10:0;;-1:-1:-1;;;;11079:2223:0;;;;;;;;:::o;13442:586::-;13523:23;13502:17;13508:10;13502:5;:17::i;:::-;:44;;;;;;;;;13494:125;;;;-1:-1:-1;;;13494:125:0;;;;;;;;;13630:25;13658:21;;;:9;:21;;;;;;;;13725:8;;:16;;-1:-1:-1;;;13725:16:0;;;;13658:21;;13630:25;13701:41;;13708:15;;-1:-1:-1;;;;;13725:8:0;;;;:14;;:16;;;;;13658:21;;13725:16;;;;;;:8;:16;;;5:2:-1;;;;30:1;27;20:12;13701:41:0;13690:52;-1:-1:-1;13758:6:0;13753:192;13774:16;;;:23;13770:27;;13753:192;;;13819:114;13841:8;:16;;13858:1;13841:19;;;;;;;;;;;;;;;;;;13862:15;;;:18;;-1:-1:-1;;;;;13841:19:0;;;;13878:1;;13862:18;;;;;;;;;;;;;;13882:8;:19;;13902:1;13882:22;;;;;;;;;;;;;;;;;;13819:114;;;;;;;-1:-1:-1;;13819:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13882:22;13819:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13906:8;:18;;13925:1;13906:21;;;;;;;;;;;;;;;;;;13819:114;;;;;;;-1:-1:-1;;13819:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13906:21;13819:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13929:3;13819:21;:114::i;:::-;13799:3;;13753:192;;;-1:-1:-1;13955:12:0;;;:18;;;13989:31;;;;;;14004:10;;13970:3;;13989:31;;;;;;;;;;13442:586;;;:::o;8888:95::-;8930:53;;;;;;16816:154;16891:14;;:::i;:::-;-1:-1:-1;16925:21:0;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;16925:37:0;;;;:30;;:37;;;;;;16918:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16918:44:0;;;;;;;;16816:154;;;;;:::o;8079:41::-;8119:1;8079:41;:::o;22201:459::-;22292:5;;-1:-1:-1;;;;;22292:5:0;22278:10;:19;22270:76;;;;-1:-1:-1;;;22270:76:0;;;;;;;;;7883:4;22365:15;:36;;:76;;;;;8002:5;22405:15;:36;;22365:76;22357:144;;;;-1:-1:-1;;;22357:144:0;;;;;;;;;22535:12;;;22558:30;;;;22606:46;;;;;;22535:12;;22573:15;;22606:46;;2150:20;;;-1:-1:-1;;;;;2150:20:0;;:::o;3207:29::-;;;;:::o;14586:575::-;14677:20;14656:17;14662:10;14656:5;:17::i;:::-;:41;;;;;;;;;14648:123;;;;-1:-1:-1;;;14648:123:0;;;;;;;;;14782:25;14810:21;;;:9;:21;;;;;14842:17;;;:24;;-1:-1:-1;;14842:24:0;;;;;14810:21;14877:233;14898:16;;;:23;14894:27;;14877:233;;;14943:8;;14977:15;;;:18;;-1:-1:-1;;;;;14943:8:0;;;;:27;;14977:15;14993:1;;14977:18;;;;;;;;;;;;;;14997:8;:16;;15014:1;14997:19;;;;;;;;;;;;;;;;;;15018:15;;;:18;;-1:-1:-1;;;;;14997:19:0;;;;15034:1;;15018:18;;;;;;;;;;;;;;15038:8;:19;;15058:1;15038:22;;;;;;;;;;;;;;;15062:8;:18;;15081:1;15062:21;;;;;;;;;;;;;;;15085:8;:12;;;14943:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14943:155:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14943:155:0;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;14943:155:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;14943:155:0;;;;;;;;;-1:-1:-1;14923:3:0;;14877:233;;;;15125:28;15142:10;15125:28;;;;;;;26825:158;26940:9;26825:158;;:::o;20289:1173::-;20380:6;20428:20;20407:17;20413:10;20407:5;:17::i;:::-;:41;;;;;;;;;20399:103;;;;-1:-1:-1;;;20399:103:0;;;;;;;;;20532:1;20521:7;:12;;;;20513:75;;;;-1:-1:-1;;;20513:75:0;;;;;;;;;20599:25;20627:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;20685:24:0;;;;:17;;;:24;;;;;;20728:16;;;;:25;20720:90;;;;-1:-1:-1;;;20720:90:0;;;;;;;;;20951:7;;:42;;-1:-1:-1;;;20951:42:0;;20929:12;;-1:-1:-1;;;;;20951:7:0;;:23;;:42;;20975:5;;20982:10;;20951:42;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20951:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20951:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;20951:42:0;;;;;;;;;20929:65;-1:-1:-1;21011:12:0;;;21007:319;;21064:36;21071:8;:21;;;21094:5;-1:-1:-1;;;;;21064:36:0;:6;:36::i;:::-;21040:21;;;:60;21007:319;;;21122:7;:12;;21133:1;21122:12;21118:208;;;21171:32;21178:8;:17;;;21197:5;-1:-1:-1;;;;;21171:32:0;:6;:32::i;:::-;21151:17;;;:52;21118:208;;;21225:7;:12;;21236:1;21225:12;21221:105;;;21278:36;21285:8;:21;;;21308:5;-1:-1:-1;;;;;21278:36:0;:6;:36::i;:::-;21254:21;;;:60;21221:105;21338:23;;21357:4;-1:-1:-1;;21338:23:0;;;;-1:-1:-1;;21372:25:0;21338:23;;21372:25;;;;-1:-1:-1;;21408:21:0;;-1:-1:-1;;;;;21408:21:0;;;;;;;;-1:-1:-1;;20289:1173:0;;;;;;:::o;26494:166::-;26555:4;26581:5;;;26605:6;;;;26597:36;;;;-1:-1:-1;;;26597:36:0;;;;;;;;14036:400;14178:8;;14216:47;;-1:-1:-1;;;;;14178:8:0;;;;:27;;14216:47;;14227:6;;14235:5;;14242:9;;14253:4;;14259:3;;14216:47;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14216:47:0;;;14206:58;;;;;;14178:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14178:87:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14178:87:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14178:87:0;;;;;;;;;14177:88;14169:186;;;;-1:-1:-1;;;14169:186:0;;;;;;;;;14366:8;;:62;;-1:-1:-1;;;14366:62:0;;-1:-1:-1;;;;;14366:8:0;;;;:25;;:62;;14392:6;;14400:5;;14407:9;;14418:4;;14424:3;;14366:62;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14366:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14366:62:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14366:62:0;;;;;;;;;;14036:400;;;;;:::o;7296:19690::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;7296:19690:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7296:19690:0;-1:-1:-1;;;;;7296:19690:0;;;;;;;;;;;-1:-1:-1;7296:19690:0;;;;;;;-1:-1:-1;7296:19690:0;;;-1:-1:-1;7296:19690:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7296:19690:0;;;-1:-1:-1;7296:19690:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;7296:19690:0;;;-1:-1:-1;7296:19690:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;7296:19690:0;;;-1:-1:-1;7296:19690:0;:::i;:::-;;;;;;;;;-1:-1:-1;7296:19690:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;7296:19690:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;;;354:80;;;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;;;748:50;;-1:-1;821:4;812:14;;;;840;;;;;702:1;695:9;655:206;;;659:14;237:630;;;;;;;;891:693;;1013:3;1006:4;998:6;994:17;990:27;980:2;;1031:1;1028;1021:12;980:2;1068:6;1055:20;1090:85;1105:69;1167:6;1105:69;;1090:85;1203:21;;;1247:4;1235:17;;;;1081:94;;-1:-1;1260:14;;1235:17;1355:1;1340:238;1365:6;1362:1;1359:13;1340:238;;;1448:3;1435:17;1427:6;1423:30;1472:42;1510:3;1498:10;1472:42;;;1460:55;;-1:-1;1538:4;1529:14;;;;1557;;;;;1387:1;1380:9;1340:238;;1609:696;;1732:3;1725:4;1717:6;1713:17;1709:27;1699:2;;1750:1;1747;1740:12;1699:2;1787:6;1774:20;1809:86;1824:70;1887:6;1824:70;;1809:86;1923:21;;;1967:4;1955:17;;;;1800:95;;-1:-1;1980:14;;1955:17;2075:1;2060:239;2085:6;2082:1;2079:13;2060:239;;;2168:3;2155:17;2147:6;2143:30;2192:43;2231:3;2219:10;2192:43;;;2180:56;;-1:-1;2259:4;2250:14;;;;2278;;;;;2107:1;2100:9;2060:239;;2331:707;;2448:3;2441:4;2433:6;2429:17;2425:27;2415:2;;2466:1;2463;2456:12;2415:2;2503:6;2490:20;2525:80;2540:64;2597:6;2540:64;;2525:80;2516:89;;2622:5;2647:6;2640:5;2633:21;2677:4;2669:6;2665:17;2655:27;;2699:4;2694:3;2690:14;2683:21;;2752:6;2799:3;2791:4;2783:6;2779:17;2774:3;2770:27;2767:36;2764:2;;;2816:1;2813;2806:12;2764:2;2841:1;2826:206;2851:6;2848:1;2845:13;2826:206;;;2909:3;2931:37;2964:3;2952:10;2931:37;;;2919:50;;-1:-1;2992:4;2983:14;;;;3011;;;;;2873:1;2866:9;2826:206;;3046:128;3121:13;;3139:30;3121:13;3139:30;;3181:130;3248:20;;3273:33;3248:20;3273:33;;3318:134;3396:13;;3414:33;3396:13;3414:33;;3460:432;;3557:3;3550:4;3542:6;3538:17;3534:27;3524:2;;3575:1;3572;3565:12;3524:2;3612:6;3599:20;3634:60;3649:44;3686:6;3649:44;;3634:60;3625:69;;3714:6;3707:5;3700:21;3750:4;3742:6;3738:17;3783:4;3776:5;3772:16;3818:3;3809:6;3804:3;3800:16;3797:25;3794:2;;;3835:1;3832;3825:12;3794:2;3845:41;3879:6;3874:3;3869;3845:41;;;3517:375;;;;;;;;3901:442;;4013:3;4006:4;3998:6;3994:17;3990:27;3980:2;;4031:1;4028;4021:12;3980:2;4061:6;4055:13;4083:64;4098:48;4139:6;4098:48;;4083:64;4074:73;;4167:6;4160:5;4153:21;4203:4;4195:6;4191:17;4236:4;4229:5;4225:16;4271:3;4262:6;4257:3;4253:16;4250:25;4247:2;;;4288:1;4285;4278:12;4247:2;4298:39;4330:6;4325:3;4320;4298:39;;4366:337;;;4481:3;4474:4;4466:6;4462:17;4458:27;4448:2;;4499:1;4496;4489:12;4448:2;-1:-1;4519:20;;4559:18;4548:30;;4545:2;;;4591:1;4588;4581:12;4545:2;4625:4;4617:6;4613:17;4601:29;;4676:3;4668:4;4660:6;4656:17;4646:8;4642:32;4639:41;4636:2;;;4693:1;4690;4683:12;4636:2;4441:262;;;;;;5883:126;5948:20;;5973:31;5948:20;5973:31;;6016:241;;6120:2;6108:9;6099:7;6095:23;6091:32;6088:2;;;6136:1;6133;6126:12;6088:2;6171:1;6188:53;6233:7;6213:9;6188:53;;;6178:63;6082:175;-1:-1;;;;6082:175;6264:743;;;;;;6436:3;6424:9;6415:7;6411:23;6407:33;6404:2;;;6453:1;6450;6443:12;6404:2;6488:1;6505:53;6550:7;6530:9;6505:53;;;6495:63;;6467:97;6595:2;6613:53;6658:7;6649:6;6638:9;6634:22;6613:53;;;6603:63;;6574:98;6703:2;6721:53;6766:7;6757:6;6746:9;6742:22;6721:53;;;6711:63;;6682:98;6811:2;6829:53;6874:7;6865:6;6854:9;6850:22;6829:53;;;6819:63;;6790:98;6919:3;6938:53;6983:7;6974:6;6963:9;6959:22;6938:53;;;6928:63;;6898:99;6398:609;;;;;;;;;7014:366;;;7135:2;7123:9;7114:7;7110:23;7106:32;7103:2;;;7151:1;7148;7141:12;7103:2;7186:1;7203:53;7248:7;7228:9;7203:53;;;7193:63;;7165:97;7293:2;7311:53;7356:7;7347:6;7336:9;7332:22;7311:53;;;7301:63;;7272:98;7097:283;;;;;;7387:1415;;;;;;7680:3;7668:9;7659:7;7655:23;7651:33;7648:2;;;7697:1;7694;7687:12;7648:2;7732:31;;7783:18;7772:30;;7769:2;;;7815:1;7812;7805:12;7769:2;7835:78;7905:7;7896:6;7885:9;7881:22;7835:78;;;7825:88;;7711:208;7978:2;7967:9;7963:18;7950:32;8002:18;7994:6;7991:30;7988:2;;;8034:1;8031;8024:12;7988:2;8054:78;8124:7;8115:6;8104:9;8100:22;8054:78;;;8044:88;;7929:209;8197:2;8186:9;8182:18;8169:32;8221:18;8213:6;8210:30;8207:2;;;8253:1;8250;8243:12;8207:2;8273:84;8349:7;8340:6;8329:9;8325:22;8273:84;;;8263:94;;8148:215;8422:2;8411:9;8407:18;8394:32;8446:18;8438:6;8435:30;8432:2;;;8478:1;8475;8468:12;8432:2;8498:83;8573:7;8564:6;8553:9;8549:22;8498:83;;;8488:93;;8373:214;8646:3;8635:9;8631:19;8618:33;8671:18;8663:6;8660:30;8657:2;;;8703:1;8700;8693:12;8657:2;8723:63;8778:7;8769:6;8758:9;8754:22;8723:63;;8809:257;;8921:2;8909:9;8900:7;8896:23;8892:32;8889:2;;;8937:1;8934;8927:12;8889:2;8972:1;8989:61;9042:7;9022:9;8989:61;;9073:263;;9188:2;9176:9;9167:7;9163:23;9159:32;9156:2;;;9204:1;9201;9194:12;9156:2;9239:1;9256:64;9312:7;9292:9;9256:64;;9343:360;;9467:2;9455:9;9446:7;9442:23;9438:32;9435:2;;;9483:1;9480;9473:12;9435:2;9518:24;;9562:18;9551:30;;9548:2;;;9594:1;9591;9584:12;9548:2;9614:73;9679:7;9670:6;9659:9;9655:22;9614:73;;9710:241;;9814:2;9802:9;9793:7;9789:23;9785:32;9782:2;;;9830:1;9827;9820:12;9782:2;9865:1;9882:53;9927:7;9907:9;9882:53;;10228:366;;;10349:2;10337:9;10328:7;10324:23;10320:32;10317:2;;;10365:1;10362;10355:12;10317:2;10400:1;10417:53;10462:7;10442:9;10417:53;;;10407:63;;10379:97;10507:2;10525:53;10570:7;10561:6;10550:9;10546:22;10525:53;;10601:362;;;10720:2;10708:9;10699:7;10695:23;10691:32;10688:2;;;10736:1;10733;10726:12;10688:2;10771:1;10788:53;10833:7;10813:9;10788:53;;;10778:63;;10750:97;10878:2;10896:51;10939:7;10930:6;10919:9;10915:22;10896:51;;10970:613;;;;;11126:2;11114:9;11105:7;11101:23;11097:32;11094:2;;;11142:1;11139;11132:12;11094:2;11177:1;11194:53;11239:7;11219:9;11194:53;;;11184:63;;11156:97;11284:2;11302:51;11345:7;11336:6;11325:9;11321:22;11302:51;;;11292:61;;11263:96;11418:2;11407:9;11403:18;11390:32;11442:18;11434:6;11431:30;11428:2;;;11474:1;11471;11464:12;11428:2;11502:65;11559:7;11550:6;11539:9;11535:22;11502:65;;;11088:495;;;;-1:-1;11492:75;-1:-1;;;;11088:495;11590:735;;;;;;11758:3;11746:9;11737:7;11733:23;11729:33;11726:2;;;11775:1;11772;11765:12;11726:2;11810:1;11827:53;11872:7;11852:9;11827:53;;;11817:63;;11789:97;11917:2;11935:51;11978:7;11969:6;11958:9;11954:22;11935:51;;;11925:61;;11896:96;12023:2;12041:51;12084:7;12075:6;12064:9;12060:22;12041:51;;12333:173;;12420:46;12462:3;12454:6;12420:46;;;-1:-1;;12495:4;12486:14;;12413:93;12515:177;;12626:60;12682:3;12674:6;12626:60;;12891:173;;12978:46;13020:3;13012:6;12978:46;;13072:142;13163:45;13202:5;13163:45;;;13158:3;13151:58;13145:69;;;13221:103;13294:24;13312:5;13294:24;;13482:690;;13627:54;13675:5;13627:54;;;13694:86;13773:6;13768:3;13694:86;;;13687:93;;13801:56;13851:5;13801:56;;;13877:7;13905:1;13890:260;13915:6;13912:1;13909:13;13890:260;;;13982:6;13976:13;14003:63;14062:3;14047:13;14003:63;;;13996:70;;14083:60;14136:6;14083:60;;;14073:70;-1:-1;;13937:1;13930:9;13890:260;;;-1:-1;14163:3;;13606:566;-1:-1;;;;;13606:566;14207:888;;14362:59;14415:5;14362:59;;;14434:91;14518:6;14513:3;14434:91;;;14427:98;;14548:3;14590:4;14582:6;14578:17;14573:3;14569:27;14617:61;14672:5;14617:61;;;14698:7;14726:1;14711:345;14736:6;14733:1;14730:13;14711:345;;;14798:9;14792:4;14788:20;14783:3;14776:33;14843:6;14837:13;14865:74;14934:4;14919:13;14865:74;;;14857:82;;14956:65;15014:6;14956:65;;;15044:4;15035:14;;;;;14946:75;-1:-1;;14758:1;14751:9;14711:345;;;-1:-1;15069:4;;14341:754;-1:-1;;;;;;;14341:754;15132:896;;15289:60;15343:5;15289:60;;;15362:92;15447:6;15442:3;15362:92;;;15355:99;;15477:3;15519:4;15511:6;15507:17;15502:3;15498:27;15546:62;15602:5;15546:62;;;15628:7;15656:1;15641:348;15666:6;15663:1;15660:13;15641:348;;;15728:9;15722:4;15718:20;15713:3;15706:33;15773:6;15767:13;15795:76;15866:4;15851:13;15795:76;;;15787:84;;15888:66;15947:6;15888:66;;;15977:4;15968:14;;;;;15878:76;-1:-1;;15688:1;15681:9;15641:348;;16067:690;;16212:54;16260:5;16212:54;;;16279:86;16358:6;16353:3;16279:86;;;16272:93;;16386:56;16436:5;16386:56;;;16462:7;16490:1;16475:260;16500:6;16497:1;16494:13;16475:260;;;16567:6;16561:13;16588:63;16647:3;16632:13;16588:63;;;16581:70;;16668:60;16721:6;16668:60;;;16658:70;-1:-1;;16522:1;16515:9;16475:260;;16765:94;16832:21;16847:5;16832:21;;16977:113;17060:24;17078:5;17060:24;;17097:152;17198:45;17218:24;17236:5;17218:24;;;17198:45;;17256:343;;17366:38;17398:5;17366:38;;;17416:70;17479:6;17474:3;17416:70;;;17409:77;;17491:52;17536:6;17531:3;17524:4;17517:5;17513:16;17491:52;;;17564:29;17586:6;17564:29;;;17555:39;;;;17346:253;-1:-1;;;17346:253;17951:818;;18068:5;18062:12;18102:1;18091:9;18087:17;18115:1;18110:247;;;;18368:1;18363:400;;;;18080:683;;18110:247;18188:4;18184:1;18173:9;18169:17;18165:28;18207:70;18270:6;18265:3;18207:70;;;-1:-1;;18296:25;;18284:38;;18200:77;-1:-1;;18345:4;18336:14;;;-1:-1;18110:247;;18363:400;18432:1;18421:9;18417:17;18448:70;18511:6;18506:3;18448:70;;;18441:77;;18540:37;18571:5;18540:37;;;18593:1;18601:130;18615:6;18612:1;18609:13;18601:130;;;18674:14;;18661:11;;;18654:35;18721:1;18708:15;;;;18637:4;18630:12;18601:130;;;18745:11;;;-1:-1;;;18080:683;;18038:731;;;;;;18777:174;18884:61;18939:5;18884:61;;19141:156;19239:52;19285:5;19239:52;;19304:142;19395:45;19434:5;19395:45;;19478:300;;19594:71;19658:6;19653:3;19594:71;;;19587:78;;19677:43;19713:6;19708:3;19701:5;19677:43;;;19742:29;19764:6;19742:29;;21669:387;;21829:67;21893:2;21888:3;21829:67;;;21929:34;21909:55;;-1:-1;;;21993:2;21984:12;;21977:42;22047:2;22038:12;;21815:241;-1:-1;;21815:241;22065:413;;22243:85;22325:2;22320:3;22243:85;;;22361:34;22341:55;;-1:-1;;;22425:2;22416:12;;22409:32;22469:2;22460:12;;22229:249;-1:-1;;22229:249;22487:388;;22647:67;22711:2;22706:3;22647:67;;;22747:34;22727:55;;-1:-1;;;22811:2;22802:12;;22795:43;22866:2;22857:12;;22633:242;-1:-1;;22633:242;22884:381;;23044:67;23108:2;23103:3;23044:67;;;23144:34;23124:55;;-1:-1;;;23208:2;23199:12;;23192:36;23256:2;23247:12;;23030:235;-1:-1;;23030:235;23274:459;;23434:67;23498:2;23493:3;23434:67;;;23534:34;23514:55;;23603:34;23598:2;23589:12;;23582:56;-1:-1;;;23667:2;23658:12;;23651:45;23724:2;23715:12;;23420:313;-1:-1;;23420:313;23742:388;;23902:67;23966:2;23961:3;23902:67;;;-1:-1;;;;;;;;;;;23982:55;;-1:-1;;;24066:2;24057:12;;24050:43;24121:2;24112:12;;23888:242;-1:-1;;23888:242;24139:398;;24317:84;24399:1;24394:3;24317:84;;;-1:-1;;;24414:87;;24529:1;24520:11;;24303:234;-1:-1;;24303:234;24546:450;;24706:67;24770:2;24765:3;24706:67;;;24806:34;24786:55;;24875:34;24870:2;24861:12;;24854:56;-1:-1;;;24939:2;24930:12;;24923:36;24987:2;24978:12;;24692:304;-1:-1;;24692:304;25005:448;;25165:67;25229:2;25224:3;25165:67;;;25265:34;25245:55;;25334:34;25329:2;25320:12;;25313:56;-1:-1;;;25398:2;25389:12;;25382:34;25444:2;25435:12;;25151:302;-1:-1;;25151:302;25462:386;;25622:67;25686:2;25681:3;25622:67;;;25722:34;25702:55;;-1:-1;;;25786:2;25777:12;;25770:41;25839:2;25830:12;;25608:240;-1:-1;;25608:240;25857:389;;26017:67;26081:2;26076:3;26017:67;;;26117:34;26097:55;;-1:-1;;;26181:2;26172:12;;26165:44;26237:2;26228:12;;26003:243;-1:-1;;26003:243;26255:324;;26415:67;26479:2;26474:3;26415:67;;;26515:26;26495:47;;26570:2;26561:12;;26401:178;-1:-1;;26401:178;26588:390;;26748:67;26812:2;26807:3;26748:67;;;-1:-1;;;;;;;;;;;26828:55;;-1:-1;;;26912:2;26903:12;;26896:45;26969:2;26960:12;;26734:244;-1:-1;;26734:244;26987:443;;27147:67;27211:2;27206:3;27147:67;;;27247:34;27227:55;;27316:34;27311:2;27302:12;;27295:56;-1:-1;;;27380:2;27371:12;;27364:29;27421:2;27412:12;;27133:297;-1:-1;;27133:297;27439:384;;27599:67;27663:2;27658:3;27599:67;;;27699:34;27679:55;;-1:-1;;;27763:2;27754:12;;27747:39;27814:2;27805:12;;27585:238;-1:-1;;27585:238;27832:384;;27992:67;28056:2;28051:3;27992:67;;;-1:-1;;;;;;;;;;;28072:55;;-1:-1;;;28156:2;28147:12;;28140:39;28207:2;28198:12;;27978:238;-1:-1;;27978:238;28225:394;;28385:67;28449:2;28444:3;28385:67;;;28485:34;28465:55;;28554:27;28549:2;28540:12;;28533:49;28610:2;28601:12;;28371:248;-1:-1;;28371:248;28628:442;;28788:67;28852:2;28847:3;28788:67;;;28888:34;28868:55;;28957:34;28952:2;28943:12;;28936:56;-1:-1;;;29021:2;29012:12;;29005:28;29061:2;29052:12;;28774:296;-1:-1;;28774:296;29079:374;;29239:67;29303:2;29298:3;29239:67;;;29339:34;29319:55;;-1:-1;;;29403:2;29394:12;;29387:29;29444:2;29435:12;;29225:228;-1:-1;;29225:228;29462:391;;29622:67;29686:2;29681:3;29622:67;;;29722:34;29702:55;;-1:-1;;;29786:2;29777:12;;29770:46;29844:2;29835:12;;29608:245;-1:-1;;29608:245;29862:397;;30022:67;30086:2;30081:3;30022:67;;;30122:34;30102:55;;30191:30;30186:2;30177:12;;30170:52;30250:2;30241:12;;30008:251;-1:-1;;30008:251;30268:442;;30428:67;30492:2;30487:3;30428:67;;;30528:34;30508:55;;30597:34;30592:2;30583:12;;30576:56;-1:-1;;;30661:2;30652:12;;30645:28;30701:2;30692:12;;30414:296;-1:-1;;30414:296;30719:317;;30879:67;30943:2;30938:3;30879:67;;;-1:-1;;;30959:40;;31027:2;31018:12;;30865:171;-1:-1;;30865:171;31045:477;;31223:85;31305:2;31300:3;31223:85;;;31341:34;31321:55;;31410:34;31405:2;31396:12;;31389:56;-1:-1;;;31474:2;31465:12;;31458:27;31513:2;31504:12;;31209:313;-1:-1;;31209:313;31531:386;;31691:67;31755:2;31750:3;31691:67;;;31791:34;31771:55;;-1:-1;;;31855:2;31846:12;;31839:41;31908:2;31899:12;;31677:240;-1:-1;;31677:240;31926:381;;32086:67;32150:2;32145:3;32086:67;;;32186:34;32166:55;;-1:-1;;;32250:2;32241:12;;32234:36;32298:2;32289:12;;32072:235;-1:-1;;32072:235;32316:389;;32476:67;32540:2;32535:3;32476:67;;;32576:34;32556:55;;-1:-1;;;32640:2;32631:12;;32624:44;32696:2;32687:12;;32462:243;-1:-1;;32462:243;32714:381;;32874:67;32938:2;32933:3;32874:67;;;32974:34;32954:55;;-1:-1;;;33038:2;33029:12;;33022:36;33086:2;33077:12;;32860:235;-1:-1;;32860:235;33104:384;;33264:67;33328:2;33323:3;33264:67;;;33364:34;33344:55;;-1:-1;;;33428:2;33419:12;;33412:39;33479:2;33470:12;;33250:238;-1:-1;;33250:238;33497:377;;33657:67;33721:2;33716:3;33657:67;;;33757:34;33737:55;;-1:-1;;;33821:2;33812:12;;33805:32;33865:2;33856:12;;33643:231;-1:-1;;33643:231;33883:463;;34043:67;34107:2;34102:3;34043:67;;;34143:34;34123:55;;34212:34;34207:2;34198:12;;34191:56;34281:27;34276:2;34267:12;;34260:49;34337:2;34328:12;;34029:317;-1:-1;;34029:317;34355:462;;34515:67;34579:2;34574:3;34515:67;;;34615:34;34595:55;;34684:34;34679:2;34670:12;;34663:56;34753:26;34748:2;34739:12;;34732:48;34808:2;34799:12;;34501:316;-1:-1;;34501:316;34826:262;;34986:66;35050:1;35045:3;34986:66;;35097:400;;35257:67;35321:2;35316:3;35257:67;;;35357:34;35337:55;;35426:33;35421:2;35412:12;;35405:55;35488:2;35479:12;;35243:254;-1:-1;;35243:254;35506:391;;35666:67;35730:2;35725:3;35666:67;;;35766:34;35746:55;;-1:-1;;;35830:2;35821:12;;35814:46;35888:2;35879:12;;35652:245;-1:-1;;35652:245;35906:385;;36066:67;36130:2;36125:3;36066:67;;;36166:34;36146:55;;-1:-1;;;36230:2;36221:12;;36214:40;36282:2;36273:12;;36052:239;-1:-1;;36052:239;36300:439;;36460:67;36524:2;36519:3;36460:67;;;36560:34;36540:55;;36629:34;36624:2;36615:12;;36608:56;-1:-1;;;36693:2;36684:12;;36677:25;36730:2;36721:12;;36446:293;-1:-1;;36446:293;36748:378;;36908:67;36972:2;36967:3;36908:67;;;37008:34;36988:55;;-1:-1;;;37072:2;37063:12;;37056:33;37117:2;37108:12;;36894:232;-1:-1;;36894:232;37135:385;;37295:67;37359:2;37354:3;37295:67;;;-1:-1;;;;;;;;;;;37375:55;;-1:-1;;;37459:2;37450:12;;37443:40;37511:2;37502:12;;37281:239;-1:-1;;37281:239;37529:380;;37689:67;37753:2;37748:3;37689:67;;;37789:34;37769:55;;-1:-1;;;37853:2;37844:12;;37837:35;37900:2;37891:12;;37675:234;-1:-1;;37675:234;37918:392;;38078:67;38142:2;38137:3;38078:67;;;38178:34;38158:55;;38247:25;38242:2;38233:12;;38226:47;38301:2;38292:12;;38064:246;-1:-1;;38064:246;38319:390;;38479:67;38543:2;38538:3;38479:67;;;38579:34;38559:55;;-1:-1;;;38643:2;38634:12;;38627:45;38700:2;38691:12;;38465:244;-1:-1;;38465:244;38718:387;;38878:67;38942:2;38937:3;38878:67;;;-1:-1;;;;;;;;;;;38958:55;;-1:-1;;;39042:2;39033:12;;39026:42;39096:2;39087:12;;38864:241;-1:-1;;38864:241;39214:624;39425:23;;39355:4;39346:14;;;39454:57;39350:3;39425:23;39454:57;;;39375:142;39593:4;39586:5;39582:16;39576:23;39605:59;39658:4;39653:3;39649:14;39635:12;39605:59;;;39527:143;39744:4;39737:5;39733:16;39727:23;39756:61;39811:4;39806:3;39802:14;39788:12;39756:61;;40075:97;40144:22;40160:5;40144:22;;40293:124;40375:36;40405:5;40375:36;;40424:100;40495:23;40512:5;40495:23;;40531:372;;40730:148;40874:3;40730:148;;40910:650;;41165:148;41309:3;41165:148;;;41158:155;;41324:75;41395:3;41386:6;41324:75;;;41421:2;41416:3;41412:12;41405:19;;41435:75;41506:3;41497:6;41435:75;;;-1:-1;41532:2;41523:12;;41146:414;-1:-1;;41146:414;41567:372;;41766:148;41910:3;41766:148;;41946:213;42064:2;42049:18;;42078:71;42053:9;42122:6;42078:71;;42166:340;42320:2;42305:18;;42334:79;42309:9;42386:6;42334:79;;;42424:72;42492:2;42481:9;42477:18;42468:6;42424:72;;42513:324;42659:2;42644:18;;42673:71;42648:9;42717:6;42673:71;;;42755:72;42823:2;42812:9;42808:18;42799:6;42755:72;;42844:953;43173:3;43158:19;;43188:71;43162:9;43232:6;43188:71;;;43270:80;43346:2;43335:9;43331:18;43322:6;43270:80;;;43398:9;43392:4;43388:20;43383:2;43372:9;43368:18;43361:48;43423:131;43549:4;43423:131;;;43415:139;;43602:9;43596:4;43592:20;43587:2;43576:9;43572:18;43565:48;43627:76;43698:4;43689:6;43627:76;;;43619:84;;43714:73;43782:3;43771:9;43767:19;43758:6;43714:73;;43804:324;43950:2;43935:18;;43964:71;43939:9;44008:6;43964:71;;44135:831;44403:3;44388:19;;44418:71;44392:9;44462:6;44418:71;;;44500:72;44568:2;44557:9;44553:18;44544:6;44500:72;;;44620:9;44614:4;44610:20;44605:2;44594:9;44590:18;44583:48;44645:78;44718:4;44709:6;44645:78;;;44637:86;;44771:9;44765:4;44761:20;44756:2;44745:9;44741:18;44734:48;44796:76;44867:4;44858:6;44796:76;;;44788:84;;44883:73;44951:3;44940:9;44936:19;44927:6;44883:73;;;44374:592;;;;;;;;;44973:819;45235:3;45220:19;;45250:71;45224:9;45294:6;45250:71;;;45332:72;45400:2;45389:9;45385:18;45376:6;45332:72;;;45452:9;45446:4;45442:20;45437:2;45426:9;45422:18;45415:48;45477:75;45547:4;45538:6;45477:75;;;45469:83;;45600:9;45594:4;45590:20;45585:2;45574:9;45570:18;45563:48;45625:73;45693:4;45684:6;45625:73;;45799:1183;46223:3;46238:47;;;46208:19;;46299:108;46208:19;46393:6;46299:108;;;46291:116;;46455:9;46449:4;46445:20;46440:2;46429:9;46425:18;46418:48;46480:108;46583:4;46574:6;46480:108;;;46472:116;;46636:9;46630:4;46626:20;46621:2;46610:9;46606:18;46599:48;46661:120;46776:4;46767:6;46661:120;;;46653:128;;46829:9;46823:4;46819:20;46814:2;46803:9;46799:18;46792:48;46854:118;46967:4;46958:6;46854:118;;46989:213;47107:2;47092:18;;47121:71;47096:9;47165:6;47121:71;;47209:547;47411:3;47396:19;;47426:71;47400:9;47470:6;47426:71;;;47508:72;47576:2;47565:9;47561:18;47552:6;47508:72;;;47591;47659:2;47648:9;47644:18;47635:6;47591:72;;;47674;47742:2;47731:9;47727:18;47718:6;47674:72;;47763:427;47933:2;47918:18;;47947:71;47922:9;47991:6;47947:71;;;48029:72;48097:2;48086:9;48082:18;48073:6;48029:72;;;48112:68;48176:2;48165:9;48161:18;48152:6;48112:68;;48197:539;48395:3;48380:19;;48410:71;48384:9;48454:6;48410:71;;;48492:68;48556:2;48545:9;48541:18;48532:6;48492:68;;;48571:72;48639:2;48628:9;48624:18;48615:6;48571:72;;;48654;48722:2;48711:9;48707:18;48698:6;48654:72;;48743:261;48885:2;48870:18;;48899:95;48874:9;48967:6;48899:95;;49281:243;49414:2;49399:18;;49428:86;49403:9;49487:6;49428:86;;49531:293;49665:2;49679:47;;;49650:18;;49740:74;49650:18;49800:6;49740:74;;49831:407;50022:2;50036:47;;;50007:18;;50097:131;50007:18;50097:131;;50245:407;50436:2;50450:47;;;50421:18;;50511:131;50421:18;50511:131;;50659:407;50850:2;50864:47;;;50835:18;;50925:131;50835:18;50925:131;;51073:407;51264:2;51278:47;;;51249:18;;51339:131;51249:18;51339:131;;51487:407;51678:2;51692:47;;;51663:18;;51753:131;51663:18;51753:131;;51901:407;52092:2;52106:47;;;52077:18;;52167:131;52077:18;52167:131;;52315:407;52506:2;52520:47;;;52491:18;;52581:131;52491:18;52581:131;;52729:407;52920:2;52934:47;;;52905:18;;52995:131;52905:18;52995:131;;53143:407;53334:2;53348:47;;;53319:18;;53409:131;53319:18;53409:131;;53557:407;53748:2;53762:47;;;53733:18;;53823:131;53733:18;53823:131;;53971:407;54162:2;54176:47;;;54147:18;;54237:131;54147:18;54237:131;;54385:407;54576:2;54590:47;;;54561:18;;54651:131;54561:18;54651:131;;54799:407;54990:2;55004:47;;;54975:18;;55065:131;54975:18;55065:131;;55213:407;55404:2;55418:47;;;55389:18;;55479:131;55389:18;55479:131;;55627:407;55818:2;55832:47;;;55803:18;;55893:131;55803:18;55893:131;;56041:407;56232:2;56246:47;;;56217:18;;56307:131;56217:18;56307:131;;56455:407;56646:2;56660:47;;;56631:18;;56721:131;56631:18;56721:131;;56869:407;57060:2;57074:47;;;57045:18;;57135:131;57045:18;57135:131;;57283:407;57474:2;57488:47;;;57459:18;;57549:131;57459:18;57549:131;;57697:407;57888:2;57902:47;;;57873:18;;57963:131;57873:18;57963:131;;58111:407;58302:2;58316:47;;;58287:18;;58377:131;58287:18;58377:131;;58525:407;58716:2;58730:47;;;58701:18;;58791:131;58701:18;58791:131;;58939:407;59130:2;59144:47;;;59115:18;;59205:131;59115:18;59205:131;;59353:407;59544:2;59558:47;;;59529:18;;59619:131;59529:18;59619:131;;59767:407;59958:2;59972:47;;;59943:18;;60033:131;59943:18;60033:131;;60181:407;60372:2;60386:47;;;60357:18;;60447:131;60357:18;60447:131;;60595:407;60786:2;60800:47;;;60771:18;;60861:131;60771:18;60861:131;;61009:407;61200:2;61214:47;;;61185:18;;61275:131;61185:18;61275:131;;61423:407;61614:2;61628:47;;;61599:18;;61689:131;61599:18;61689:131;;61837:407;62028:2;62042:47;;;62013:18;;62103:131;62013:18;62103:131;;62251:407;62442:2;62456:47;;;62427:18;;62517:131;62427:18;62517:131;;62665:407;62856:2;62870:47;;;62841:18;;62931:131;62841:18;62931:131;;63079:407;63270:2;63284:47;;;63255:18;;63345:131;63255:18;63345:131;;63493:407;63684:2;63698:47;;;63669:18;;63759:131;63669:18;63759:131;;63907:407;64098:2;64112:47;;;64083:18;;64173:131;64083:18;64173:131;;64321:407;64512:2;64526:47;;;64497:18;;64587:131;64497:18;64587:131;;64735:407;64926:2;64940:47;;;64911:18;;65001:131;64911:18;65001:131;;65149:407;65340:2;65354:47;;;65325:18;;65415:131;65325:18;65415:131;;65563:309;65729:2;65714:18;;65743:119;65718:9;65835:6;65743:119;;66099:1847;66691:3;66676:19;;66706:71;66680:9;66750:6;66706:71;;;66788:80;66864:2;66853:9;66849:18;66840:6;66788:80;;;66916:9;66910:4;66906:20;66901:2;66890:9;66886:18;66879:48;66941:108;67044:4;67035:6;66941:108;;;66933:116;;67097:9;67091:4;67087:20;67082:2;67071:9;67067:18;67060:48;67122:108;67225:4;67216:6;67122:108;;;67114:116;;67279:9;67273:4;67269:20;67263:3;67252:9;67248:19;67241:49;67304:120;67419:4;67410:6;67304:120;;;67296:128;;67473:9;67467:4;67463:20;67457:3;67446:9;67442:19;67435:49;67498:118;67611:4;67602:6;67498:118;;;67490:126;;67627:73;67695:3;67684:9;67680:19;67671:6;67627:73;;;67711;67779:3;67768:9;67764:19;67755:6;67711:73;;;67833:9;67827:4;67823:20;67817:3;67806:9;67802:19;67795:49;67858:78;67931:4;67922:6;67858:78;;;67850:86;66662:1284;-1:-1;;;;;;;;;;;66662:1284;67953:1195;68311:3;68296:19;;68326:71;68300:9;68370:6;68326:71;;;68408:72;68476:2;68465:9;68461:18;68452:6;68408:72;;;68491;68559:2;68548:9;68544:18;68535:6;68491:72;;;68574;68642:2;68631:9;68627:18;68618:6;68574:72;;;68657:73;68725:3;68714:9;68710:19;68701:6;68657:73;;;68741;68809:3;68798:9;68794:19;68785:6;68741:73;;;68825;68893:3;68882:9;68878:19;68869:6;68825:73;;;68909;68977:3;68966:9;68962:19;68953:6;68909:73;;;68993:67;69055:3;69044:9;69040:19;69031:6;68993:67;;;69071;69133:3;69122:9;69118:19;69109:6;69071:67;;69155:324;69301:2;69286:18;;69315:71;69290:9;69359:6;69315:71;;69486:645;69713:3;69698:19;;69728:71;69702:9;69772:6;69728:71;;;69810:68;69874:2;69863:9;69859:18;69850:6;69810:68;;;69889:71;69956:2;69945:9;69941:18;69932:6;69889:71;;;70008:9;70002:4;69998:20;69993:2;69982:9;69978:18;69971:48;70033:88;70116:4;70107:6;70099;70033:88;;;70025:96;69684:447;-1:-1;;;;;;;69684:447;70138:731;70408:3;70393:19;;70423:71;70397:9;70467:6;70423:71;;;70505:68;70569:2;70558:9;70554:18;70545:6;70505:68;;;70584:71;70651:2;70640:9;70636:18;70627:6;70584:71;;;70703:9;70697:4;70693:20;70688:2;70677:9;70673:18;70666:48;70728:131;70854:4;70728:131;;70876:256;70938:2;70932:9;70964:17;;;71039:18;71024:34;;71060:22;;;71021:62;71018:2;;;71096:1;71093;71086:12;71018:2;71112;71105:22;70916:216;;-1:-1;70916:216;71139:304;;71298:18;71290:6;71287:30;71284:2;;;71330:1;71327;71320:12;71284:2;-1:-1;71365:4;71353:17;;;71418:15;;71221:222;72394:317;;72533:18;72525:6;72522:30;72519:2;;;72565:1;72562;72555:12;72519:2;-1:-1;72696:4;72632;72609:17;;;;-1:-1;;72605:33;72686:15;;72456:255;73700:151;73824:4;73815:14;;73772:79;74343:157;;74437:14;;;74479:4;74466:18;;;74396:104;74672:137;74775:12;;74746:63;76237:178;76355:19;;;76404:4;76395:14;;76348:67;77815:91;;77877:24;77895:5;77877:24;;77913:85;77979:13;77972:21;;77955:43;78084:140;78163:5;78169:50;78163:5;78169:50;;78231:121;-1:-1;;;;;78293:54;;78276:76;78438:81;78509:4;78498:16;;78481:38;78526:104;-1:-1;;;;;78587:38;;78570:60;78637:129;;78724:37;78755:5;78773:169;;78876:61;78931:5;78876:61;;79406:140;;79500:41;79535:5;79500:41;;79553:116;;79640:24;79658:5;79640:24;;79919:106;;79997:23;80014:5;79997:23;;80033:145;80114:6;80109:3;80104;80091:30;-1:-1;80170:1;80152:16;;80145:27;80084:94;80187:268;80252:1;80259:101;80273:6;80270:1;80267:13;80259:101;;;80340:11;;;80334:18;80321:11;;;80314:39;80295:2;80288:10;80259:101;;;80375:6;80372:1;80369:13;80366:2;;;-1:-1;;80440:1;80422:16;;80415:27;80236:219;80544:97;80632:2;80612:14;-1:-1;;80608:28;;80592:49;80649:108;80735:1;80728:5;80725:12;80715:2;;80741:9;80764:117;80833:24;80851:5;80833:24;;;80826:5;80823:35;80813:2;;80872:1;80869;80862:12;80888:111;80954:21;80969:5;80954:21;;81006:117;81075:24;81093:5;81075:24;;81254:113;81321:22;81337:5;81321:22;

Swarm Source

bzzr://0da32dee7ff2f2131f87759220e60f4a79b0e3ea70fd452d3019cad1ef2ffbdb

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
Loading...
Loading
[ Download: CSV Export  ]

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