ETH Price: $3,016.29 (+2.90%)
Gas: 2 Gwei

Token

Moloch DAO v2x Bank (MOL-V2X)
 

Overview

Max Total Supply

41 MOL-V2X

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
yalor.eth
Balance
1 MOL-V2X

Value
$0.00
0x66b1De0f14a0ce971F7f248415063D44CAF19398
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x3509626C...07bC3E512
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Moloch

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 2020-08-03
*/

pragma solidity 0.5.17;

library SafeMath { // wrappers over solidity arithmetic operations with added overflow checks
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }
    
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }
    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0);
        uint256 c = a / b;

        return c;
    }
}

interface IERC20 { // brief interface for moloch erc20 token txs
    function balanceOf(address who) external view returns (uint256);
    
    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

contract ReentrancyGuard { // contract module that helps prevent reentrant calls to a function
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "reentrant call");

        _status = _ENTERED;
        
        _;
        
        _status = _NOT_ENTERED;
    }
}

interface IWETH { // brief interface for canonical ether token wrapper contract 
    function deposit() payable external;
    
    function transfer(address dst, uint wad) external returns (bool);
}

contract Moloch is ReentrancyGuard {
    using SafeMath for uint256;

    /***************
    GLOBAL CONSTANTS
    ***************/
    address public depositToken; // deposit token contract reference; default = wETH
    address public wrapperToken; // wrapper token contract reference for guild shares 
    address public wETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // canonical ether token wrapper contract reference
    
    uint256 public proposalDeposit; // default = 10 ETH (~$1,000 worth of ETH at contract deployment)
    uint256 public processingReward; // default = 0.1 - amount of ETH to give to whoever processes a proposal
    uint256 public periodDuration; // default = 17280 = 4.8 hours in seconds (5 periods per day)
    uint256 public votingPeriodLength; // default = 35 periods (7 days)
    uint256 public gracePeriodLength; // default = 35 periods (7 days)
    uint256 public dilutionBound; // default = 3 - maximum multiplier a YES voter will be obligated to pay in case of mass ragequit
    uint256 public summoningTime; // needed to determine the current period
    
    // HARD-CODED LIMITS
    // These numbers are quite arbitrary; they are small enough to avoid overflows when doing calculations
    // with periods or shares, yet big enough to not limit reasonable use cases.
    uint256 constant MAX_GUILD_BOUND = 10**36; // maximum bound for guild shares / loot (reflects guild token 18 decimal default)
    uint256 constant MAX_TOKEN_WHITELIST_COUNT = 400; // maximum number of whitelisted tokens
    uint256 constant MAX_TOKEN_GUILDBANK_COUNT = 200; // maximum number of tokens with non-zero balance in guildbank

    // BANK TOKEN DETAILS
    string private _name = "Moloch DAO v2x Bank";
    string private _symbol = "MOL-V2X";
    uint8 private _decimals = 18;

    // ***************
    // EVENTS
    // ***************
    event SubmitProposal(address indexed applicant, uint256 sharesRequested, uint256 lootRequested, uint256 tributeOffered, address tributeToken, uint256 paymentRequested, address paymentToken, bytes32 details, uint8[7] flags, bytes actionData, uint256 proposalId, address indexed delegateKey, address indexed memberAddress);
    event CancelProposal(uint256 indexed proposalId, address applicantAddress);
    event SponsorProposal(address indexed delegateKey, address indexed memberAddress, uint256 proposalId, uint256 proposalIndex, uint256 startingPeriod);
    event SubmitVote(uint256 proposalId, uint256 indexed proposalIndex, address indexed delegateKey, address indexed memberAddress, uint8 uintVote);
    event ProcessProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event ProcessWhitelistProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event ProcessGuildActionProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event ProcessGuildKickProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
    event UpdateDelegateKey(address indexed memberAddress, address newDelegateKey);
    event Transfer(address indexed from, address indexed to, uint256 amount); // guild token mint, burn & (loot) transfer tracking
    event Ragequit(address indexed memberAddress, uint256 sharesToBurn, uint256 lootToBurn);
    event TokensCollected(address indexed token, uint256 amountToCollect);
    event Withdraw(address indexed memberAddress, address token, uint256 amount);
    
    // *******************
    // INTERNAL ACCOUNTING
    // *******************
    address public constant GUILD = address(0xdead);
    address public constant ESCROW = address(0xbeef);
    address public constant TOTAL = address(0xbabe);
    
    uint256 public proposalCount; // total proposals submitted
    uint256 public totalShares; // total shares across all members
    uint256 public totalLoot; // total loot across all members
    uint256 public totalGuildBankTokens; // total tokens with non-zero balance in guild bank

    mapping(uint256 => Action) public actions; // proposalId => Action
    mapping(address => uint256) private balances; // guild token balances
    mapping(address => mapping(address => uint256)) private userTokenBalances; // userTokenBalances[userAddress][tokenAddress]

    enum Vote {
        Null, // default value, counted as abstention
        Yes,
        No
    }
    
    struct Member {
        address delegateKey; // the key responsible for submitting proposals and voting - defaults to member address unless updated
        uint8 exists; // always true (1) once a member has been created
        uint256 shares; // the # of voting shares assigned to this member
        uint256 loot; // the loot amount available to this member (combined with shares on ragekick) / transferable by guild token
        uint256 highestIndexYesVote; // highest proposal index # on which the member voted YES
        uint256 jailed; // set to proposalIndex of a passing guild kick proposal for this member, prevents voting on and sponsoring proposals
    }
    
    struct Action {
        address to; // target for function call
        uint256 value; // ether value, if any
        bytes data; // data load for function call
    }

    struct Proposal {
        address applicant; // the applicant who wishes to become a member - this key will be used for withdrawals (doubles as guild kick target for gkick proposals)
        address proposer; // the account that submitted the proposal (can be non-member)
        address sponsor; // the member that sponsored the proposal (moving it into the queue)
        address tributeToken; // tribute token contract reference
        address paymentToken; // payment token contract reference
        uint8[7] flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        uint256 sharesRequested; // the # of shares the applicant is requesting
        uint256 lootRequested; // the amount of loot the applicant is requesting
        uint256 paymentRequested; // amount of tokens requested as payment
        uint256 tributeOffered; // amount of tokens offered as tribute
        uint256 startingPeriod; // the period in which voting can start for this proposal
        uint256 yesVotes; // the total number of YES votes for this proposal
        uint256 noVotes; // the total number of NO votes for this proposal
        uint256 maxTotalSharesAndLootAtYesVote; // the maximum # of total shares encountered at a yes vote on this proposal
        bytes32 details; // proposal details to add context for members 
        mapping(address => Vote) votesByMember; // the votes on this proposal by each member
    }

    mapping(address => bool) public tokenWhitelist;
    address[] public approvedTokens;

    mapping(address => bool) public proposedToWhitelist;
    mapping(address => bool) public proposedToKick;
    
    mapping(address => Member) public members;
    mapping(address => address) public memberAddressByDelegateKey;
    
    mapping(uint256 => Proposal) public proposals;

    uint256[] private proposalQueue;

    modifier onlyDelegate {
        require(members[memberAddressByDelegateKey[msg.sender]].shares > 0, "not delegate");
        _;
    }
    
    constructor(
        address _depositToken,
        address _wrapperToken,
        address[] memory _summoner,
        uint256[] memory _summonerShares,
        uint256 _summonerDeposit,
        uint256 _proposalDeposit,
        uint256 _processingReward,
        uint256 _periodDuration,
        uint256 _votingPeriodLength,
        uint256 _gracePeriodLength,
        uint256 _dilutionBound
    ) public {
        require(_summoner.length == _summonerShares.length, "summoner & shares must match");
        
        for (uint256 i = 0; i < _summoner.length; i++) {
            registerMember(_summoner[i], _summonerShares[i]);
            mintGuildToken(_summoner[i], _summonerShares[i]);
            totalShares += _summonerShares[i];
        }
        
        require(totalShares <= MAX_GUILD_BOUND, "guild maxed");
        
        tokenWhitelist[_depositToken] = true;
        approvedTokens.push(_depositToken);
        
        if (_summonerDeposit > 0) {
            totalGuildBankTokens += 1;
            unsafeAddToBalance(GUILD, _depositToken, _summonerDeposit);
        }
        
        depositToken = _depositToken;
        wrapperToken = _wrapperToken;
        proposalDeposit = _proposalDeposit;
        processingReward = _processingReward;
        periodDuration = _periodDuration;
        votingPeriodLength = _votingPeriodLength;
        gracePeriodLength = _gracePeriodLength;
        dilutionBound = _dilutionBound;
        summoningTime = now;
    }
    
    /*****************
    PROPOSAL FUNCTIONS
    *****************/
    function submitProposal(
        address applicant,
        uint256 sharesRequested,
        uint256 lootRequested,
        uint256 tributeOffered,
        address tributeToken,
        uint256 paymentRequested,
        address paymentToken,
        bytes32 details
    ) payable external nonReentrant returns (uint256 proposalId) {
        require(sharesRequested.add(lootRequested) <= MAX_GUILD_BOUND, "guild maxed");
        require(tokenWhitelist[tributeToken], "tributeToken not whitelisted");
        require(tokenWhitelist[paymentToken], "paymentToken not whitelisted");
        require(applicant != GUILD && applicant != ESCROW && applicant != TOTAL, "applicant unreservable");
        require(members[applicant].jailed == 0, "applicant jailed");

        if (tributeOffered > 0 && userTokenBalances[GUILD][tributeToken] == 0) {
            require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, "guildbank maxed");
        }
        
        // collect tribute from proposer and store it in the Moloch until the proposal is processed / if ether, wrap into wETH
        if (tributeToken == wETH && msg.value > 0) {
            require(msg.value == tributeOffered, "insufficient ETH");
            IWETH(wETH).deposit();
            (bool success, ) = wETH.call.value(msg.value)("");
            require(success, "transfer failed");
            IWETH(wETH).transfer(address(this), msg.value);
        } else {
            require(IERC20(tributeToken).transferFrom(msg.sender, address(this), tributeOffered), "transfer failed");
        }
        
        unsafeAddToBalance(ESCROW, tributeToken, tributeOffered);

        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]

        _submitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags, "");
        
        return proposalCount - 1; // return proposalId - contracts calling submit might want it
    }
    
    function submitWhitelistProposal(address tokenToWhitelist, bytes32 details) external returns (uint256 proposalId) {
        require(tokenToWhitelist != address(0), "need token");
        require(!tokenWhitelist[tokenToWhitelist], "already whitelisted");
        require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "whitelist maxed");

        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        flags[4] = 1; // whitelist

        _submitProposal(address(0), 0, 0, 0, tokenToWhitelist, 0, address(0), details, flags, "");
        
        return proposalCount - 1;
    }
    
    function submitGuildActionProposal( // stages arbitrary function calls for member vote (based on Raid Guild 'Minion')
        address actionTo,
        uint256 actionValue,
        bytes calldata actionData,
        bytes32 details
    ) external returns (uint256 proposalId) {
        
        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        flags[6] = 1; // guild action
        
        _submitProposal(actionTo, 0, 0, 0, address(0), actionValue, address(0), details, flags, actionData);
        
        return proposalCount - 1;
    }

    function submitGuildKickProposal(address memberToKick, bytes32 details) external returns (uint256 proposalId) {
        Member memory member = members[memberToKick];

        require(member.shares > 0 || member.loot > 0, "must have share or loot");
        require(members[memberToKick].jailed == 0, "already jailed");

        uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
        flags[5] = 1; // guild kick

        _submitProposal(memberToKick, 0, 0, 0, address(0), 0, address(0), details, flags, "");
        
        return proposalCount - 1;
    }
    
    function _submitProposal(
        address applicant,
        uint256 sharesRequested,
        uint256 lootRequested,
        uint256 tributeOffered,
        address tributeToken,
        uint256 paymentRequested,
        address paymentToken,
        bytes32 details,
        uint8[7] memory flags,
        bytes memory actionData
    ) internal {
        Proposal memory proposal = Proposal({
            applicant : applicant,
            proposer : msg.sender,
            sponsor : address(0),
            tributeToken : tributeToken,
            paymentToken : paymentToken,
            flags : flags,
            sharesRequested : sharesRequested,
            lootRequested : lootRequested,
            paymentRequested : paymentRequested,
            tributeOffered : tributeOffered,
            startingPeriod : 0,
            yesVotes : 0,
            noVotes : 0,
            maxTotalSharesAndLootAtYesVote : 0,
            details : details
        });
        
        // collect action data
        if (proposal.flags[6] == 1) {
            Action memory action = Action({
                to : applicant,
                value : paymentRequested,
                data : actionData
            });
                
            actions[proposalCount] = action;
        }
        
        proposals[proposalCount] = proposal;
        address memberAddress = memberAddressByDelegateKey[msg.sender];
        // NOTE: argument order matters, avoid stack too deep
        emit SubmitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags, actionData, proposalCount, msg.sender, memberAddress);
        
        proposalCount += 1;
    }

    function sponsorProposal(uint256 proposalId) external nonReentrant onlyDelegate {
        // collect proposal deposit from sponsor and store it in the Moloch until the proposal is processed
        require(IERC20(depositToken).transferFrom(msg.sender, address(this), proposalDeposit), "transfer failed");
        unsafeAddToBalance(ESCROW, depositToken, proposalDeposit);

        Proposal storage proposal = proposals[proposalId];

        require(proposal.proposer != address(0), "unproposed");
        require(proposal.flags[0] == 0, "already sponsored");
        require(proposal.flags[3] == 0, "cancelled");
        require(members[proposal.applicant].jailed == 0, "applicant jailed");

        if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0) {
            require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, "guildbank maxed");
        }

        // whitelist proposal
        if (proposal.flags[4] == 1) {
            require(!tokenWhitelist[address(proposal.tributeToken)], "already whitelisted");
            require(!proposedToWhitelist[address(proposal.tributeToken)], "already whitelist proposed");
            require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "whitelist maxed");
            proposedToWhitelist[address(proposal.tributeToken)] = true;

        // guild kick proposal
        } else if (proposal.flags[5] == 1) {
            require(!proposedToKick[proposal.applicant], "kick already proposed");
            proposedToKick[proposal.applicant] = true;
        }

        // compute startingPeriod for proposal
        uint256 startingPeriod = max(
            getCurrentPeriod(),
            proposalQueue.length == 0 ? 0 : proposals[proposalQueue[proposalQueue.length - 1]].startingPeriod
        ) + 1;

        proposal.startingPeriod = startingPeriod;

        address memberAddress = memberAddressByDelegateKey[msg.sender];
        proposal.sponsor = memberAddress;

        proposal.flags[0] = 1; // sponsored

        // append proposal to the queue
        proposalQueue.push(proposalId);
        
        emit SponsorProposal(msg.sender, memberAddress, proposalId, proposalQueue.length - 1, startingPeriod);
    }

    // NOTE: In MolochV2 proposalIndex !== proposalId
    function submitVote(uint256 proposalIndex, uint8 uintVote) external onlyDelegate {
        address memberAddress = memberAddressByDelegateKey[msg.sender];
        Member storage member = members[memberAddress];

        require(proposalIndex < proposalQueue.length, "unproposed");
        Proposal storage proposal = proposals[proposalQueue[proposalIndex]];

        require(uintVote < 3, "not < 3");
        Vote vote = Vote(uintVote);

        require(getCurrentPeriod() >= proposal.startingPeriod, "voting pending");
        require(!hasVotingPeriodExpired(proposal.startingPeriod), "proposal expired");
        require(proposal.votesByMember[memberAddress] == Vote.Null, "member voted");
        require(vote == Vote.Yes || vote == Vote.No, "vote Yes or No");

        proposal.votesByMember[memberAddress] = vote;

        if (vote == Vote.Yes) {
            proposal.yesVotes = proposal.yesVotes + member.shares;

            // set highest index (latest) yes vote - must be processed for member to ragequit
            if (proposalIndex > member.highestIndexYesVote) {
                member.highestIndexYesVote = proposalIndex;
            }

            // set maximum of total shares encountered at a yes vote - used to bound dilution for yes voters
            if (totalSupply() > proposal.maxTotalSharesAndLootAtYesVote) {
                proposal.maxTotalSharesAndLootAtYesVote = totalSupply();
            }

        } else if (vote == Vote.No) {
            proposal.noVotes = proposal.noVotes + member.shares;
        }
     
        // NOTE: subgraph indexes by proposalId not proposalIndex since proposalIndex isn't set until it's been sponsored but proposal is created on submission
        emit SubmitVote(proposalQueue[proposalIndex], proposalIndex, msg.sender, memberAddress, uintVote);
    }

    function processProposal(uint256 proposalIndex) external {
        _validateProposalForProcessing(proposalIndex);

        uint256 proposalId = proposalQueue[proposalIndex];
        Proposal storage proposal = proposals[proposalId];

        require(proposal.flags[4] == 0 && proposal.flags[5] == 0 && proposal.flags[6] == 0, "not standard proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);

        // Make the proposal fail if the new total number of shares and loot exceeds the limit
        if (totalSupply().add(proposal.sharesRequested).add(proposal.lootRequested) > MAX_GUILD_BOUND) {
            didPass = false;
        }

        // Make the proposal fail if it is requesting more tokens as payment than the available guild bank balance
        if (proposal.paymentRequested > userTokenBalances[GUILD][proposal.paymentToken]) {
            didPass = false;
        }

        // Make the proposal fail if it would result in too many tokens with non-zero balance in guild bank
        if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0 && totalGuildBankTokens >= MAX_TOKEN_GUILDBANK_COUNT) {
            didPass = false;
        }

        // PROPOSAL PASSED
        if (didPass == true) {
            proposal.flags[2] = 1; // didPass

            // if the applicant is already a member, add to their existing shares & loot
            if (members[proposal.applicant].exists == 1) {
                members[proposal.applicant].shares = members[proposal.applicant].shares + proposal.sharesRequested;
                members[proposal.applicant].loot = members[proposal.applicant].loot + proposal.lootRequested;

            // if the applicant is a new member, create a new record for them
            } else {
                registerMember(proposal.applicant, proposal.sharesRequested);
            }

            // mint new guild token, shares, loot 
            mintGuildToken(proposal.applicant, proposal.sharesRequested + proposal.lootRequested);
            totalShares += proposal.sharesRequested;
            totalLoot += proposal.lootRequested;

            // if the proposal tribute is the first tokens of its kind to make it into the guild bank, increment total guild bank tokens
            if (userTokenBalances[GUILD][proposal.tributeToken] == 0 && proposal.tributeOffered > 0) {
                totalGuildBankTokens += 1;
            }

            unsafeInternalTransfer(ESCROW, GUILD, proposal.tributeToken, proposal.tributeOffered);
            unsafeInternalTransfer(GUILD, proposal.applicant, proposal.paymentToken, proposal.paymentRequested);

            // if the proposal spends 100% of guild bank balance for a token, decrement total guild bank tokens
            if (userTokenBalances[GUILD][proposal.paymentToken] == 0 && proposal.paymentRequested > 0) {
                totalGuildBankTokens -= 1;
            }

        // PROPOSAL FAILED
        } else {
            // return all tokens to the proposer (not the applicant, because funds come from proposer)
            unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
        }

        _returnDeposit(proposal.sponsor);
        
        emit ProcessProposal(proposalIndex, proposalId, didPass);
    }

    function processWhitelistProposal(uint256 proposalIndex) external {
        _validateProposalForProcessing(proposalIndex);

        uint256 proposalId = proposalQueue[proposalIndex];
        Proposal storage proposal = proposals[proposalId];

        require(proposal.flags[4] == 1, "not whitelist proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);

        if (approvedTokens.length >= MAX_TOKEN_WHITELIST_COUNT) {
            didPass = false;
        }

        if (didPass == true) {
            proposal.flags[2] = 1; // didPass

            tokenWhitelist[address(proposal.tributeToken)] = true;
            approvedTokens.push(proposal.tributeToken);
        }

        proposedToWhitelist[address(proposal.tributeToken)] = false;

        _returnDeposit(proposal.sponsor);
        
        emit ProcessWhitelistProposal(proposalIndex, proposalId, didPass);
    }

    function processGuildActionProposal(uint256 proposalIndex) external returns (bytes memory) {
        _validateProposalForProcessing(proposalIndex);
        
        uint256 proposalId = proposalQueue[proposalIndex];
        Action storage action = actions[proposalId];
        Proposal storage proposal = proposals[proposalId];
        
        require(proposal.flags[6] == 1, "not action proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);
        
        if (didPass == true) {
            proposal.flags[2] = 1; // didPass
            
            // execute call 
            (bool success, bytes memory retData) = action.to.call.value(action.value)(action.data);
            require(success, "call failure");
            
            return retData;
        }
        
        emit ProcessGuildActionProposal(proposalIndex, proposalId, didPass);
    }

    function processGuildKickProposal(uint256 proposalIndex) external {
        _validateProposalForProcessing(proposalIndex);

        uint256 proposalId = proposalQueue[proposalIndex];
        Proposal storage proposal = proposals[proposalId];

        require(proposal.flags[5] == 1, "not kick proposal");

        proposal.flags[1] = 1; // processed

        bool didPass = _didPass(proposalIndex);

        if (didPass == true) {
            proposal.flags[2] = 1; // didPass
            Member storage member = members[proposal.applicant];
            member.jailed = proposalIndex;

            // transfer shares to loot
            member.shares = 0; // revoke all shares
            member.loot += member.shares;
            totalShares -= member.shares;
            totalLoot += member.shares;
        }

        proposedToKick[proposal.applicant] = false;

        _returnDeposit(proposal.sponsor);
        
        emit ProcessGuildKickProposal(proposalIndex, proposalId, didPass);
    }

    function _didPass(uint256 proposalIndex) internal view returns (bool didPass) {
        Proposal memory proposal = proposals[proposalQueue[proposalIndex]];
        
        if (proposal.yesVotes > proposal.noVotes) {
            didPass = true;
        }
        
        // Make the proposal fail if the dilutionBound is exceeded
        if ((totalSupply().mul(dilutionBound)) < proposal.maxTotalSharesAndLootAtYesVote) {
            didPass = false;
        }

        // Make the proposal fail if the applicant is jailed
        // - for standard proposals, we don't want the applicant to get any shares/loot/payment
        // - for guild kick proposals, we should never be able to propose to kick a jailed member (or have two kick proposals active), so it doesn't matter
        if (members[proposal.applicant].jailed != 0) {
            didPass = false;
        }

        return didPass;
    }

    function _validateProposalForProcessing(uint256 proposalIndex) internal view {
        require(proposalIndex < proposalQueue.length, "no such proposal");
        Proposal memory proposal = proposals[proposalQueue[proposalIndex]];

        require(getCurrentPeriod() >= proposal.startingPeriod + votingPeriodLength + gracePeriodLength, "proposal not ready");
        require(proposal.flags[1] == 0, "proposal already processed");
        require(proposalIndex == 0 || proposals[proposalQueue[proposalIndex - 1]].flags[1] == 1, "previous proposal unprocessed");
    }

    function _returnDeposit(address sponsor) internal {
        unsafeInternalTransfer(ESCROW, msg.sender, depositToken, processingReward);
        unsafeInternalTransfer(ESCROW, sponsor, depositToken, proposalDeposit - processingReward);
    }

    function ragequit(uint256 sharesToBurn, uint256 lootToBurn) external {
        require(members[msg.sender].exists == 1, "not member");
        
        _ragequit(msg.sender, sharesToBurn, lootToBurn);
    }

    function _ragequit(address memberAddress, uint256 sharesToBurn, uint256 lootToBurn) internal {
        uint256 initialTotalSharesAndLoot = totalSupply();

        Member storage member = members[memberAddress];

        require(member.shares >= sharesToBurn, "insufficient shares");
        require(member.loot >= lootToBurn, "insufficient loot");

        require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");

        uint256 sharesAndLootToBurn = sharesToBurn.add(lootToBurn);

        // burn tokens, shares and loot
        member.shares -= sharesToBurn;
        member.loot -= lootToBurn;
        burnGuildToken(memberAddress, sharesAndLootToBurn);
        totalShares -= sharesToBurn;
        totalLoot -= lootToBurn;

        for (uint256 i = 0; i < approvedTokens.length; i++) {
            uint256 amountToRagequit = fairShare(userTokenBalances[GUILD][approvedTokens[i]], sharesAndLootToBurn, initialTotalSharesAndLoot);
            if (amountToRagequit > 0) { // gas optimization to allow a higher maximum token limit
                // deliberately not using safemath here to keep overflows from preventing the function execution (which would break ragekicks)
                // if a token overflows, it is because the supply was artificially inflated to oblivion, so we probably don't care about it anyways
                userTokenBalances[GUILD][approvedTokens[i]] -= amountToRagequit;
                userTokenBalances[memberAddress][approvedTokens[i]] += amountToRagequit;
            }
        }

        emit Ragequit(memberAddress, sharesToBurn, lootToBurn);
    }

    function ragekick(address memberToKick) external {
        Member storage member = members[memberToKick];

        require(member.jailed != 0, "not jailed");
        require(member.loot > 0, "no loot"); // note - should be impossible for jailed member to have shares
        require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");

        _ragequit(memberToKick, 0, member.loot);
    }
    
    function withdrawBalance(address token, uint256 amount) external nonReentrant {
        _withdrawBalance(token, amount);
    }

    function withdrawBalances(address[] calldata tokens, uint256[] calldata amounts, bool max) external nonReentrant {
        require(tokens.length == amounts.length, "tokens & amounts must match");

        for (uint256 i=0; i < tokens.length; i++) {
            uint256 withdrawAmount = amounts[i];
            if (max) { // withdraw the maximum balance
                withdrawAmount = userTokenBalances[msg.sender][tokens[i]];
            }

            _withdrawBalance(tokens[i], withdrawAmount);
        }
    }
    
    function _withdrawBalance(address token, uint256 amount) internal {
        require(userTokenBalances[msg.sender][token] >= amount, "insufficient balance");
        
        require(IERC20(token).transfer(msg.sender, amount), "transfer failed");
        unsafeSubtractFromBalance(msg.sender, token, amount);
        
        emit Withdraw(msg.sender, token, amount);
    }

    function collectTokens(address token) external {
        uint256 amountToCollect = IERC20(token).balanceOf(address(this)) - userTokenBalances[TOTAL][token];
        // only collect if 1) there are tokens to collect and 2) token is whitelisted
        require(amountToCollect > 0, "no tokens");
        require(tokenWhitelist[token], "not whitelisted");
        
        if (userTokenBalances[GUILD][token] == 0 && totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT) {totalGuildBankTokens += 1;}
        unsafeAddToBalance(GUILD, token, amountToCollect);

        emit TokensCollected(token, amountToCollect);
    }

    // NOTE: requires that delegate key which sent the original proposal cancels, msg.sender == proposal.proposer
    function cancelProposal(uint256 proposalId) external {
        Proposal storage proposal = proposals[proposalId];
        require(proposal.flags[0] == 0, "proposal already sponsored");
        require(proposal.flags[3] == 0, "proposal already cancelled");
        require(msg.sender == proposal.proposer, "only proposer cancels");

        proposal.flags[3] = 1; // cancelled
        
        unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
        
        emit CancelProposal(proposalId, msg.sender);
    }

    function updateDelegateKey(address newDelegateKey) external {
        require(members[msg.sender].shares > 0, "not shareholder");
        require(newDelegateKey != address(0), "newDelegateKey zeroed");

        // skip checks if member is setting the delegate key to their member address
        if (newDelegateKey != msg.sender) {
            require(members[newDelegateKey].exists == 0, "cannot overwrite members");
            require(members[memberAddressByDelegateKey[newDelegateKey]].exists == 0, "cannot overwrite keys");
        }

        Member storage member = members[msg.sender];
        memberAddressByDelegateKey[member.delegateKey] = address(0);
        memberAddressByDelegateKey[newDelegateKey] = msg.sender;
        member.delegateKey = newDelegateKey;

        emit UpdateDelegateKey(msg.sender, newDelegateKey);
    }
    
    // can only ragequit if the latest proposal you voted YES on has been processed
    function canRagequit(uint256 highestIndexYesVote) public view returns (bool) {
        require(highestIndexYesVote < proposalQueue.length, "no such proposal");
        
        return proposals[proposalQueue[highestIndexYesVote]].flags[1] == 1;
    }

    function hasVotingPeriodExpired(uint256 startingPeriod) public view returns (bool) {
        return getCurrentPeriod() >= startingPeriod + votingPeriodLength;
    }
    
    /***************
    GETTER FUNCTIONS
    ***************/
    function max(uint256 x, uint256 y) internal pure returns (uint256) {
        return x >= y ? x : y;
    }
    
    function getCurrentPeriod() public view returns (uint256) {
        return now.sub(summoningTime).div(periodDuration);
    }
    
    function getMemberProposalVote(address memberAddress, uint256 proposalIndex) public view returns (Vote) {
        require(members[memberAddress].exists == 1, "not member");
        require(proposalIndex < proposalQueue.length, "unproposed");
        
        return proposals[proposalQueue[proposalIndex]].votesByMember[memberAddress];
    }

    function getProposalFlags(uint256 proposalId) public view returns (uint8[7] memory) {
        return proposals[proposalId].flags;
    }
    
    function getProposalQueueLength() public view returns (uint256) {
        return proposalQueue.length;
    }
    
    function getTokenCount() public view returns (uint256) {
        return approvedTokens.length;
    }

    function getUserTokenBalance(address user, address token) public view returns (uint256) {
        return userTokenBalances[user][token];
    }
    
    /***************
    HELPER FUNCTIONS
    ***************/
    function() external payable {}
    
    function fairShare(uint256 balance, uint256 shares, uint256 totalSharesAndLoot) internal pure returns (uint256) {
        require(totalSharesAndLoot != 0);

        if (balance == 0) { return 0; }

        uint256 prod = balance * shares;

        if (prod / balance == shares) { // no overflow in multiplication above?
            return prod / totalSharesAndLoot;
        }

        return (balance / totalSharesAndLoot) * shares;
    }
    
    function registerMember(address newMember, uint256 shares) internal {
        // if new member is already taken by a member's delegateKey, reset it to their member address
        if (members[memberAddressByDelegateKey[newMember]].exists == 1) {
            address memberToOverride = memberAddressByDelegateKey[newMember];
            memberAddressByDelegateKey[memberToOverride] = memberToOverride;
            members[memberToOverride].delegateKey = memberToOverride;
        }
        
        members[newMember] = Member({
            delegateKey : newMember,
            exists : 1, // 'true'
            shares : shares,
            loot : 0,
            highestIndexYesVote : 0,
            jailed : 0
        });

        memberAddressByDelegateKey[newMember] = newMember;
    }
    
    function unsafeAddToBalance(address user, address token, uint256 amount) internal {
        userTokenBalances[user][token] += amount;
        userTokenBalances[TOTAL][token] += amount;
    }
    
    function unsafeInternalTransfer(address from, address to, address token, uint256 amount) internal {
        unsafeSubtractFromBalance(from, token, amount);
        unsafeAddToBalance(to, token, amount);
    }

    function unsafeSubtractFromBalance(address user, address token, uint256 amount) internal {
        userTokenBalances[user][token] -= amount;
        userTokenBalances[TOTAL][token] -= amount;
    }
    
    /********************
    GUILD TOKEN FUNCTIONS
    ********************/
    // GETTER FUNCTIONS
    function balanceOf(address account) external view returns (uint256) { 
        return balances[account];
    }
    
    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

    function decimals() external view returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view returns (uint256) { 
        return totalShares + totalLoot;
    }
    
    // BALANCE MGMT FUNCTIONS
    function burnGuildToken(address memberAddress, uint256 amount) internal {
        balances[memberAddress] -= amount;
        
        emit Transfer(memberAddress, address(0), amount);
    }
    
    function claimShares(uint256 amount) external nonReentrant {
        require(IERC20(wrapperToken).transferFrom(msg.sender, address(this), amount), "transfer failed");
        
        // if the sender is already a member, add to their existing shares 
        if (members[msg.sender].exists == 1) {
            members[msg.sender].shares = members[msg.sender].shares.add(amount);

            // if the sender is a new member, create a new record for them
            } else {
                registerMember(msg.sender, amount);
            }

        // mint new guild token & shares 
        mintGuildToken(msg.sender, amount);
        totalShares += amount;
            
        require(totalShares <= MAX_GUILD_BOUND, "guild maxed");

        if (userTokenBalances[GUILD][wrapperToken] == 0 && totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT) {totalGuildBankTokens += 1;}
        unsafeAddToBalance(GUILD, wrapperToken, amount);
    }
    
    function convertSharesToLoot(uint256 sharesToLoot) external {
        members[msg.sender].shares -= sharesToLoot;
        members[msg.sender].loot += sharesToLoot;
    }
    
    function mintGuildToken(address memberAddress, uint256 amount) internal {
        balances[memberAddress] += amount;
        
        emit Transfer(address(0), memberAddress, amount);
    }

    // LOOT TRANSFER FUNCTION
    function transfer(address receiver, uint256 lootToTransfer) external {
        members[msg.sender].loot = members[msg.sender].loot.sub(lootToTransfer);
        members[receiver].loot = members[receiver].loot.add(lootToTransfer);
        
        balances[msg.sender] -= lootToTransfer;
        balances[receiver] += lootToTransfer;
        
        emit Transfer(msg.sender, receiver, lootToTransfer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"address","name":"_wrapperToken","type":"address"},{"internalType":"address[]","name":"_summoner","type":"address[]"},{"internalType":"uint256[]","name":"_summonerShares","type":"uint256[]"},{"internalType":"uint256","name":"_summonerDeposit","type":"uint256"},{"internalType":"uint256","name":"_proposalDeposit","type":"uint256"},{"internalType":"uint256","name":"_processingReward","type":"uint256"},{"internalType":"uint256","name":"_periodDuration","type":"uint256"},{"internalType":"uint256","name":"_votingPeriodLength","type":"uint256"},{"internalType":"uint256","name":"_gracePeriodLength","type":"uint256"},{"internalType":"uint256","name":"_dilutionBound","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"applicantAddress","type":"address"}],"name":"CancelProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessGuildActionProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessGuildKickProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessWhitelistProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"Ragequit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"SponsorProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"applicant","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"indexed":false,"internalType":"address","name":"tributeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"bytes32","name":"details","type":"bytes32"},{"indexed":false,"internalType":"uint8[7]","name":"flags","type":"uint8[7]"},{"indexed":false,"internalType":"bytes","name":"actionData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"}],"name":"SubmitProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"SubmitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToCollect","type":"uint256"}],"name":"TokensCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"UpdateDelegateKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"ESCROW","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GUILD","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"actions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"approvedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"name":"canRagequit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancelProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"collectTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToLoot","type":"uint256"}],"name":"convertSharesToLoot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depositToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dilutionBound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"memberAddress","type":"address"},{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"getMemberProposalVote","outputs":[{"internalType":"enum Moloch.Vote","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalFlags","outputs":[{"internalType":"uint8[7]","name":"","type":"uint8[7]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposalQueueLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"getUserTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gracePeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"hasVotingPeriodExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"memberAddressByDelegateKey","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"address","name":"delegateKey","type":"address"},{"internalType":"uint8","name":"exists","type":"uint8"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"loot","type":"uint256"},{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"},{"internalType":"uint256","name":"jailed","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":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processGuildActionProposal","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processGuildKickProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processWhitelistProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"processingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"proposalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"address","name":"sponsor","type":"address"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"uint256","name":"startingPeriod","type":"uint256"},{"internalType":"uint256","name":"yesVotes","type":"uint256"},{"internalType":"uint256","name":"noVotes","type":"uint256"},{"internalType":"uint256","name":"maxTotalSharesAndLootAtYesVote","type":"uint256"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToKick","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"}],"name":"ragekick","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"ragequit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"sponsorProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"actionTo","type":"address"},{"internalType":"uint256","name":"actionValue","type":"uint256"},{"internalType":"bytes","name":"actionData","type":"bytes"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitGuildActionProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitGuildKickProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"submitVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenToWhitelist","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitWhitelistProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"summoningTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalGuildBankTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalLoot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"lootToTransfer","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"updateDelegateKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"max","type":"bool"}],"name":"withdrawBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wrapperToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

600380546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560c0604052601360808190527f4d6f6c6f63682044414f207632782042616e6b0000000000000000000000000060a09081526200006691600b91906200065d565b506040805180820190915260078082526609a9e985aac64b60cb1b60209092019182526200009791600c916200065d565b50600d805460ff19166012179055348015620000b257600080fd5b50604051620059cf380380620059cf8339818101604052610160811015620000d957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200010557600080fd5b9083019060208201858111156200011b57600080fd5b82518660208202830111640100000000821117156200013957600080fd5b82525081516020918201928201910280838360005b83811015620001685781810151838201526020016200014e565b50505050905001604052602001805160405193929190846401000000008211156200019257600080fd5b908301906020820185811115620001a857600080fd5b8251866020820283011164010000000082111715620001c657600080fd5b82525081516020918201928201910280838360005b83811015620001f5578181015183820152602001620001db565b505050509190910160409081526020830151908301516060840151608085015160a086015160c087015160e09097015160016000558a518c51969a509498509296919550939092146200028f576040805162461bcd60e51b815260206004820152601c60248201527f73756d6d6f6e6572202620736861726573206d757374206d6174636800000000604482015290519081900360640190fd5b60005b89518110156200033a57620002d68a8281518110620002ad57fe5b60200260200101518a8381518110620002c257fe5b60200260200101516200047560201b60201c565b620003108a8281518110620002e757fe5b60200260200101518a8381518110620002fc57fe5b6020026020010151620005a860201b60201c565b8881815181106200031d57fe5b6020908102919091010151600f8054909101905560010162000292565b506ec097ce7bc90715b34b9f1000000000600f54111562000390576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b038b166000818152601560205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b031916909117905586156200041d576011805460010190556200041d61dead8c896001600160e01b03620005ff16565b600180546001600160a01b039c8d166001600160a01b031991821617909155600280549b909c169a169990991790995560049390935560059190915560065560075550505060089190915560095542600a5562000702565b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415620004fe576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006a057805160ff1916838001178555620006d0565b82800160010185558215620006d0579182015b82811115620006d0578251825591602001919060010190620006b3565b50620006de929150620006e2565b5090565b620006ff91905b80821115620006de5760008155600101620006e9565b90565b6152bd80620007126000396000f3fe6080604052600436106103815760003560e01c80637d5b6c72116101d1578063b2643aab11610102578063e1780345116100a0578063ea00d3311161006f578063ea00d33114610f21578063ea7b6ffd14610f4b578063f242862114610fa0578063f5d54c7714610fb557610381565b8063e178034514610e85578063e1a0e3fa14610eb8578063e63bc62d14610ee2578063e681c4aa14610f0c57610381565b8063c89039c5116100dc578063c89039c514610dfe578063da35c66414610e13578063dfdd369e14610e28578063e0a8f6f514610e5b57610381565b8063b2643aab14610d5d578063b470aade14610dbf578063c68e45b714610dd457610381565b80639746d9401161016f578063a3dc380011610149578063a3dc380014610cac578063a4d2d9ec14610cd6578063a9059cbb14610d0f578063afe5475f14610d4857610381565b80639746d94014610c3a57806399653fbe14610c645780639d1722cb14610c9757610381565b80638a027690116101ab5780638a02769014610b565780638b15a60514610be65780639425a47614610bfb57806395d89b4114610c2557610381565b80637d5b6c7214610a6a57806383240f8314610a7f5780638340bbce14610b4157610381565b80633793ab3c116102b657806363858f2d11610254578063753d756311610223578063753d7563146109e357806378a8956714610a16578063797daf7014610a2b5780637a60964114610a4057610381565b806363858f2d146109275780636d4475eb1461093c57806370a082311461097557806373f8fd4b146109a857610381565b8063402c179411610290578063402c1794146107df5780634482394b1461081257806359999b41146108df578063635e99aa1461091257610381565b80633793ab3c146107595780633a98ef39146107835780633fc24bba1461079857610381565b80630d246214116103235780631dafede0116102fd5780631dafede0146106bc5780632582bf2a146106e657806327efc08614610719578063313ce5671461072e57610381565b80630d2462141461064657806315eb349e1461067757806318160ddd146106a757610381565b806306fdde031161035f57806306fdde03146104fc578063086146d21461058657806308ae4b0c1461059b5780630cf20cc91461060d57610381565b8063013cf08b1461038357806303e32fa114610478578063044a0ca81461049f575b005b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610fca565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c6001600160a01b03166001600160a01b031681526020018b6001600160a01b03166001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561048457600080fd5b5061048d611049565b60408051918252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b506001600160a01b03813516906020013561104f565b604051808260028111156104e857fe5b60ff16815260200191505060405180910390f35b34801561050857600080fd5b50610511611146565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b5061048d6111dd565b3480156105a757600080fd5b506105ce600480360360208110156105be57600080fd5b50356001600160a01b031661120b565b604080516001600160a01b03909716875260ff9095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561061957600080fd5b506103816004803603604081101561063057600080fd5b506001600160a01b03813516906020013561124b565b34801561065257600080fd5b5061065b6112ac565b604080516001600160a01b039092168252519081900360200190f35b34801561068357600080fd5b506103816004803603604081101561069a57600080fd5b50803590602001356112bb565b3480156106b357600080fd5b5061048d611325565b3480156106c857600080fd5b5061065b600480360360208110156106df57600080fd5b503561132f565b3480156106f257600080fd5b506103816004803603602081101561070957600080fd5b50356001600160a01b0316611356565b34801561072557600080fd5b5061065b611589565b34801561073a57600080fd5b5061074361158f565b6040805160ff9092168252519081900360200190f35b34801561076557600080fd5b506103816004803603602081101561077c57600080fd5b5035611598565b34801561078f57600080fd5b5061048d611764565b3480156107a457600080fd5b506107cb600480360360208110156107bb57600080fd5b50356001600160a01b031661176a565b604080519115158252519081900360200190f35b3480156107eb57600080fd5b5061065b6004803603602081101561080257600080fd5b50356001600160a01b031661177f565b34801561081e57600080fd5b506103816004803603606081101561083557600080fd5b810190602081018135600160201b81111561084f57600080fd5b82018360208201111561086157600080fd5b803590602001918460208302840111600160201b8311171561088257600080fd5b919390929091602081019035600160201b81111561089f57600080fd5b8201836020820111156108b157600080fd5b803590602001918460208302840111600160201b831117156108d257600080fd5b919350915035151561179a565b3480156108eb57600080fd5b506103816004803603602081101561090257600080fd5b50356001600160a01b03166118ef565b34801561091e57600080fd5b5061048d611ac5565b34801561093357600080fd5b5061048d611acb565b34801561094857600080fd5b5061048d6004803603604081101561095f57600080fd5b506001600160a01b038135169060200135611ad1565b34801561098157600080fd5b5061048d6004803603602081101561099857600080fd5b50356001600160a01b0316611c4c565b3480156109b457600080fd5b5061048d600480360360408110156109cb57600080fd5b506001600160a01b0381358116916020013516611c6b565b3480156109ef57600080fd5b506107cb60048036036020811015610a0657600080fd5b50356001600160a01b0316611c96565b348015610a2257600080fd5b5061048d611cab565b348015610a3757600080fd5b5061048d611cb1565b348015610a4c57600080fd5b5061038160048036036020811015610a6357600080fd5b5035611cb7565b348015610a7657600080fd5b5061048d611cdd565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b5035611ce3565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b04578181015183820152602001610aec565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b4d57600080fd5b5061048d611d99565b348015610b6257600080fd5b5061048d60048036036080811015610b7957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ba857600080fd5b820183602082011115610bba57600080fd5b803590602001918460018302840111600160201b83111715610bdb57600080fd5b919350915035611d9f565b348015610bf257600080fd5b5061048d611e1c565b348015610c0757600080fd5b506107cb60048036036020811015610c1e57600080fd5b5035611e22565b348015610c3157600080fd5b50610511611e39565b348015610c4657600080fd5b5061038160048036036020811015610c5d57600080fd5b5035611e9a565b348015610c7057600080fd5b5061038160048036036040811015610c8757600080fd5b508035906020013560ff16612558565b348015610ca357600080fd5b5061048d612954565b348015610cb857600080fd5b506107cb60048036036020811015610ccf57600080fd5b503561295a565b348015610ce257600080fd5b5061048d60048036036040811015610cf957600080fd5b506001600160a01b038135169060200135612a02565b348015610d1b57600080fd5b5061038160048036036040811015610d3257600080fd5b506001600160a01b038135169060200135612b41565b348015610d5457600080fd5b5061048d612c17565b348015610d6957600080fd5b50610d8760048036036020811015610d8057600080fd5b5035612c1d565b604051808260e080838360005b83811015610dac578181015183820152602001610d94565b5050505090500191505060405180910390f35b348015610dcb57600080fd5b5061048d612c85565b348015610de057600080fd5b5061038160048036036020811015610df757600080fd5b5035612c8b565b348015610e0a57600080fd5b5061065b612ed7565b348015610e1f57600080fd5b5061048d612ee6565b348015610e3457600080fd5b5061038160048036036020811015610e4b57600080fd5b50356001600160a01b0316612eec565b348015610e6757600080fd5b5061038160048036036020811015610e7e57600080fd5b5035612fe2565b348015610e9157600080fd5b506107cb60048036036020811015610ea857600080fd5b50356001600160a01b031661317e565b348015610ec457600080fd5b5061038160048036036020811015610edb57600080fd5b5035613193565b348015610eee57600080fd5b5061038160048036036020811015610f0557600080fd5b50356132f6565b348015610f1857600080fd5b5061065b6136f7565b348015610f2d57600080fd5b5061051160048036036020811015610f4457600080fd5b50356136fd565b61048d6004803603610100811015610f6257600080fd5b506001600160a01b038135811691602081013591604082013591606081013591608082013581169160a08101359160c0820135169060e0013561392f565b348015610fac57600080fd5b5061065b613f2a565b348015610fc157600080fd5b5061065b613f39565b601b602052600090815260409020805460018201546002830154600384015460048501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600d8d0154600e909d01546001600160a01b039c8d169d9b8d169c9a8b169b998b169a9098169896979596949593949293919290918e565b60055481565b6001600160a01b038216600090815260196020526040812054600160a01b900460ff166001146110b3576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b601c5482106110f6576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b601b6000601c848154811061110757fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505090505b90565b60006112066006546111fa600a5442613f3f90919063ffffffff16565b9063ffffffff613f5416565b905090565b601960205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b60026000541415611294576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556112a38282613f76565b50506001600055565b6002546001600160a01b031681565b33600090815260196020526040902054600160a01b900460ff16600114611316576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b6113213383836140f5565b5050565b601054600f540190565b6016818154811061133c57fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601960205260409020600101546113ac576040805162461bcd60e51b815260206004820152600f60248201526e3737ba1039b430b932b437b63232b960891b604482015290519081900360640190fd5b6001600160a01b0381166113ff576040805162461bcd60e51b81526020600482015260156024820152741b995dd1195b1959d85d1952d95e481e995c9bd959605a1b604482015290519081900360640190fd5b6001600160a01b0381163314611500576001600160a01b038116600090815260196020526040902054600160a01b900460ff1615611484576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206f7665727772697465206d656d626572730000000000000000604482015290519081900360640190fd5b6001600160a01b038181166000908152601a60209081526040808320549093168252601990522054600160a01b900460ff1615611500576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f74206f7665727772697465206b65797360581b604482015290519081900360640190fd5b33600081815260196020908152604080832080546001600160a01b039081168552601a845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a25050565b61babe81565b600d5460ff1690565b6115a1816143b9565b6000601c82815481106115b057fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1660011461162c576040805162461bcd60e51b81526020600482015260166024820152751b9bdd081dda1a5d195b1a5cdd081c1c9bdc1bdcd85b60521b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000611648846146a2565b6016549091506101901161165a575060005b600181151514156116f05760058201805462ff00001916620100001790556003820180546001600160a01b039081166000908152601560205260408120805460ff1916600190811790915592546016805494850181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899092018054929091166001600160a01b03199092169190911790555b60038201546001600160a01b039081166000908152601760205260409020805460ff1916905560028301546117259116614845565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a350505050565b600f5481565b60186020526000908152604090205460ff1681565b601a602052600090815260409020546001600160a01b031681565b600260005414156117e3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260005583821461183c576040805162461bcd60e51b815260206004820152601b60248201527f746f6b656e73202620616d6f756e7473206d757374206d617463680000000000604482015290519081900360640190fd5b60005b848110156118e257600084848381811061185557fe5b90506020020135905082156118b4573360009081526014602052604081209088888581811061188057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490505b6118d98787848181106118c357fe5b905060200201356001600160a01b031682613f76565b5060010161183f565b5050600160005550505050565b6001600160a01b03811660008181527fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c25602090815260408083205481516370a0823160e01b815230600482015291519394909390926370a082319260248082019391829003018186803b15801561196557600080fd5b505afa158015611979573d6000803e3d6000fd5b505050506040513d602081101561198f57600080fd5b5051039050806119d2576040805162461bcd60e51b81526020600482015260096024820152686e6f20746f6b656e7360b81b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611a31576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526000805160206152698339815191526020526040902054158015611a66575060c8601154105b15611a75576011805460010190555b611a8261dead838361488c565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a25050565b60105481565b60085481565b6000611adb614fcc565b506001600160a01b03838116600090815260196020908152604091829020825160c08101845281549485168152600160a01b90940460ff1691840191909152600181015491830182905260028101546060840152600381015460808401526004015460a0830152151580611b53575060008160600151115b611ba4576040805162461bcd60e51b815260206004820152601760248201527f6d7573742068617665207368617265206f72206c6f6f74000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526019602052604090206004015415611c03576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a985a5b195960921b604482015290519081900360640190fd5b611c0b61500e565b600160a082015260408051602081019091526000808252611c3c91879190819081908190819081908c908a906148ea565b5050600e54600019019392505050565b6001600160a01b0381166000908152601360205260409020545b919050565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b60156020526000908152604090205460ff1681565b60165490565b601c5490565b336000908152601960205260409020600181018054839003905560020180549091019055565b600a5481565b60126020908152600091825260409182902080546001808301546002808501805488516101009582161595909502600019011691909104601f81018790048702840187019097528683526001600160a01b03909316959094919291830182828015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905083565b60075481565b6000611da961500e565b6001816006602002019060ff16908160ff1681525050611e0a876000806000808b60008a898e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148ea92505050565b5050600e546000190195945050505050565b60045481565b60006007548201611e316111dd565b101592915050565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b60026000541415611ee3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000908155338152601a60209081526040808320546001600160a01b031683526019909152902060010154611f50576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b60015460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b505161201f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60015460045461203e9161beef916001600160a01b039091169061488c565b6000818152601b6020526040902060018101546001600160a01b0316612098576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b600581015460ff16156120e6576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481cdc1bdb9cdbdc9959607a1b604482015290519081900360640190fd5b60058101546301000000900460ff1615612133576040805162461bcd60e51b815260206004820152600960248201526818d85b98d95b1b195960ba1b604482015290519081900360640190fd5b80546001600160a01b031660009081526019602052604090206004015415612195576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600081600901541180156121d0575060038101546001600160a01b031660009081526000805160206152698339815191526020526040902054155b1561221e5760c86011541061221e576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6005810154600160201b900460ff16600114156123855760038101546001600160a01b031660009081526015602052604090205460ff161561229d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60038101546001600160a01b031660009081526017602052604090205460ff161561230f576040805162461bcd60e51b815260206004820152601a60248201527f616c72656164792077686974656c6973742070726f706f736564000000000000604482015290519081900360640190fd5b60165461019011612359576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b60038101546001600160a01b03166000908152601760205260409020805460ff1916600117905561242a565b600581015465010000000000900460ff166001141561242a5780546001600160a01b031660009081526018602052604090205460ff1615612405576040805162461bcd60e51b81526020600482015260156024820152741ada58dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b80546001600160a01b03166000908152601860205260409020805460ff191660011790555b60006124816124376111dd565b601c541561247957601c8054601b91600091600019810190811061245757fe5b90600052602060002001548152602001908152602001600020600a015461247c565b60005b614cc6565b6001908101600a8401819055336000818152601a60209081526040808320546002890180546001600160a01b0319166001600160a01b03909216918217905560058901805460ff191688179055601c80549788018155938490527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119096018990559154825189815260001990910191810191909152808201849052905192945083927f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd9181900360600190a3505060016000555050565b336000908152601a60209081526040808320546001600160a01b0316835260199091529020600101546125c1576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b336000908152601a60209081526040808320546001600160a01b03168084526019909252909120601c54841061262b576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b6000601b6000601c878154811061263e57fe5b90600052602060002001548152602001908152602001600020905060038460ff161061269b576040805162461bcd60e51b81526020600482015260076024820152666e6f74203c203360c81b604482015290519081900360640190fd5b60008460ff1660028111156126ac57fe5b905081600a01546126bb6111dd565b10156126ff576040805162461bcd60e51b815260206004820152600e60248201526d766f74696e672070656e64696e6760901b604482015290519081900360640190fd5b61270c82600a0154611e22565b15612751576040805162461bcd60e51b815260206004820152601060248201526f1c1c9bdc1bdcd85b08195e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f8301602052604081205460ff16600281111561277a57fe5b146127bb576040805162461bcd60e51b815260206004820152600c60248201526b1b595b58995c881d9bdd195960a21b604482015290519081900360640190fd5b60018160028111156127c957fe5b14806127e0575060028160028111156127de57fe5b145b612822576040805162461bcd60e51b815260206004820152600e60248201526d766f746520596573206f72204e6f60901b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff1916600183600281111561285357fe5b0217905550600181600281111561286657fe5b14156128b6576001830154600b830180549091019055600383015486111561289057600383018690555b81600d015461289d611325565b11156128b1576128ab611325565b600d8301555b6128db565b60028160028111156128c457fe5b14156128db576001830154600c8301805490910190555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a20601c8a8154811061291e57fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a4505050505050565b60115481565b601c5460009082106129a6576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b601b6000601c84815481106129b757fe5b906000526020600020015481526020019081526020016000206005016001600781106129df57fe5b602091828204019190069054906101000a900460ff1660ff166001149050919050565b60006001600160a01b038316612a4c576040805162461bcd60e51b815260206004820152600a6024820152693732b2b2103a37b5b2b760b11b604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff1615612ab0576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60165461019011612afa576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b612b0261500e565b6001608082015260408051602081019091526000808252612b32918190819081908990829081908b908a906148ea565b5050600e546000190192915050565b33600090815260196020526040902060020154612b64908263ffffffff613f3f16565b336000908152601960205260408082206002908101939093556001600160a01b038516825290200154612b9d908263ffffffff614cdf16565b6001600160a01b0383166000818152601960209081526040808320600201949094553380835260138252848320805487900390558383529184902080548601905583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60095481565b612c2561500e565b6000828152601b6020526040808220815160e0810192839052926005909101916007918390855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612c4c575094979650505050505050565b60065481565b60026000541415612cd4576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260008181559054604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b158015612d3457600080fd5b505af1158015612d48573d6000803e3d6000fd5b505050506040513d6020811015612d5e57600080fd5b5051612da3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b33600090815260196020526040902054600160a01b900460ff1660011415612e005733600090815260196020526040902060010154612de8908263ffffffff614cdf16565b33600090815260196020526040902060010155612e0a565b612e0a3382614cf1565b612e143382614e23565b600f80548201908190556ec097ce7bc90715b34b9f10000000001015612e6f576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6002546001600160a01b031660009081526000805160206152698339815191526020526040902054158015612ea6575060c8601154105b15612eb5576011805460010190555b600254612ecf9061dead906001600160a01b03168361488c565b506001600055565b6001546001600160a01b031681565b600e5481565b6001600160a01b03811660009081526019602052604090206004810154612f47576040805162461bcd60e51b815260206004820152600a6024820152691b9bdd081a985a5b195960b21b604482015290519081900360640190fd5b6000816002015411612f8a576040805162461bcd60e51b81526020600482015260076024820152661b9bc81b1bdbdd60ca1b604482015290519081900360640190fd5b612f97816003015461295a565b612fd25760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b61132182600083600201546140f5565b6000818152601b60205260409020600581015460ff161561304a576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792073706f6e736f726564000000000000604482015290519081900360640190fd5b60058101546301000000900460ff16156130ab576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792063616e63656c6c6564000000000000604482015290519081900360640190fd5b60018101546001600160a01b03163314613104576040805162461bcd60e51b81526020600482015260156024820152746f6e6c792070726f706f7365722063616e63656c7360581b604482015290519081900360640190fd5b60058101805463ff000000191663010000001790556001810154600382015460098301546131449261beef926001600160a01b0391821692911690614e7a565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a25050565b60176020526000908152604090205460ff1681565b61319c816143b9565b6000601c82815481106131ab57fe5b600091825260208083209190910154808352601b909152604090912060058101549192509065010000000000900460ff16600114613224576040805162461bcd60e51b81526020600482015260116024820152701b9bdd081ada58dac81c1c9bdc1bdcd85b607a1b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000613240846146a2565b9050600181151514156132855760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040812060048101869055600101555b81546001600160a01b039081166000908152601860205260409020805460ff1916905560028301546132b79116614845565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a350505050565b6132ff816143b9565b6000601c828154811061330e57fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff161580156133585750600581015465010000000000900460ff16155b8015613373575060058101546601000000000000900460ff16155b6133bc576040805162461bcd60e51b81526020600482015260156024820152741b9bdd081cdd185b99185c99081c1c9bdc1bdcd85b605a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006133d8846146a2565b90506ec097ce7bc90715b34b9f100000000061340e83600701546134028560060154613402611325565b9063ffffffff614cdf16565b1115613418575060005b60048201546001600160a01b03166000908152600080516020615269833981519152602052604090205460088301541115613451575060005b6000826009015411801561348c575060038201546001600160a01b031660009081526000805160206152698339815191526020526040902054155b801561349b575060c860115410155b156134a4575060005b600181151514156136765760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040902054600160a01b900460ff166001141561353957600682015482546001600160a01b0390811660009081526019602052604080822060010180549094019093556007850154855490921681529190912060020180549091019055613553565b81546006830154613553916001600160a01b031690614cf1565b815460078301546006840154613573926001600160a01b03169101614e23565b6006820154600f80549091019055600782015460108054909101905560038201546001600160a01b0316600090815260008051602061526983398151915260205260409020541580156135ca575060008260090154115b156135d9576011805460010190555b600382015460098301546135fe9161beef9161dead916001600160a01b031690614e7a565b8154600483015460088401546136269261dead926001600160a01b0391821692911690614e7a565b60048201546001600160a01b031660009081526000805160206152698339815191526020526040902054158015613661575060008260080154115b1561367157601180546000190190555b6136a1565b6001820154600383015460098401546136a19261beef926001600160a01b0391821692911690614e7a565b60028201546136b8906001600160a01b0316614845565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a350505050565b61beef81565b6060613708826143b9565b6000601c838154811061371757fe5b600091825260208083209190910154808352601282526040808420601b909352909220600581015492935090916601000000000000900460ff1660011461379b576040805162461bcd60e51b81526020600482015260136024820152721b9bdd081858dd1a5bdb881c1c9bdc1bdcd85b606a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006137b7866146a2565b9050600181151514156138ed5760058201805462ff00001916620100001790558254600184810154604051600287810180546000966060966001600160a01b039091169594929383928592600019908216156101000201160480156138535780601f10613831576101008083540402835291820191613853565b820191906000526020600020905b81548152906001019060200180831161383f575b505091505060006040518083038185875af1925050503d8060008114613895576040519150601f19603f3d011682016040523d82523d6000602084013e61389a565b606091505b5091509150816138e0576040805162461bcd60e51b815260206004820152600c60248201526b63616c6c206661696c75726560a01b604482015290519081900360640190fd5b9550611c66945050505050565b6040805182151581529051859188917facc0e8fc789590d1cf21203e356b7b1cd28911b1309c24883c5fcdc305b497a39181900360200190a350505050919050565b60006002600054141561397a576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556ec097ce7bc90715b34b9f100000000061399f898963ffffffff614cdf16565b11156139e0576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613a4d576040805162461bcd60e51b815260206004820152601c60248201527f74726962757465546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff16613aba576040805162461bcd60e51b815260206004820152601c60248201527f7061796d656e74546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03891661dead14801590613ae057506001600160a01b03891661beef14155b8015613af757506001600160a01b03891661babe14155b613b41576040805162461bcd60e51b81526020600482015260166024820152756170706c6963616e7420756e72657365727661626c6560501b604482015290519081900360640190fd5b6001600160a01b03891660009081526019602052604090206004015415613ba2576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600086118015613bd557506001600160a01b03851660009081526000805160206152698339815191526020526040902054155b15613c235760c860115410613c23576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6003546001600160a01b038681169116148015613c405750600034115b15613e1657853414613c8c576040805162461bcd60e51b815260206004820152601060248201526f0d2dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cdc57600080fd5b505af1158015613cf0573d6000803e3d6000fd5b5050600354604051600093506001600160a01b03909116915034908381818185875af1925050503d8060008114613d43576040519150601f19603f3d011682016040523d82523d6000602084013e613d48565b606091505b5050905080613d90576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6003546040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613de357600080fd5b505af1158015613df7573d6000803e3d6000fd5b505050506040513d6020811015613e0d57600080fd5b50613eda915050565b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015613e6b57600080fd5b505af1158015613e7f573d6000803e3d6000fd5b505050506040513d6020811015613e9557600080fd5b5051613eda576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b613ee761beef868861488c565b613eef61500e565b613f108a8a8a8a8a8a8a8a89604051806020016040528060008152506148ea565b5050600e5460001901600160005598975050505050505050565b6003546001600160a01b031681565b61dead81565b600082821115613f4e57600080fd5b50900390565b6000808211613f6257600080fd5b6000828481613f6d57fe5b04949350505050565b3360009081526014602090815260408083206001600160a01b0386168452909152902054811115613fe5576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b505050506040513d602081101561405e57600080fd5b50516140a3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6140ae338383614e96565b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b60006140ff611325565b6001600160a01b038516600090815260196020526040902060018101549192509084111561416a576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b82816002015410156141b7576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b6141c4816003015461295a565b6141ff5760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b6000614211858563ffffffff614cdf16565b6001830180548790039055600283018054869003905590506142338682614ef6565b600f8054869003905560108054859003905560005b60165481101561436d5761dead60009081526014602052601680546142b091600080516020615269833981519152918491908690811061428457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548487614f51565b905080156143645761dead60009081526014602052601680548392600080516020615269833981519152929091869081106142e757fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252601490925290812060168054849391908690811061433857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b50600101614248565b50604080518681526020810186905281516001600160a01b038916927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b601c548110614402576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b61440a61502c565b601b6000601c848154811061441b57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116144a15790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050600854600754826101400151010161454a6111dd565b1015614592576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c206e6f7420726561647960701b604482015290519081900360640190fd5b60a08101516020015160ff16156145f0576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792070726f636573736564000000000000604482015290519081900360640190fd5b8115806146515750601b6000601c600185038154811061460c57fe5b9060005260206000200154815260200190815260200160002060050160016007811061463457fe5b602091828204019190069054906101000a900460ff1660ff166001145b611321576040805162461bcd60e51b815260206004820152601d60248201527f70726576696f75732070726f706f73616c20756e70726f636573736564000000604482015290519081900360640190fd5b60006146ac61502c565b601b6000601c85815481106146bd57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116147435790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050905080610180015181610160015111156147ed57600191505b806101a0015161480d600954614801611325565b9063ffffffff614fa516565b101561481857600091505b80516001600160a01b03166000908152601960205260409020600401541561483f57600091505b50919050565b6001546005546148649161beef9133916001600160a01b031690614e7a565b6001546005546004546148899261beef9285926001600160a01b039092169103614e7a565b50565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b6148f261502c565b604051806101e001604052808c6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b03168152602001886001600160a01b03168152602001866001600160a01b031681526020018481526020018b81526020018a8152602001878152602001898152602001600081526020016000815260200160008152602001600081526020018581525090508060a0015160066007811061499b57fe5b602002015160ff1660011415614a22576149b36150ac565b50604080516060810182526001600160a01b038d8116825260208083018a8152838501878152600e5460009081526012845295909520845181546001600160a01b03191694169390931783555160018301559251805192938493614a1d92600285019201906150d6565b505050505b600e546000908152601b6020908152604091829020835181546001600160a01b03199081166001600160a01b03928316178355928501516001830180548516918316919091179055928401516002820180548416918516919091179055606084015160038201805484169185169190911790556080840151600482018054909316931692909217905560a0820151829190614ac39060058301906007615154565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e01559050506000601a6000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168d6001600160a01b03167f698b6b5a7173505e04fab049527190ad00a5d40a2dfb3d6e811f0e9c47c00c058e8e8e8e8e8e8e8e8e600e54604051808b81526020018a8152602001898152602001886001600160a01b03166001600160a01b03168152602001878152602001866001600160a01b03166001600160a01b0316815260200185815260200184600760200280838360005b83811015614c26578181015183820152602001614c0e565b5050505090500180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015614c6c578181015183820152602001614c54565b50505050905090810190601f168015614c995780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a45050600e8054600101905550505050505050505050565b600081831015614cd65781614cd8565b825b9392505050565b600082820183811015614cd857600080fd5b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415614d79576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b614e85848383614e96565b614e9083838361488c565b50505050565b6001600160a01b039283166000908152601460209081526040808320949095168252928352838120805483900390557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c259092529190208054919091039055565b6001600160a01b038216600081815260136020908152604080832080548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b600081614f5d57600080fd5b83614f6a57506000614cd8565b83830283858281614f7757fe5b041415614f9057828181614f8757fe5b04915050614cd8565b83838681614f9a57fe5b040295945050505050565b600082614fb457506000611140565b82820282848281614fc157fe5b0414614cd857600080fd5b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b6040518060e001604052806007906020820280388339509192915050565b604080516101e08101825260008082526020820181905291810182905260608101829052608081019190915260a0810161506461500e565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600080191681525090565b604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061511757805160ff1916838001178555615144565b82800160010185558215615144579182015b82811115615144578251825591602001919060010190615129565b506151509291506151e3565b5090565b6001830191839082156151d75791602002820160005b838211156151a857835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261516a565b80156151d55782816101000a81549060ff02191690556001016020816000010492830192600103026151a8565b505b506151509291506151fd565b6111da91905b8082111561515057600081556001016151e9565b6111da91905b8082111561515057805460ff1916815560010161520356fe63616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f6365737365648b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00a265627a7a723158207a5d3c6d2366eb79ed02b3eba85b47da141d58c3e6517e0f1f03b4051e05c0a564736f6c63430005110032000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b184000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b1840000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000036000000000000000000000000000000000000000000000005150ae84a8cdf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004380000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20000000000000000000000000cc4dc8e92a6e30b6f5f6e65156b121d9f83ca18f000000000000000000000000f290f3d843826d00f8176182fd76550535f6dbb4000000000000000000000000756ce9c56b02f05b5faffafc707b552bedce83ee000000000000000000000000d5b3988ed0ab5ec375e51bb6fd10e205cec16a2e000000000000000000000000130093a5aebc07e78e16f0ecef09d1c45afd8178000000000000000000000000a3564677fc4907a15c9a7eae1dbc1ae9ac57b8e10000000000000000000000004744cda32be7b3e75b9334001da9ed21789d4c0d0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000b7f49e02552751b249cae86959fd50d887708b1d00000000000000000000000036306c060497b8df0b34485181c012b7acae77b10000000000000000000000007285502ed0a0ed25f65941e480bda7114492acf9000000000000000000000000c2d6416f5be67aacbcd516580b36d06884e3a2e1000000000000000000000000423afc4406d10c726d5d664d2997571e69d1875f0000000000000000000000001bc9e52baa93dab1a47c3168f6d82ed08856ec83000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000

Deployed Bytecode

0x6080604052600436106103815760003560e01c80637d5b6c72116101d1578063b2643aab11610102578063e1780345116100a0578063ea00d3311161006f578063ea00d33114610f21578063ea7b6ffd14610f4b578063f242862114610fa0578063f5d54c7714610fb557610381565b8063e178034514610e85578063e1a0e3fa14610eb8578063e63bc62d14610ee2578063e681c4aa14610f0c57610381565b8063c89039c5116100dc578063c89039c514610dfe578063da35c66414610e13578063dfdd369e14610e28578063e0a8f6f514610e5b57610381565b8063b2643aab14610d5d578063b470aade14610dbf578063c68e45b714610dd457610381565b80639746d9401161016f578063a3dc380011610149578063a3dc380014610cac578063a4d2d9ec14610cd6578063a9059cbb14610d0f578063afe5475f14610d4857610381565b80639746d94014610c3a57806399653fbe14610c645780639d1722cb14610c9757610381565b80638a027690116101ab5780638a02769014610b565780638b15a60514610be65780639425a47614610bfb57806395d89b4114610c2557610381565b80637d5b6c7214610a6a57806383240f8314610a7f5780638340bbce14610b4157610381565b80633793ab3c116102b657806363858f2d11610254578063753d756311610223578063753d7563146109e357806378a8956714610a16578063797daf7014610a2b5780637a60964114610a4057610381565b806363858f2d146109275780636d4475eb1461093c57806370a082311461097557806373f8fd4b146109a857610381565b8063402c179411610290578063402c1794146107df5780634482394b1461081257806359999b41146108df578063635e99aa1461091257610381565b80633793ab3c146107595780633a98ef39146107835780633fc24bba1461079857610381565b80630d246214116103235780631dafede0116102fd5780631dafede0146106bc5780632582bf2a146106e657806327efc08614610719578063313ce5671461072e57610381565b80630d2462141461064657806315eb349e1461067757806318160ddd146106a757610381565b806306fdde031161035f57806306fdde03146104fc578063086146d21461058657806308ae4b0c1461059b5780630cf20cc91461060d57610381565b8063013cf08b1461038357806303e32fa114610478578063044a0ca81461049f575b005b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610fca565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c6001600160a01b03166001600160a01b031681526020018b6001600160a01b03166001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561048457600080fd5b5061048d611049565b60408051918252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b506001600160a01b03813516906020013561104f565b604051808260028111156104e857fe5b60ff16815260200191505060405180910390f35b34801561050857600080fd5b50610511611146565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b5061048d6111dd565b3480156105a757600080fd5b506105ce600480360360208110156105be57600080fd5b50356001600160a01b031661120b565b604080516001600160a01b03909716875260ff9095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561061957600080fd5b506103816004803603604081101561063057600080fd5b506001600160a01b03813516906020013561124b565b34801561065257600080fd5b5061065b6112ac565b604080516001600160a01b039092168252519081900360200190f35b34801561068357600080fd5b506103816004803603604081101561069a57600080fd5b50803590602001356112bb565b3480156106b357600080fd5b5061048d611325565b3480156106c857600080fd5b5061065b600480360360208110156106df57600080fd5b503561132f565b3480156106f257600080fd5b506103816004803603602081101561070957600080fd5b50356001600160a01b0316611356565b34801561072557600080fd5b5061065b611589565b34801561073a57600080fd5b5061074361158f565b6040805160ff9092168252519081900360200190f35b34801561076557600080fd5b506103816004803603602081101561077c57600080fd5b5035611598565b34801561078f57600080fd5b5061048d611764565b3480156107a457600080fd5b506107cb600480360360208110156107bb57600080fd5b50356001600160a01b031661176a565b604080519115158252519081900360200190f35b3480156107eb57600080fd5b5061065b6004803603602081101561080257600080fd5b50356001600160a01b031661177f565b34801561081e57600080fd5b506103816004803603606081101561083557600080fd5b810190602081018135600160201b81111561084f57600080fd5b82018360208201111561086157600080fd5b803590602001918460208302840111600160201b8311171561088257600080fd5b919390929091602081019035600160201b81111561089f57600080fd5b8201836020820111156108b157600080fd5b803590602001918460208302840111600160201b831117156108d257600080fd5b919350915035151561179a565b3480156108eb57600080fd5b506103816004803603602081101561090257600080fd5b50356001600160a01b03166118ef565b34801561091e57600080fd5b5061048d611ac5565b34801561093357600080fd5b5061048d611acb565b34801561094857600080fd5b5061048d6004803603604081101561095f57600080fd5b506001600160a01b038135169060200135611ad1565b34801561098157600080fd5b5061048d6004803603602081101561099857600080fd5b50356001600160a01b0316611c4c565b3480156109b457600080fd5b5061048d600480360360408110156109cb57600080fd5b506001600160a01b0381358116916020013516611c6b565b3480156109ef57600080fd5b506107cb60048036036020811015610a0657600080fd5b50356001600160a01b0316611c96565b348015610a2257600080fd5b5061048d611cab565b348015610a3757600080fd5b5061048d611cb1565b348015610a4c57600080fd5b5061038160048036036020811015610a6357600080fd5b5035611cb7565b348015610a7657600080fd5b5061048d611cdd565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b5035611ce3565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b04578181015183820152602001610aec565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b4d57600080fd5b5061048d611d99565b348015610b6257600080fd5b5061048d60048036036080811015610b7957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ba857600080fd5b820183602082011115610bba57600080fd5b803590602001918460018302840111600160201b83111715610bdb57600080fd5b919350915035611d9f565b348015610bf257600080fd5b5061048d611e1c565b348015610c0757600080fd5b506107cb60048036036020811015610c1e57600080fd5b5035611e22565b348015610c3157600080fd5b50610511611e39565b348015610c4657600080fd5b5061038160048036036020811015610c5d57600080fd5b5035611e9a565b348015610c7057600080fd5b5061038160048036036040811015610c8757600080fd5b508035906020013560ff16612558565b348015610ca357600080fd5b5061048d612954565b348015610cb857600080fd5b506107cb60048036036020811015610ccf57600080fd5b503561295a565b348015610ce257600080fd5b5061048d60048036036040811015610cf957600080fd5b506001600160a01b038135169060200135612a02565b348015610d1b57600080fd5b5061038160048036036040811015610d3257600080fd5b506001600160a01b038135169060200135612b41565b348015610d5457600080fd5b5061048d612c17565b348015610d6957600080fd5b50610d8760048036036020811015610d8057600080fd5b5035612c1d565b604051808260e080838360005b83811015610dac578181015183820152602001610d94565b5050505090500191505060405180910390f35b348015610dcb57600080fd5b5061048d612c85565b348015610de057600080fd5b5061038160048036036020811015610df757600080fd5b5035612c8b565b348015610e0a57600080fd5b5061065b612ed7565b348015610e1f57600080fd5b5061048d612ee6565b348015610e3457600080fd5b5061038160048036036020811015610e4b57600080fd5b50356001600160a01b0316612eec565b348015610e6757600080fd5b5061038160048036036020811015610e7e57600080fd5b5035612fe2565b348015610e9157600080fd5b506107cb60048036036020811015610ea857600080fd5b50356001600160a01b031661317e565b348015610ec457600080fd5b5061038160048036036020811015610edb57600080fd5b5035613193565b348015610eee57600080fd5b5061038160048036036020811015610f0557600080fd5b50356132f6565b348015610f1857600080fd5b5061065b6136f7565b348015610f2d57600080fd5b5061051160048036036020811015610f4457600080fd5b50356136fd565b61048d6004803603610100811015610f6257600080fd5b506001600160a01b038135811691602081013591604082013591606081013591608082013581169160a08101359160c0820135169060e0013561392f565b348015610fac57600080fd5b5061065b613f2a565b348015610fc157600080fd5b5061065b613f39565b601b602052600090815260409020805460018201546002830154600384015460048501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600d8d0154600e909d01546001600160a01b039c8d169d9b8d169c9a8b169b998b169a9098169896979596949593949293919290918e565b60055481565b6001600160a01b038216600090815260196020526040812054600160a01b900460ff166001146110b3576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b601c5482106110f6576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b601b6000601c848154811061110757fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505090505b90565b60006112066006546111fa600a5442613f3f90919063ffffffff16565b9063ffffffff613f5416565b905090565b601960205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b60026000541415611294576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556112a38282613f76565b50506001600055565b6002546001600160a01b031681565b33600090815260196020526040902054600160a01b900460ff16600114611316576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b6113213383836140f5565b5050565b601054600f540190565b6016818154811061133c57fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601960205260409020600101546113ac576040805162461bcd60e51b815260206004820152600f60248201526e3737ba1039b430b932b437b63232b960891b604482015290519081900360640190fd5b6001600160a01b0381166113ff576040805162461bcd60e51b81526020600482015260156024820152741b995dd1195b1959d85d1952d95e481e995c9bd959605a1b604482015290519081900360640190fd5b6001600160a01b0381163314611500576001600160a01b038116600090815260196020526040902054600160a01b900460ff1615611484576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206f7665727772697465206d656d626572730000000000000000604482015290519081900360640190fd5b6001600160a01b038181166000908152601a60209081526040808320549093168252601990522054600160a01b900460ff1615611500576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f74206f7665727772697465206b65797360581b604482015290519081900360640190fd5b33600081815260196020908152604080832080546001600160a01b039081168552601a845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a25050565b61babe81565b600d5460ff1690565b6115a1816143b9565b6000601c82815481106115b057fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1660011461162c576040805162461bcd60e51b81526020600482015260166024820152751b9bdd081dda1a5d195b1a5cdd081c1c9bdc1bdcd85b60521b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000611648846146a2565b6016549091506101901161165a575060005b600181151514156116f05760058201805462ff00001916620100001790556003820180546001600160a01b039081166000908152601560205260408120805460ff1916600190811790915592546016805494850181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899092018054929091166001600160a01b03199092169190911790555b60038201546001600160a01b039081166000908152601760205260409020805460ff1916905560028301546117259116614845565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a350505050565b600f5481565b60186020526000908152604090205460ff1681565b601a602052600090815260409020546001600160a01b031681565b600260005414156117e3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260005583821461183c576040805162461bcd60e51b815260206004820152601b60248201527f746f6b656e73202620616d6f756e7473206d757374206d617463680000000000604482015290519081900360640190fd5b60005b848110156118e257600084848381811061185557fe5b90506020020135905082156118b4573360009081526014602052604081209088888581811061188057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490505b6118d98787848181106118c357fe5b905060200201356001600160a01b031682613f76565b5060010161183f565b5050600160005550505050565b6001600160a01b03811660008181527fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c25602090815260408083205481516370a0823160e01b815230600482015291519394909390926370a082319260248082019391829003018186803b15801561196557600080fd5b505afa158015611979573d6000803e3d6000fd5b505050506040513d602081101561198f57600080fd5b5051039050806119d2576040805162461bcd60e51b81526020600482015260096024820152686e6f20746f6b656e7360b81b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611a31576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015290519081900360640190fd5b6001600160a01b03821660009081526000805160206152698339815191526020526040902054158015611a66575060c8601154105b15611a75576011805460010190555b611a8261dead838361488c565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a25050565b60105481565b60085481565b6000611adb614fcc565b506001600160a01b03838116600090815260196020908152604091829020825160c08101845281549485168152600160a01b90940460ff1691840191909152600181015491830182905260028101546060840152600381015460808401526004015460a0830152151580611b53575060008160600151115b611ba4576040805162461bcd60e51b815260206004820152601760248201527f6d7573742068617665207368617265206f72206c6f6f74000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526019602052604090206004015415611c03576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a985a5b195960921b604482015290519081900360640190fd5b611c0b61500e565b600160a082015260408051602081019091526000808252611c3c91879190819081908190819081908c908a906148ea565b5050600e54600019019392505050565b6001600160a01b0381166000908152601360205260409020545b919050565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b60156020526000908152604090205460ff1681565b60165490565b601c5490565b336000908152601960205260409020600181018054839003905560020180549091019055565b600a5481565b60126020908152600091825260409182902080546001808301546002808501805488516101009582161595909502600019011691909104601f81018790048702840187019097528683526001600160a01b03909316959094919291830182828015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905083565b60075481565b6000611da961500e565b6001816006602002019060ff16908160ff1681525050611e0a876000806000808b60008a898e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148ea92505050565b5050600e546000190195945050505050565b60045481565b60006007548201611e316111dd565b101592915050565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b60026000541415611ee3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000908155338152601a60209081526040808320546001600160a01b031683526019909152902060010154611f50576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b60015460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b505161201f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60015460045461203e9161beef916001600160a01b039091169061488c565b6000818152601b6020526040902060018101546001600160a01b0316612098576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b600581015460ff16156120e6576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481cdc1bdb9cdbdc9959607a1b604482015290519081900360640190fd5b60058101546301000000900460ff1615612133576040805162461bcd60e51b815260206004820152600960248201526818d85b98d95b1b195960ba1b604482015290519081900360640190fd5b80546001600160a01b031660009081526019602052604090206004015415612195576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600081600901541180156121d0575060038101546001600160a01b031660009081526000805160206152698339815191526020526040902054155b1561221e5760c86011541061221e576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6005810154600160201b900460ff16600114156123855760038101546001600160a01b031660009081526015602052604090205460ff161561229d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60038101546001600160a01b031660009081526017602052604090205460ff161561230f576040805162461bcd60e51b815260206004820152601a60248201527f616c72656164792077686974656c6973742070726f706f736564000000000000604482015290519081900360640190fd5b60165461019011612359576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b60038101546001600160a01b03166000908152601760205260409020805460ff1916600117905561242a565b600581015465010000000000900460ff166001141561242a5780546001600160a01b031660009081526018602052604090205460ff1615612405576040805162461bcd60e51b81526020600482015260156024820152741ada58dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b80546001600160a01b03166000908152601860205260409020805460ff191660011790555b60006124816124376111dd565b601c541561247957601c8054601b91600091600019810190811061245757fe5b90600052602060002001548152602001908152602001600020600a015461247c565b60005b614cc6565b6001908101600a8401819055336000818152601a60209081526040808320546002890180546001600160a01b0319166001600160a01b03909216918217905560058901805460ff191688179055601c80549788018155938490527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119096018990559154825189815260001990910191810191909152808201849052905192945083927f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd9181900360600190a3505060016000555050565b336000908152601a60209081526040808320546001600160a01b0316835260199091529020600101546125c1576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b336000908152601a60209081526040808320546001600160a01b03168084526019909252909120601c54841061262b576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b6000601b6000601c878154811061263e57fe5b90600052602060002001548152602001908152602001600020905060038460ff161061269b576040805162461bcd60e51b81526020600482015260076024820152666e6f74203c203360c81b604482015290519081900360640190fd5b60008460ff1660028111156126ac57fe5b905081600a01546126bb6111dd565b10156126ff576040805162461bcd60e51b815260206004820152600e60248201526d766f74696e672070656e64696e6760901b604482015290519081900360640190fd5b61270c82600a0154611e22565b15612751576040805162461bcd60e51b815260206004820152601060248201526f1c1c9bdc1bdcd85b08195e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f8301602052604081205460ff16600281111561277a57fe5b146127bb576040805162461bcd60e51b815260206004820152600c60248201526b1b595b58995c881d9bdd195960a21b604482015290519081900360640190fd5b60018160028111156127c957fe5b14806127e0575060028160028111156127de57fe5b145b612822576040805162461bcd60e51b815260206004820152600e60248201526d766f746520596573206f72204e6f60901b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff1916600183600281111561285357fe5b0217905550600181600281111561286657fe5b14156128b6576001830154600b830180549091019055600383015486111561289057600383018690555b81600d015461289d611325565b11156128b1576128ab611325565b600d8301555b6128db565b60028160028111156128c457fe5b14156128db576001830154600c8301805490910190555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a20601c8a8154811061291e57fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a4505050505050565b60115481565b601c5460009082106129a6576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b601b6000601c84815481106129b757fe5b906000526020600020015481526020019081526020016000206005016001600781106129df57fe5b602091828204019190069054906101000a900460ff1660ff166001149050919050565b60006001600160a01b038316612a4c576040805162461bcd60e51b815260206004820152600a6024820152693732b2b2103a37b5b2b760b11b604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff1615612ab0576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60165461019011612afa576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b612b0261500e565b6001608082015260408051602081019091526000808252612b32918190819081908990829081908b908a906148ea565b5050600e546000190192915050565b33600090815260196020526040902060020154612b64908263ffffffff613f3f16565b336000908152601960205260408082206002908101939093556001600160a01b038516825290200154612b9d908263ffffffff614cdf16565b6001600160a01b0383166000818152601960209081526040808320600201949094553380835260138252848320805487900390558383529184902080548601905583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60095481565b612c2561500e565b6000828152601b6020526040808220815160e0810192839052926005909101916007918390855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612c4c575094979650505050505050565b60065481565b60026000541415612cd4576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260008181559054604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b158015612d3457600080fd5b505af1158015612d48573d6000803e3d6000fd5b505050506040513d6020811015612d5e57600080fd5b5051612da3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b33600090815260196020526040902054600160a01b900460ff1660011415612e005733600090815260196020526040902060010154612de8908263ffffffff614cdf16565b33600090815260196020526040902060010155612e0a565b612e0a3382614cf1565b612e143382614e23565b600f80548201908190556ec097ce7bc90715b34b9f10000000001015612e6f576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6002546001600160a01b031660009081526000805160206152698339815191526020526040902054158015612ea6575060c8601154105b15612eb5576011805460010190555b600254612ecf9061dead906001600160a01b03168361488c565b506001600055565b6001546001600160a01b031681565b600e5481565b6001600160a01b03811660009081526019602052604090206004810154612f47576040805162461bcd60e51b815260206004820152600a6024820152691b9bdd081a985a5b195960b21b604482015290519081900360640190fd5b6000816002015411612f8a576040805162461bcd60e51b81526020600482015260076024820152661b9bc81b1bdbdd60ca1b604482015290519081900360640190fd5b612f97816003015461295a565b612fd25760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b61132182600083600201546140f5565b6000818152601b60205260409020600581015460ff161561304a576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792073706f6e736f726564000000000000604482015290519081900360640190fd5b60058101546301000000900460ff16156130ab576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792063616e63656c6c6564000000000000604482015290519081900360640190fd5b60018101546001600160a01b03163314613104576040805162461bcd60e51b81526020600482015260156024820152746f6e6c792070726f706f7365722063616e63656c7360581b604482015290519081900360640190fd5b60058101805463ff000000191663010000001790556001810154600382015460098301546131449261beef926001600160a01b0391821692911690614e7a565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a25050565b60176020526000908152604090205460ff1681565b61319c816143b9565b6000601c82815481106131ab57fe5b600091825260208083209190910154808352601b909152604090912060058101549192509065010000000000900460ff16600114613224576040805162461bcd60e51b81526020600482015260116024820152701b9bdd081ada58dac81c1c9bdc1bdcd85b607a1b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000613240846146a2565b9050600181151514156132855760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040812060048101869055600101555b81546001600160a01b039081166000908152601860205260409020805460ff1916905560028301546132b79116614845565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a350505050565b6132ff816143b9565b6000601c828154811061330e57fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff161580156133585750600581015465010000000000900460ff16155b8015613373575060058101546601000000000000900460ff16155b6133bc576040805162461bcd60e51b81526020600482015260156024820152741b9bdd081cdd185b99185c99081c1c9bdc1bdcd85b605a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006133d8846146a2565b90506ec097ce7bc90715b34b9f100000000061340e83600701546134028560060154613402611325565b9063ffffffff614cdf16565b1115613418575060005b60048201546001600160a01b03166000908152600080516020615269833981519152602052604090205460088301541115613451575060005b6000826009015411801561348c575060038201546001600160a01b031660009081526000805160206152698339815191526020526040902054155b801561349b575060c860115410155b156134a4575060005b600181151514156136765760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040902054600160a01b900460ff166001141561353957600682015482546001600160a01b0390811660009081526019602052604080822060010180549094019093556007850154855490921681529190912060020180549091019055613553565b81546006830154613553916001600160a01b031690614cf1565b815460078301546006840154613573926001600160a01b03169101614e23565b6006820154600f80549091019055600782015460108054909101905560038201546001600160a01b0316600090815260008051602061526983398151915260205260409020541580156135ca575060008260090154115b156135d9576011805460010190555b600382015460098301546135fe9161beef9161dead916001600160a01b031690614e7a565b8154600483015460088401546136269261dead926001600160a01b0391821692911690614e7a565b60048201546001600160a01b031660009081526000805160206152698339815191526020526040902054158015613661575060008260080154115b1561367157601180546000190190555b6136a1565b6001820154600383015460098401546136a19261beef926001600160a01b0391821692911690614e7a565b60028201546136b8906001600160a01b0316614845565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a350505050565b61beef81565b6060613708826143b9565b6000601c838154811061371757fe5b600091825260208083209190910154808352601282526040808420601b909352909220600581015492935090916601000000000000900460ff1660011461379b576040805162461bcd60e51b81526020600482015260136024820152721b9bdd081858dd1a5bdb881c1c9bdc1bdcd85b606a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006137b7866146a2565b9050600181151514156138ed5760058201805462ff00001916620100001790558254600184810154604051600287810180546000966060966001600160a01b039091169594929383928592600019908216156101000201160480156138535780601f10613831576101008083540402835291820191613853565b820191906000526020600020905b81548152906001019060200180831161383f575b505091505060006040518083038185875af1925050503d8060008114613895576040519150601f19603f3d011682016040523d82523d6000602084013e61389a565b606091505b5091509150816138e0576040805162461bcd60e51b815260206004820152600c60248201526b63616c6c206661696c75726560a01b604482015290519081900360640190fd5b9550611c66945050505050565b6040805182151581529051859188917facc0e8fc789590d1cf21203e356b7b1cd28911b1309c24883c5fcdc305b497a39181900360200190a350505050919050565b60006002600054141561397a576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556ec097ce7bc90715b34b9f100000000061399f898963ffffffff614cdf16565b11156139e0576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613a4d576040805162461bcd60e51b815260206004820152601c60248201527f74726962757465546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff16613aba576040805162461bcd60e51b815260206004820152601c60248201527f7061796d656e74546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03891661dead14801590613ae057506001600160a01b03891661beef14155b8015613af757506001600160a01b03891661babe14155b613b41576040805162461bcd60e51b81526020600482015260166024820152756170706c6963616e7420756e72657365727661626c6560501b604482015290519081900360640190fd5b6001600160a01b03891660009081526019602052604090206004015415613ba2576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600086118015613bd557506001600160a01b03851660009081526000805160206152698339815191526020526040902054155b15613c235760c860115410613c23576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6003546001600160a01b038681169116148015613c405750600034115b15613e1657853414613c8c576040805162461bcd60e51b815260206004820152601060248201526f0d2dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613cdc57600080fd5b505af1158015613cf0573d6000803e3d6000fd5b5050600354604051600093506001600160a01b03909116915034908381818185875af1925050503d8060008114613d43576040519150601f19603f3d011682016040523d82523d6000602084013e613d48565b606091505b5050905080613d90576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6003546040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613de357600080fd5b505af1158015613df7573d6000803e3d6000fd5b505050506040513d6020811015613e0d57600080fd5b50613eda915050565b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015613e6b57600080fd5b505af1158015613e7f573d6000803e3d6000fd5b505050506040513d6020811015613e9557600080fd5b5051613eda576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b613ee761beef868861488c565b613eef61500e565b613f108a8a8a8a8a8a8a8a89604051806020016040528060008152506148ea565b5050600e5460001901600160005598975050505050505050565b6003546001600160a01b031681565b61dead81565b600082821115613f4e57600080fd5b50900390565b6000808211613f6257600080fd5b6000828481613f6d57fe5b04949350505050565b3360009081526014602090815260408083206001600160a01b0386168452909152902054811115613fe5576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561403457600080fd5b505af1158015614048573d6000803e3d6000fd5b505050506040513d602081101561405e57600080fd5b50516140a3576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6140ae338383614e96565b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b60006140ff611325565b6001600160a01b038516600090815260196020526040902060018101549192509084111561416a576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b82816002015410156141b7576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b6141c4816003015461295a565b6141ff5760405162461bcd60e51b815260040180806020018281038252604d81526020018061521c604d913960600191505060405180910390fd5b6000614211858563ffffffff614cdf16565b6001830180548790039055600283018054869003905590506142338682614ef6565b600f8054869003905560108054859003905560005b60165481101561436d5761dead60009081526014602052601680546142b091600080516020615269833981519152918491908690811061428457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548487614f51565b905080156143645761dead60009081526014602052601680548392600080516020615269833981519152929091869081106142e757fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252601490925290812060168054849391908690811061433857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b50600101614248565b50604080518681526020810186905281516001600160a01b038916927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b601c548110614402576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b61440a61502c565b601b6000601c848154811061441b57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116144a15790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050600854600754826101400151010161454a6111dd565b1015614592576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c206e6f7420726561647960701b604482015290519081900360640190fd5b60a08101516020015160ff16156145f0576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792070726f636573736564000000000000604482015290519081900360640190fd5b8115806146515750601b6000601c600185038154811061460c57fe5b9060005260206000200154815260200190815260200160002060050160016007811061463457fe5b602091828204019190069054906101000a900460ff1660ff166001145b611321576040805162461bcd60e51b815260206004820152601d60248201527f70726576696f75732070726f706f73616c20756e70726f636573736564000000604482015290519081900360640190fd5b60006146ac61502c565b601b6000601c85815481106146bd57fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116147435790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050905080610180015181610160015111156147ed57600191505b806101a0015161480d600954614801611325565b9063ffffffff614fa516565b101561481857600091505b80516001600160a01b03166000908152601960205260409020600401541561483f57600091505b50919050565b6001546005546148649161beef9133916001600160a01b031690614e7a565b6001546005546004546148899261beef9285926001600160a01b039092169103614e7a565b50565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b6148f261502c565b604051806101e001604052808c6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b03168152602001886001600160a01b03168152602001866001600160a01b031681526020018481526020018b81526020018a8152602001878152602001898152602001600081526020016000815260200160008152602001600081526020018581525090508060a0015160066007811061499b57fe5b602002015160ff1660011415614a22576149b36150ac565b50604080516060810182526001600160a01b038d8116825260208083018a8152838501878152600e5460009081526012845295909520845181546001600160a01b03191694169390931783555160018301559251805192938493614a1d92600285019201906150d6565b505050505b600e546000908152601b6020908152604091829020835181546001600160a01b03199081166001600160a01b03928316178355928501516001830180548516918316919091179055928401516002820180548416918516919091179055606084015160038201805484169185169190911790556080840151600482018054909316931692909217905560a0820151829190614ac39060058301906007615154565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e01559050506000601a6000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168d6001600160a01b03167f698b6b5a7173505e04fab049527190ad00a5d40a2dfb3d6e811f0e9c47c00c058e8e8e8e8e8e8e8e8e600e54604051808b81526020018a8152602001898152602001886001600160a01b03166001600160a01b03168152602001878152602001866001600160a01b03166001600160a01b0316815260200185815260200184600760200280838360005b83811015614c26578181015183820152602001614c0e565b5050505090500180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015614c6c578181015183820152602001614c54565b50505050905090810190601f168015614c995780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a45050600e8054600101905550505050505050505050565b600081831015614cd65781614cd8565b825b9392505050565b600082820183811015614cd857600080fd5b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415614d79576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b614e85848383614e96565b614e9083838361488c565b50505050565b6001600160a01b039283166000908152601460209081526040808320949095168252928352838120805483900390557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c259092529190208054919091039055565b6001600160a01b038216600081815260136020908152604080832080548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b600081614f5d57600080fd5b83614f6a57506000614cd8565b83830283858281614f7757fe5b041415614f9057828181614f8757fe5b04915050614cd8565b83838681614f9a57fe5b040295945050505050565b600082614fb457506000611140565b82820282848281614fc157fe5b0414614cd857600080fd5b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b6040518060e001604052806007906020820280388339509192915050565b604080516101e08101825260008082526020820181905291810182905260608101829052608081019190915260a0810161506461500e565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600080191681525090565b604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061511757805160ff1916838001178555615144565b82800160010185558215615144579182015b82811115615144578251825591602001919060010190615129565b506151509291506151e3565b5090565b6001830191839082156151d75791602002820160005b838211156151a857835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261516a565b80156151d55782816101000a81549060ff02191690556001016020816000010492830192600103026151a8565b505b506151509291506151fd565b6111da91905b8082111561515057600081556001016151e9565b6111da91905b8082111561515057805460ff1916815560010161520356fe63616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f6365737365648b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00a265627a7a723158207a5d3c6d2366eb79ed02b3eba85b47da141d58c3e6517e0f1f03b4051e05c0a564736f6c63430005110032

Deployed Bytecode Sourcemap

1841:39039:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8959:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8959:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8959:45:0;;:::i;:::-;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;-1:-1:-1;;;;;8959:45:0;-1:-1:-1;;;;;8959:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2390:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2390:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;35293:346;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35293:346:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35293:346:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38437:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38437:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;38437:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35155:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35155:126:0;;;:::i;8837:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8837:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8837:41:0;-1:-1:-1;;;;;8837:41:0;;:::i;:::-;;;;-1:-1:-1;;;;;8837:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31195:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31195:128:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31195:128:0;;;;;;;;:::i;2070:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2070:27:0;;;:::i;:::-;;;;-1:-1:-1;;;;;2070:27:0;;;;;;;;;;;;;;28797:210;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28797:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28797:210:0;;;;;;;:::i;38724:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38724:103:0;;;:::i;8680:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8680:31:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8680:31:0;;:::i;33579:854::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33579:854:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33579:854:0;-1:-1:-1;;;;;33579:854:0;;:::i;5556:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5556:47:0;;;:::i;38627:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38627:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24102:952;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24102:952:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24102:952:0;;:::i;5680:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5680:26:0;;;:::i;8778:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8778:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8778:46:0;-1:-1:-1;;;;;8778:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;8885:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8885:61:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8885:61:0;-1:-1:-1;;;;;8885:61:0;;:::i;31331:526::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31331:526:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31331:526:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31331:526:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31331:526:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31331:526:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31331:526:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31331:526:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31331:526:0;;-1:-1:-1;31331:526:0;-1:-1:-1;31331:526:0;;;;:::i;32256:622::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32256:622:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32256:622:0;-1:-1:-1;;;;;32256:622:0;;:::i;5748:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5748:24:0;;;:::i;2672:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2672:32:0;;;:::i;14116:619::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14116:619:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14116:619:0;;;;;;;;:::i;38313:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38313:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38313:112:0;-1:-1:-1;;;;;38313:112:0;;:::i;36028:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36028:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36028:144:0;;;;;;;;;;:::i;8627:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8627:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8627:46:0;-1:-1:-1;;;;;8627:46:0;;:::i;35918:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35918:102:0;;;:::i;35796:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35796:110:0;;;:::i;40046:172::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40046:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40046:172:0;;:::i;2877:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2877:28:0;;;:::i;5908:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5908:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5908:41:0;;:::i;:::-;;;;;-1:-1:-1;;;;;5908:41:0;-1:-1:-1;;;;;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2599:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2599:33:0;;;:::i;13497:611::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13497:611:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;13497:611:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13497:611:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13497:611:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13497:611:0;;-1:-1:-1;13497:611:0;-1:-1:-1;13497:611:0;;:::i;2287:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2287:30:0;;;:::i;34792:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34792:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34792:166:0;;:::i;38530:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38530:89:0;;;:::i;16518:2252::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16518:2252:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16518:2252:0;;:::i;18833:1850::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18833:1850:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18833:1850:0;;;;;;;;;:::i;5812:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5812:35:0;;;:::i;34530:254::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34530:254:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34530:254:0;;:::i;12842:643::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12842:643:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12842:643:0;;;;;;;;:::i;40462:415::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40462:415:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40462:415:0;;;;;;;;:::i;2744:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2744:28:0;;;:::i;35647:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35647:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35647:137:0;;:::i;:::-;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35647:137:0;;;;;;;;;;;;;;;;2501:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2501:29:0;;;:::i;39075:959::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39075:959:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39075:959:0;;:::i;1984:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1984:27:0;;;:::i;5616:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5616:28:0;;;:::i;30714:469::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30714:469:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30714:469:0;-1:-1:-1;;;;;30714:469:0;;:::i;33001:570::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33001:570:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33001:570:0;;:::i;8720:51::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8720:51:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8720:51:0;-1:-1:-1;;;;;8720:51:0;;:::i;26005:1025::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26005:1025:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26005:1025:0;;:::i;20691:3403::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20691:3403:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20691:3403:0;;:::i;5501:48::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5501:48:0;;;:::i;25062:935::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25062:935:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25062:935:0;;:::i;10800:2030::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;10800:2030:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2158:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2158:64:0;;;:::i;5447:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5447:47:0;;;:::i;8959:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8959:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2390:31::-;;;;:::o;35293:346::-;-1:-1:-1;;;;;35416:22:0;;35391:4;35416:22;;;:7;:22;;;;;:29;-1:-1:-1;;;35416:29:0;;;;35449:1;35416:34;35408:57;;;;;-1:-1:-1;;;35408:57:0;;;;;;;;;;;;-1:-1:-1;;;35408:57:0;;;;;;;;;;;;;;;35500:13;:20;35484:36;;35476:59;;;;;-1:-1:-1;;;35476:59:0;;;;;;;;;;;;-1:-1:-1;;;35476:59:0;;;;;;;;;;;;;;;35563:9;:39;35573:13;35587;35573:28;;;;;;;;;;;;;;;;;;;;35563:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;35563:68:0;;;;:53;;:68;;;;;;;;;-1:-1:-1;35293:346:0;;;;;:::o;38437:85::-;38509:5;38502:12;;;;;;;;-1:-1:-1;;38502:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38476:13;;38502:12;;38509:5;;38502:12;;38509:5;38502:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38437:85;;:::o;35155:126::-;35204:7;35231:42;35258:14;;35231:22;35239:13;;35231:3;:7;;:22;;;;:::i;:::-;:26;:42;:26;:42;:::i;:::-;35224:49;;35155:126;:::o;8837:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8837:41:0;;;-1:-1:-1;;;8837:41:0;;;;;;;;:::o;31195:128::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;31284:31;31301:5;31308:6;31284:16;:31::i;:::-;-1:-1:-1;;1284:1:0;1598:7;:22;31195:128::o;2070:27::-;;;-1:-1:-1;;;;;2070:27:0;;:::o;28797:210::-;28893:10;28885:19;;;;:7;:19;;;;;:26;-1:-1:-1;;;28885:26:0;;;;28915:1;28885:31;28877:54;;;;;-1:-1:-1;;;28877:54:0;;;;;;;;;;;;-1:-1:-1;;;28877:54:0;;;;;;;;;;;;;;;28952:47;28962:10;28974:12;28988:10;28952:9;:47::i;:::-;28797:210;;:::o;38724:103::-;38810:9;;38796:11;;:23;38724:103;:::o;8680:31::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8680:31:0;;-1:-1:-1;8680:31:0;:::o;33579:854::-;33666:10;33687:1;33658:19;;;:7;:19;;;;;:26;;;33650:58;;;;;-1:-1:-1;;;33650:58:0;;;;;;;;;;;;-1:-1:-1;;;33650:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33727:28:0;;33719:62;;;;;-1:-1:-1;;;33719:62:0;;;;;;;;;;;;-1:-1:-1;;;33719:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33884:28:0;;33902:10;33884:28;33880:245;;-1:-1:-1;;;;;33937:23:0;;;;;;:7;:23;;;;;:30;-1:-1:-1;;;33937:30:0;;;;:35;33929:72;;;;;-1:-1:-1;;;33929:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34032:42:0;;;34024:51;34032:42;;;:26;:42;;;;;;;;;;;;34024:51;;:7;:51;;;:58;-1:-1:-1;;;34024:58:0;;;;:63;34016:97;;;;;-1:-1:-1;;;34016:97:0;;;;;;;;;;;;-1:-1:-1;;;34016:97:0;;;;;;;;;;;;;;;34169:10;34137:21;34161:19;;;:7;:19;;;;;;;;34218:18;;-1:-1:-1;;;;;34218:18:0;;;34191:46;;:26;:46;;;;;:59;;-1:-1:-1;;;;;;34191:59:0;;;;;;34261:42;;;;;;;;;;:55;;;;;;;;34327:35;;;;;;;34380:45;;;;;;;34161:19;;34169:10;34380:45;;;;;;;;;33579:854;;:::o;5556:47::-;5596:6;5556:47;:::o;38627:85::-;38695:9;;;;38627:85;:::o;24102:952::-;24179:45;24210:13;24179:30;:45::i;:::-;24237:18;24258:13;24272;24258:28;;;;;;;;;;;;;;;;;;;;;24325:21;;;:9;:21;;;;;;;24367:14;;;:17;24258:28;;-1:-1:-1;24325:21:0;-1:-1:-1;;;24367:17:0;;;;24388:1;24367:22;24359:57;;;;;-1:-1:-1;;;24359:57:0;;;;;;;;;;;;-1:-1:-1;;;24359:57:0;;;;;;;;;;;;;;;24429:14;;;:21;;-1:-1:-1;;24429:21:0;;;;;:17;24491:23;24500:13;24491:8;:23::i;:::-;24531:14;:21;24476:38;;-1:-1:-1;3352:3:0;-1:-1:-1;24527:98:0;;-1:-1:-1;24608:5:0;24527:98;24652:4;24641:15;;;;24637:207;;;24673:14;;;:21;;-1:-1:-1;;24673:21:0;;;;;24745;;;;;-1:-1:-1;;;;;24745:21:0;;;24673:17;24722:46;;;:14;24673:17;24722:46;;;;:53;;-1:-1:-1;;24722:53:0;24693:1;24722:53;;;;;;24810:21;;24790:14;27:10:-1;;23:18;;;45:23;;24790:42:0;;;;;;;;;24810:21;;;;-1:-1:-1;;;;;;24790:42:0;;;;;;;;;24637:207;24884:21;;;;-1:-1:-1;;;;;24884:21:0;;;24910:5;24856:51;;;:19;:51;;;;;:59;;-1:-1:-1;;24856:59:0;;;24943:16;;;;24928:32;;24943:16;24928:14;:32::i;:::-;24986:60;;;;;;;;;;25026:10;;25011:13;;24986:60;;;;;;;;;24102:952;;;;:::o;5680:26::-;;;;:::o;8778:46::-;;;;;;;;;;;;;;;:::o;8885:61::-;;;;;;;;;;;;-1:-1:-1;;;;;8885:61:0;;:::o;31331:526::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;31463:31;;;31455:71;;;;;-1:-1:-1;;;31455:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31544:9;31539:311;31557:17;;;31539:311;;;31596:22;31621:7;;31629:1;31621:10;;;;;;;;;;;;;31596:35;;31650:3;31646:133;;;31741:10;31723:29;;;;:17;:29;;;;;;31753:6;;31760:1;31753:9;;;;;;;;;;;;;-1:-1:-1;;;;;31753:9:0;-1:-1:-1;;;;;31723:40:0;-1:-1:-1;;;;;31723:40:0;;;;;;;;;;;;;31706:57;;31646:133;31795:43;31812:6;;31819:1;31812:9;;;;;;;;;;;;;-1:-1:-1;;;;;31812:9:0;31823:14;31795:16;:43::i;:::-;-1:-1:-1;31576:3:0;;31539:311;;;-1:-1:-1;;1284:1:0;1598:7;:22;-1:-1:-1;;;;31331:526:0:o;32256:622::-;-1:-1:-1;;;;;32381:31:0;;32314:23;32381:31;;;:24;;:31;;;:24;:31;;;;32340:38;;-1:-1:-1;;;32340:38:0;;32372:4;32340:38;;;;;;32314:23;;32381:31;;;;32340:23;;:38;;;;;;;;;;;32381:31;32340:38;;;5:2:-1;;;;30:1;27;20:12;5:2;32340:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32340:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32340:38:0;:72;;-1:-1:-1;32518:19:0;32510:41;;;;;-1:-1:-1;;;32510:41:0;;;;;;;;;;;;-1:-1:-1;;;32510:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32570:21:0;;;;;;:14;:21;;;;;;;;32562:49;;;;;-1:-1:-1;;;32562:49:0;;;;;;;;;;;;-1:-1:-1;;;32562:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32636:31:0;;:24;:31;;;-1:-1:-1;;;;;;;;;;;32636:24:0;:31;:24;:31;;;:36;:88;;;;;3447:3;32676:20;;:48;32636:88;32632:122;;;32727:20;:25;;32751:1;32727:25;;;32632:122;32764:49;5487:6;32790:5;32797:15;32764:18;:49::i;:::-;32831:39;;;;;;;;-1:-1:-1;;;;;32831:39:0;;;;;;;;;;;;;32256:622;;:::o;5748:24::-;;;;:::o;2672:32::-;;;;:::o;14116:619::-;14206:18;14237:20;;:::i;:::-;-1:-1:-1;;;;;;14260:21:0;;;;;;;:7;:21;;;;;;;;;14237:44;;;;;;;;;;;;;;-1:-1:-1;;;14237:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14302:17;;;:36;;;14337:1;14323:6;:11;;;:15;14302:36;14294:72;;;;;-1:-1:-1;;;14294:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14385:21:0;;;;;;:7;:21;;;;;:28;;;:33;14377:60;;;;;-1:-1:-1;;;14377:60:0;;;;;;;;;;;;-1:-1:-1;;;14377:60:0;;;;;;;;;;;;;;;14450:21;;:::i;:::-;14569:1;14558:8;;;:12;14597:85;;;14558:8;14597:85;;;;;14627:1;14597:85;;;;;14613:12;;14627:1;;;;;;;;;;;14663:7;;14558:5;;14597:15;:85::i;:::-;-1:-1:-1;;14710:13:0;;-1:-1:-1;;14710:17:0;;14116:619;-1:-1:-1;;;14116:619:0:o;38313:112::-;-1:-1:-1;;;;;38400:17:0;;38372:7;38400:17;;;:8;:17;;;;;;38313:112;;;;:::o;36028:144::-;-1:-1:-1;;;;;36134:23:0;;;36107:7;36134:23;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;;36028:144::o;8627:46::-;;;;;;;;;;;;;;;:::o;35918:102::-;35991:14;:21;35918:102;:::o;35796:110::-;35878:13;:20;35796:110;:::o;40046:172::-;40125:10;40117:19;;;;:7;:19;;;;;:26;;;:42;;;;;;;40170:24;;:40;;;;;;;40046:172::o;2877:28::-;;;;:::o;5908:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5908:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2599:33::-;;;;:::o;13497:611::-;13758:18;13799:21;;:::i;:::-;13918:1;13907:5;13913:1;13907:8;;;:12;;;;;;;;;;;13956:99;13972:8;13982:1;13985;13988;13999;14003:11;14024:1;14028:7;14037:5;14044:10;;13956:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13956:15:0;;-1:-1:-1;;;13956:99:0:i;:::-;-1:-1:-1;;14083:13:0;;-1:-1:-1;;14083:17:0;13497:611;;;;;;;:::o;2287:30::-;;;;:::o;34792:166::-;34869:4;34932:18;;34915:14;:35;34893:18;:16;:18::i;:::-;:57;;;34792:166;-1:-1:-1;;34792:166:0:o;38530:89::-;38604:7;38597:14;;;;;;;;-1:-1:-1;;38597:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38571:13;;38597:14;;38604:7;;38597:14;;38604:7;38597:14;;;;;;;;;;;;;;;;;;;;;;;;16518:2252;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;;;9129:10;9102:38;;:26;:38;;;;;;;;;-1:-1:-1;;;;;9102:38:0;9094:47;;:7;:47;;;;;9102:38;9094:54;;9086:83;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;;;;16733:12;;16787:15;;;16726:77;;;-1:-1:-1;;;16726:77:0;;16760:10;16726:77;;;;;;;16780:4;16726:77;;;;;;;;;;;;-1:-1:-1;;;;;16733:12:0;;;;16726:33;;:77;;;;;;;;;;;;;;;16733:12;;16726:77;;;5:2:-1;;;;30:1;27;20:12;5:2;16726:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16726:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16726:77:0;16718:105;;;;;-1:-1:-1;;;16718:105:0;;;;;;;;;;;;-1:-1:-1;;;16718:105:0;;;;;;;;;;;;;;;16861:12;;16875:15;;16834:57;;5542:6;;-1:-1:-1;;;;;16861:12:0;;;;16834:18;:57::i;:::-;16904:25;16932:21;;;:9;:21;;;;;16974:17;;;;-1:-1:-1;;;;;16974:17:0;16966:54;;;;;-1:-1:-1;;;16966:54:0;;;;;;;;;;;;-1:-1:-1;;;16966:54:0;;;;;;;;;;;;;;;17039:14;;;:17;;;:22;17031:52;;;;;-1:-1:-1;;;17031:52:0;;;;;;;;;;;;-1:-1:-1;;;17031:52:0;;;;;;;;;;;;;;;17102:14;;;:17;;;;;;:22;17094:44;;;;;-1:-1:-1;;;17094:44:0;;;;;;;;;;;;-1:-1:-1;;;17094:44:0;;;;;;;;;;;;;;;17165:18;;-1:-1:-1;;;;;17165:18:0;17157:27;;;;:7;:27;;;;;:34;;;:39;17149:68;;;;;-1:-1:-1;;;17149:68:0;;;;;;;;;;;;-1:-1:-1;;;17149:68:0;;;;;;;;;;;;;;;17260:1;17234:8;:23;;;:27;:83;;;;-1:-1:-1;17290:21:0;;;;-1:-1:-1;;;;;17290:21:0;17265:24;:47;;;-1:-1:-1;;;;;;;;;;;17265:24:0;:47;:24;:47;;;:52;17234:83;17230:192;;;3447:3;17342:20;;:48;17334:76;;;;;-1:-1:-1;;;17334:76:0;;;;;;;;;;;;-1:-1:-1;;;17334:76:0;;;;;;;;;;;;;;;17469:14;;;:17;-1:-1:-1;;;17469:17:0;;;;17490:1;17469:22;17465:625;;;17540:21;;;;-1:-1:-1;;;;;17540:21:0;17517:46;;;;:14;:46;;;;;;;;17516:47;17508:79;;;;;-1:-1:-1;;;17508:79:0;;;;;;;;;;;;-1:-1:-1;;;17508:79:0;;;;;;;;;;;;;;;17639:21;;;;-1:-1:-1;;;;;17639:21:0;17611:51;;;;:19;:51;;;;;;;;17610:52;17602:91;;;;;-1:-1:-1;;;17602:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17716:14;:21;3352:3;-1:-1:-1;17708:77:0;;;;;-1:-1:-1;;;17708:77:0;;;;;;;;;;;;-1:-1:-1;;;17708:77:0;;;;;;;;;;;;;;;17828:21;;;;-1:-1:-1;;;;;17828:21:0;17800:51;;;;:19;:51;;;;;:58;;-1:-1:-1;;17800:58:0;17854:4;17800:58;;;17465:625;;;17914:14;;;:17;;;;;;17935:1;17914:22;17910:180;;;17977:18;;-1:-1:-1;;;;;17977:18:0;17962:34;;;;:14;:34;;;;;;;;17961:35;17953:69;;;;;-1:-1:-1;;;17953:69:0;;;;;;;;;;;;-1:-1:-1;;;17953:69:0;;;;;;;;;;;;;;;18052:18;;-1:-1:-1;;;;;18052:18:0;18037:34;;;;:14;:34;;;;;:41;;-1:-1:-1;;18037:41:0;18074:4;18037:41;;;17910:180;18150:22;18175:159;18193:18;:16;:18::i;:::-;18226:13;:20;:25;:97;;18268:13;18282:20;;18258:9;;:50;;-1:-1:-1;;18282:24:0;;;18268:39;;;;;;;;;;;;;;18258:50;;;;;;;;;;;:65;;;18226:97;;;18254:1;18226:97;18175:3;:159::i;:::-;18337:1;18175:163;;;18351:23;;;:40;;;18455:10;18404:21;18428:38;;;:26;:38;;;;;;;;;18477:16;;;:32;;-1:-1:-1;;;;;;18477:32:0;-1:-1:-1;;;;;18428:38:0;;;18477:32;;;;;18522:14;;;:21;;-1:-1:-1;;18522:21:0;;;;;18610:13;27:10:-1;;23:18;;;45:23;;18610:30:0;;;;;;;;;;;18721:20;;18666:96;;;;;-1:-1:-1;;18721:24:0;;;18666:96;;;;;;;;;;;;;;;18175:163;;-1:-1:-1;18428:38:0;;18666:96;;;;;;;;;-1:-1:-1;;1284:1:0;1598:7;:22;-1:-1:-1;;16518:2252:0:o;18833:1850::-;9129:10;9151:1;9102:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;9102:38:0;9094:47;;:7;:47;;;;;9102:38;9094:54;;9086:83;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;-1:-1:-1;;;9086:83:0;;;;;;;;;;;;;;;18976:10;18925:21;18949:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;18949:38:0;19022:22;;;:7;:22;;;;;;19081:13;:20;19065:36;;19057:59;;;;;-1:-1:-1;;;19057:59:0;;;;;;;;;;;;-1:-1:-1;;;19057:59:0;;;;;;;;;;;;;;;19127:25;19155:9;:39;19165:13;19179;19165:28;;;;;;;;;;;;;;;;19155:39;;;;;;;;;;;19127:67;;19226:1;19215:8;:12;;;19207:32;;;;;-1:-1:-1;;;19207:32:0;;;;;;;;;;;;-1:-1:-1;;;19207:32:0;;;;;;;;;;;;;;;19250:9;19267:8;19262:14;;;;;;;;;;19250:26;;19319:8;:23;;;19297:18;:16;:18::i;:::-;:45;;19289:72;;;;;-1:-1:-1;;;19289:72:0;;;;;;;;;;;;-1:-1:-1;;;19289:72:0;;;;;;;;;;;;;;;19381:47;19404:8;:23;;;19381:22;:47::i;:::-;19380:48;19372:77;;;;;-1:-1:-1;;;19372:77:0;;;;;;;;;;;;-1:-1:-1;;;19372:77:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19468:37:0;;19509:9;19468:37;;;:22;;;:37;;;;;;;;:50;;;;;;;;;19460:75;;;;;-1:-1:-1;;;19460:75:0;;;;;;;;;;;;-1:-1:-1;;;19460:75:0;;;;;;;;;;;;;;;19562:8;19554:4;:16;;;;;;;;;:35;;;-1:-1:-1;19582:7:0;19574:4;:15;;;;;;;;;19554:35;19546:62;;;;;-1:-1:-1;;;19546:62:0;;;;;;;;;;;;-1:-1:-1;;;19546:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19621:37:0;;;;;;:22;;;:37;;;;;:44;;19661:4;;19621:37;-1:-1:-1;;19621:44:0;;19661:4;19621:44;;;;;;;;;;;;-1:-1:-1;19690:8:0;19682:4;:16;;;;;;;;;19678:722;;;19755:13;;;;19735:17;;;;;:33;;;19715:53;;19900:26;;;;19884:42;;19880:125;;;19947:26;;;:42;;;19880:125;20151:8;:39;;;20135:13;:11;:13::i;:::-;:55;20131:151;;;20253:13;:11;:13::i;:::-;20211:39;;;:55;20131:151;19678:722;;;20313:7;20305:4;:15;;;;;;;;;20301:99;;;20375:13;;;;20356:16;;;;;:32;;;20337:51;;20301:99;20651:13;-1:-1:-1;;;;;20583:92:0;20639:10;-1:-1:-1;;;;;20583:92:0;20624:13;20583:92;20594:13;20608;20594:28;;;;;;;;;;;;;;;;20666:8;20583:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;9180:1;;;;18833:1850;;:::o;5812:35::-;;;;:::o;34530:254::-;34648:13;:20;34601:4;;34626:42;;34618:71;;;;;-1:-1:-1;;;34618:71:0;;;;;;;;;;;;-1:-1:-1;;;34618:71:0;;;;;;;;;;;;;;;34717:9;:45;34727:13;34741:19;34727:34;;;;;;;;;;;;;;;;34717:45;;;;;;;;;;;:51;;34769:1;34717:54;;;;;;;;;;;;;;;;;;;;;;;;;:59;;34775:1;34717:59;34710:66;;34530:254;;;:::o;12842:643::-;12936:18;-1:-1:-1;;;;;12975:30:0;;12967:53;;;;;-1:-1:-1;;;12967:53:0;;;;;;;;;;;;-1:-1:-1;;;12967:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13040:32:0;;;;;;:14;:32;;;;;;;;13039:33;13031:65;;;;;-1:-1:-1;;;13031:65:0;;;;;;;;;;;;-1:-1:-1;;;13031:65:0;;;;;;;;;;;;;;;13115:14;:21;3352:3;-1:-1:-1;13107:77:0;;;;;-1:-1:-1;;;13107:77:0;;;;;;;;;;;;-1:-1:-1;;;13107:77:0;;;;;;;;;;;;;;;13197:21;;:::i;:::-;13316:1;13305:8;;;:12;13343:89;;;13305:8;13343:89;;;;;13367:1;13343:89;;;;;13367:1;;;;;;13380:16;;13367:1;;;;13413:7;;13305:5;;13343:15;:89::i;:::-;-1:-1:-1;;13460:13:0;;-1:-1:-1;;13460:17:0;12842:643;;;;:::o;40462:415::-;40577:10;40569:19;;;;:7;:19;;;;;:24;;;:44;;40598:14;40569:44;:28;:44;:::i;:::-;40550:10;40542:19;;;;:7;:19;;;;;;:24;;;;:71;;;;-1:-1:-1;;;;;40649:17:0;;;;;;:22;;:42;;40676:14;40649:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;40624:17:0;;;;;;:7;:17;;;;;;;;:22;;:67;;;;40721:10;40712:20;;;:8;:20;;;;;:38;;;;;;;40761:18;;;;;;;:36;;;;;;40823:46;;;;;;;40624:17;;40721:10;;40823:46;;;;;;;;;;40462:415;;:::o;2744:28::-;;;;:::o;35647:137::-;35714:15;;:::i;:::-;35749:21;;;;:9;:21;;;;;;35742:34;;;;;;;;;;35749:27;;;;;35742:34;;35749:27;;35742:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35742:34:0;;35647:137;-1:-1:-1;;;;;;;35647:137:0:o;2501:29::-;;;;:::o;39075:959::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;;;39160:12;;39153:68;;;-1:-1:-1;;;39153:68:0;;39187:10;39153:68;;;;39207:4;39153:68;;;;;;;;;;;;-1:-1:-1;;;;;39160:12:0;;;;39153:33;;:68;;;;;;;;;;;;;;;;;39160:12;39153:68;;;5:2:-1;;;;30:1;27;20:12;5:2;39153:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39153:68:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39153:68:0;39145:96;;;;;-1:-1:-1;;;39145:96:0;;;;;;;;;;;;-1:-1:-1;;;39145:96:0;;;;;;;;;;;;;;;39351:10;39343:19;;;;:7;:19;;;;;:26;-1:-1:-1;;;39343:26:0;;;;39373:1;39343:31;39339:288;;;39428:10;39420:19;;;;:7;:19;;;;;:26;;;:38;;39451:6;39420:38;:30;:38;:::i;:::-;39399:10;39391:19;;;;:7;:19;;;;;:26;;:67;39339:288;;;39577:34;39592:10;39604:6;39577:14;:34::i;:::-;39682;39697:10;39709:6;39682:14;:34::i;:::-;39727:11;:21;;;;;;;;3211:6;-1:-1:-1;39781:30:0;39773:54;;;;;-1:-1:-1;;;39773:54:0;;;;;;;;;;;;-1:-1:-1;;;39773:54:0;;;;;;;;;;;;;;;39869:12;;-1:-1:-1;;;;;39869:12:0;39844:24;:38;;;-1:-1:-1;;;;;;;;;;;39844:24:0;:38;:24;:38;;;:43;:95;;;;;3447:3;39891:20;;:48;39844:95;39840:129;;;39942:20;:25;;39966:1;39942:25;;;39840:129;40005:12;;39979:47;;5487:6;;-1:-1:-1;;;;;40005:12:0;40019:6;39979:18;:47::i;:::-;-1:-1:-1;1284:1:0;1598:7;:22;39075:959::o;1984:27::-;;;-1:-1:-1;;;;;1984:27:0;;:::o;5616:28::-;;;;:::o;30714:469::-;-1:-1:-1;;;;;30798:21:0;;30774;30798;;;:7;:21;;;;;30840:13;;;;30832:41;;;;;-1:-1:-1;;;30832:41:0;;;;;;;;;;;;-1:-1:-1;;;30832:41:0;;;;;;;;;;;;;;;30906:1;30892:6;:11;;;:15;30884:35;;;;;-1:-1:-1;;;30884:35:0;;;;;;;;;;;;-1:-1:-1;;;30884:35:0;;;;;;;;;;;;;;;31002:39;31014:6;:26;;;31002:11;:39::i;:::-;30994:129;;;;-1:-1:-1;;;30994:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31136:39;31146:12;31160:1;31163:6;:11;;;31136:9;:39::i;33001:570::-;33065:25;33093:21;;;:9;:21;;;;;33133:14;;;:17;;;:22;33125:61;;;;;-1:-1:-1;;;33125:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33205:14;;;:17;;;;;;:22;33197:61;;;;;-1:-1:-1;;;33197:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33291:17;;;;-1:-1:-1;;;;;33291:17:0;33277:10;:31;33269:65;;;;;-1:-1:-1;;;33269:65:0;;;;;;;;;;;;-1:-1:-1;;;33269:65:0;;;;;;;;;;;;;;;33347:14;;;:21;;-1:-1:-1;;33347:21:0;;;;;33367:1;33433:17;;;33362:1;33452:21;;;33475:23;;;;33402:97;;5542:6;;-1:-1:-1;;;;;33433:17:0;;;;33452:21;;;33402:22;:97::i;:::-;33525:38;;;33552:10;33525:38;;;;33540:10;;33525:38;;;;;;;;;;33001:570;;:::o;8720:51::-;;;;;;;;;;;;;;;:::o;26005:1025::-;26082:45;26113:13;26082:30;:45::i;:::-;26140:18;26161:13;26175;26161:28;;;;;;;;;;;;;;;;;;;;;26228:21;;;:9;:21;;;;;;;26270:14;;;:17;26161:28;;-1:-1:-1;26228:21:0;26270:17;;;;;26291:1;26270:22;26262:52;;;;;-1:-1:-1;;;26262:52:0;;;;;;;;;;;;-1:-1:-1;;;26262:52:0;;;;;;;;;;;;;;;26327:14;;;:21;;-1:-1:-1;;26327:21:0;;;;;:17;26389:23;26398:13;26389:8;:23::i;:::-;26374:38;-1:-1:-1;26440:4:0;26429:15;;;;26425:412;;;26461:14;;;:21;;-1:-1:-1;;26461:21:0;;;;;26540:18;;-1:-1:-1;;;;;26540:18:0;26461:17;26532:27;;;:7;26461:17;26532:27;;;;26574:13;;;:29;;;26481:1;26660:13;:17;26425:412;26864:18;;-1:-1:-1;;;;;26864:18:0;;;26886:5;26849:34;;;:14;:34;;;;;:42;;-1:-1:-1;;26849:42:0;;;26919:16;;;;26904:32;;26919:16;26904:14;:32::i;:::-;26962:60;;;;;;;;;;27002:10;;26987:13;;26962:60;;;;;;;;;26005:1025;;;;:::o;20691:3403::-;20759:45;20790:13;20759:30;:45::i;:::-;20817:18;20838:13;20852;20838:28;;;;;;;;;;;;;;;;;;;;;20905:21;;;:9;:21;;;;;;;20947:14;;;:17;20838:28;;-1:-1:-1;20905:21:0;-1:-1:-1;;;20947:17:0;;;;:22;:48;;;;-1:-1:-1;20973:14:0;;;:17;;;;;;:22;20947:48;:74;;;;-1:-1:-1;20999:14:0;;;:17;;;;;;:22;20947:74;20939:108;;;;;-1:-1:-1;;;20939:108:0;;;;;;;;;;;;-1:-1:-1;;;20939:108:0;;;;;;;;;;;;;;;21060:14;;;:21;;-1:-1:-1;;21060:21:0;;;;;:17;21122:23;21131:13;21122:8;:23::i;:::-;21107:38;;3211:6;21258:71;21306:8;:22;;;21258:43;21276:8;:24;;;21258:13;:11;:13::i;:::-;:17;:43;:17;:43;:::i;:71::-;:89;21254:137;;;-1:-1:-1;21374:5:0;21254:137;21576:21;;;;-1:-1:-1;;;;;21576:21:0;21551:24;:47;;;-1:-1:-1;;;;;;;;;;;21551:24:0;:47;:24;:47;;;21523:25;;;;:75;21519:123;;;-1:-1:-1;21625:5:0;21519:123;21793:1;21767:8;:23;;;:27;:83;;;;-1:-1:-1;21823:21:0;;;;-1:-1:-1;;;;;21823:21:0;21798:24;:47;;;-1:-1:-1;;;;;;;;;;;21798:24:0;:47;:24;:47;;;:52;21767:83;:136;;;;;3447:3;21854:20;;:49;;21767:136;21763:184;;;-1:-1:-1;21930:5:0;21763:184;22002:4;21991:15;;;;21987:1978;;;22023:14;;;:21;;-1:-1:-1;;22023:21:0;;;;;22174:18;;-1:-1:-1;;;;;22174:18:0;22023:17;22166:27;;;:7;22023:17;22166:27;;;;:34;-1:-1:-1;;;22166:34:0;;22023:21;22166:34;22043:1;22166:39;22162:471;;;22300:24;;;;22271:18;;-1:-1:-1;;;;;22271:18:0;;;22263:27;;;;:7;:27;;;;;;22271:18;22263:34;;;:61;;;22226:98;;;22413:22;;;;22386:18;;;;;22378:27;;;;;;:32;;;;:57;;;22343:92;;22162:471;;;22572:18;;22592:24;;;;22557:60;;-1:-1:-1;;;;;22572:18:0;;22557:14;:60::i;:::-;22716:18;;22763:22;;;;22736:24;;;;22701:85;;-1:-1:-1;;;;;22716:18:0;;22736:49;22701:14;:85::i;:::-;22816:24;;;;22801:11;:39;;;;;;;22868:22;;;;22855:9;:35;;;;;;;23074:21;;;;-1:-1:-1;;;;;23074:21:0;22801:11;23049:47;;;-1:-1:-1;;;;;;;;;;;23049:24:0;:47;:24;:47;;;:52;:83;;;;;23131:1;23105:8;:23;;;:27;23049:83;23045:149;;;23153:20;:25;;23177:1;23153:25;;;23045:149;23248:21;;;;23271:23;;;;23210:85;;5542:6;;5487;;-1:-1:-1;;;;;23248:21:0;;23210:22;:85::i;:::-;23340:18;;23360:21;;;;23383:25;;;;23310:99;;5487:6;;-1:-1:-1;;;;;23340:18:0;;;;23360:21;;;23310:22;:99::i;:::-;23568:21;;;;-1:-1:-1;;;;;23568:21:0;23543:24;:47;;;-1:-1:-1;;;;;;;;;;;23543:24:0;:47;:24;:47;;;:52;:85;;;;;23627:1;23599:8;:25;;;:29;23543:85;23539:151;;;23649:20;:25;;-1:-1:-1;;23649:25:0;;;23539:151;21987:1978;;;23887:17;;;;23906:21;;;;23929:23;;;;23856:97;;5542:6;;-1:-1:-1;;;;;23887:17:0;;;;23906:21;;;23856:22;:97::i;:::-;23992:16;;;;23977:32;;-1:-1:-1;;;;;23992:16:0;23977:14;:32::i;:::-;24035:51;;;;;;;;;;24066:10;;24051:13;;24035:51;;;;;;;;;20691:3403;;;;:::o;5501:48::-;5542:6;5501:48;:::o;25062:935::-;25139:12;25164:45;25195:13;25164:30;:45::i;:::-;25230:18;25251:13;25265;25251:28;;;;;;;;;;;;;;;;;;;;;25314:19;;;:7;:19;;;;;;25372:9;:21;;;;;;25422:14;;;:17;25251:28;;-1:-1:-1;25314:19:0;;25422:17;;;;;25443:1;25422:22;25414:54;;;;;-1:-1:-1;;;25414:54:0;;;;;;;;;;;;-1:-1:-1;;;25414:54:0;;;;;;;;;;;;;;;25481:14;;;:21;;-1:-1:-1;;25481:21:0;;;;;:17;25543:23;25552:13;25543:8;:23::i;:::-;25528:38;-1:-1:-1;25602:4:0;25591:15;;;;25587:315;;;25623:14;;;:21;;-1:-1:-1;;25623:21:0;;;;;25753:9;;25643:1;25774:12;;;;25753:47;;25638:1;25788:11;;;25753:47;;25623:17;;25729:20;;-1:-1:-1;;;;;25753:9:0;;;;25774:12;25788:11;;25753:47;;25788:11;;-1:-1:-1;;25753:47:0;;;;25623:21;25753:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;25714:86:0;;;;25823:7;25815:32;;;;;-1:-1:-1;;;25815:32:0;;;;;;;;;;;;-1:-1:-1;;;25815:32:0;;;;;;;;;;;;;;;25883:7;-1:-1:-1;25876:14:0;;-1:-1:-1;;;;;25876:14:0;25587:315;25927:62;;;;;;;;;;25969:10;;25954:13;;25927:62;;;;;;;;;25062:935;;;;;;;:::o;10800:2030::-;11120:18;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;3211:6;11159:34;:15;11179:13;11159:34;:19;:34;:::i;:::-;:53;;11151:77;;;;;-1:-1:-1;;;11151:77:0;;;;;;;;;;;;-1:-1:-1;;;11151:77:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11247:28:0;;;;;;:14;:28;;;;;;;;11239:69;;;;;-1:-1:-1;;;11239:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11327:28:0;;;;;;:14;:28;;;;;;;;11319:69;;;;;-1:-1:-1;;;11319:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11407:18:0;;5487:6;11407:18;;;;:41;;-1:-1:-1;;;;;;11429:19:0;;5542:6;11429:19;;11407:41;:63;;;;-1:-1:-1;;;;;;11452:18:0;;5596:6;11452:18;;11407:63;11399:98;;;;;-1:-1:-1;;;11399:98:0;;;;;;;;;;;;-1:-1:-1;;;11399:98:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11516:18:0;;;;;;:7;:18;;;;;:25;;;:30;11508:59;;;;;-1:-1:-1;;;11508:59:0;;;;;;;;;;;;-1:-1:-1;;;11508:59:0;;;;;;;;;;;;;;;11601:1;11584:14;:18;:65;;;;-1:-1:-1;;;;;;11606:38:0;;:24;:38;;;-1:-1:-1;;;;;;;;;;;11606:24:0;:38;:24;:38;;;:43;11584:65;11580:174;;;3447:3;11674:20;;:48;11666:76;;;;;-1:-1:-1;;;11666:76:0;;;;;;;;;;;;-1:-1:-1;;;11666:76:0;;;;;;;;;;;;;;;11922:4;;-1:-1:-1;;;;;11906:20:0;;;11922:4;;11906:20;:37;;;;;11942:1;11930:9;:13;11906:37;11902:474;;;11981:14;11968:9;:27;11960:56;;;;;-1:-1:-1;;;11960:56:0;;;;;;;;;;;;-1:-1:-1;;;11960:56:0;;;;;;;;;;;;;;;12037:4;;;;;;;;;-1:-1:-1;;;;;12037:4:0;-1:-1:-1;;;;;12031:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12031:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;12086:4:0;;:30;;12068:12;;-1:-1:-1;;;;;;12086:4:0;;;;-1:-1:-1;12102:9:0;;12068:12;12086:30;12068:12;12086:30;12102:9;12086:4;:30;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12067:49:0;;;12139:7;12131:35;;;;;-1:-1:-1;;;12131:35:0;;;;;;;;;;;;-1:-1:-1;;;12131:35:0;;;;;;;;;;;;;;;12187:4;;12181:46;;;-1:-1:-1;;;12181:46:0;;12210:4;12181:46;;;;12217:9;12181:46;;;;;;-1:-1:-1;;;;;12187:4:0;;;;12181:20;;:46;;;;;;;;;;;;;;;12187:4;;12181:46;;;5:2:-1;;;;30:1;27;20:12;5:2;12181:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12181:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11902:474:0;;-1:-1:-1;;11902:474:0;;12268:76;;;-1:-1:-1;;;12268:76:0;;12302:10;12268:76;;;;12322:4;12268:76;;;;;;;;;;;;-1:-1:-1;;;;;12268:33:0;;;;;:76;;;;;;;;;;;;;;-1:-1:-1;12268:33:0;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;12268:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12268:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12268:76:0;12260:104;;;;;-1:-1:-1;;;12260:104:0;;;;;;;;;;;;-1:-1:-1;;;12260:104:0;;;;;;;;;;;;;;;12396:56;5542:6;12423:12;12437:14;12396:18;:56::i;:::-;12465:21;;:::i;:::-;12575:140;12591:9;12602:15;12619:13;12634:14;12650:12;12664:16;12682:12;12696:7;12705:5;12575:140;;;;;;;;;;;;:15;:140::i;:::-;-1:-1:-1;;12743:13:0;;-1:-1:-1;;12743:17:0;1284:1;1598:7;:22;10800:2030;;-1:-1:-1;;;;;;;;10800:2030:0:o;2158:64::-;;;-1:-1:-1;;;;;2158:64:0;;:::o;5447:47::-;5487:6;5447:47;:::o;288:150::-;346:7;379:1;374;:6;;366:15;;;;;;-1:-1:-1;404:5:0;;;288:150::o;671:149::-;729:7;761:1;757;:5;749:14;;;;;;774:9;790:1;786;:5;;;;;;;671:149;-1:-1:-1;;;;671:149:0:o;31869:379::-;31972:10;31954:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31954:36:0;;;;;;;;;;:46;-1:-1:-1;31954:46:0;31946:79;;;;;-1:-1:-1;;;31946:79:0;;;;;;;;;;;;-1:-1:-1;;;31946:79:0;;;;;;;;;;;;;;;32054:42;;;-1:-1:-1;;;32054:42:0;;32077:10;32054:42;;;;;;;;;;;;-1:-1:-1;;;;;32054:22:0;;;;;:42;;;;;;;;;;;;;;-1:-1:-1;32054:22:0;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;32054:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32054:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32054:42:0;32046:70;;;;;-1:-1:-1;;;32046:70:0;;;;;;;;;;;;-1:-1:-1;;;32046:70:0;;;;;;;;;;;;;;;32127:52;32153:10;32165:5;32172:6;32127:25;:52::i;:::-;32205:35;;;-1:-1:-1;;;;;32205:35:0;;;;;;;;;;;;32214:10;;32205:35;;;;;;;;31869:379;;:::o;29015:1691::-;29119:33;29155:13;:11;:13::i;:::-;-1:-1:-1;;;;;29205:22:0;;29181:21;29205:22;;;:7;:22;;;;;29248:13;;;;29119:49;;-1:-1:-1;29205:22:0;29248:29;-1:-1:-1;29248:29:0;29240:61;;;;;-1:-1:-1;;;29240:61:0;;;;;;;;;;;;-1:-1:-1;;;29240:61:0;;;;;;;;;;;;;;;29335:10;29320:6;:11;;;:25;;29312:55;;;;;-1:-1:-1;;;29312:55:0;;;;;;;;;;;;-1:-1:-1;;;29312:55:0;;;;;;;;;;;;;;;29388:39;29400:6;:26;;;29388:11;:39::i;:::-;29380:129;;;;-1:-1:-1;;;29380:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29522:27;29552:28;:12;29569:10;29552:28;:16;:28;:::i;:::-;29634:13;;;:29;;;;;;;29674:11;;;:25;;;;;;;29522:58;-1:-1:-1;29710:50:0;29725:13;29522:58;29710:14;:50::i;:::-;29771:11;:27;;;;;;;29809:9;:23;;;;;;;29771:11;29845:787;29869:14;:21;29865:25;;29845:787;;;5487:6;29912:24;29949;;;:17;:24;;29974:14;:17;;29939:102;;-1:-1:-1;;;;;;;;;;;29949:24:0;29912;;29974:14;29989:1;;29974:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29974:17:0;29949:43;;;;;;;;;;;;;29994:19;30015:25;29939:9;:102::i;:::-;29912:129;-1:-1:-1;30060:20:0;;30056:565;;5487:6;30452:24;;;;:17;:24;;30477:14;:17;;30499:16;;-1:-1:-1;;;;;;;;;;;30452:24:0;;;30492:1;;30477:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30477:17:0;;;30452:43;;;;;;;;;;;;;;;:63;;;;;;;;;30534:32;;;;;:17;:32;;;;;;30567:14;:17;;30589:16;;30477:17;30567:14;30582:1;;30567:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30567:17:0;30534:51;;;;;;;;;;;;:71;;;;;;;30056:565;-1:-1:-1;29892:3:0;;29845:787;;;-1:-1:-1;30649:49:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30649:49:0;;;;;;;;;;;29015:1691;;;;;;:::o;27966:572::-;28078:13;:20;28062:36;;28054:65;;;;;-1:-1:-1;;;28054:65:0;;;;;;;;;;;;-1:-1:-1;;;28054:65:0;;;;;;;;;;;;;;;28130:24;;:::i;:::-;28157:9;:39;28167:13;28181;28167:28;;;;;;;;;;;;;;;;;;;;;28157:39;;;;;;;;;;;;;;;28130:66;;;;;;;;;-1:-1:-1;;;;;28130:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28157:39;;28130:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28286:17;;28265:18;;28239:8;:23;;;:44;:64;28217:18;:16;:18::i;:::-;:86;;28209:117;;;;;-1:-1:-1;;;28209:117:0;;;;;;;;;;;;-1:-1:-1;;;28209:117:0;;;;;;;;;;;;;;;28345:14;;;;:17;;;:22;;;28337:61;;;;;-1:-1:-1;;;28337:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28417:18;;;:79;;;28439:9;:43;28449:13;28479:1;28463:13;:17;28449:32;;;;;;;;;;;;;;;;28439:43;;;;;;;;;;;:49;;28489:1;28439:52;;;;;;;;;;;;;;;;;;;;;;;;;:57;;28495:1;28439:57;28417:79;28409:121;;;;;-1:-1:-1;;;28409:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27038:920;27102:12;27127:24;;:::i;:::-;27154:9;:39;27164:13;27178;27164:28;;;;;;;;;;;;;;;;;;;;;27154:39;;;;;;;;;;;;;;;27127:66;;;;;;;;;-1:-1:-1;;;;;27127:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27154:39;;27127:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27238:8;:16;;;27218:8;:17;;;:36;27214:83;;;27281:4;27271:14;;27214:83;27426:8;:39;;;27390:32;27408:13;;27390;:11;:13::i;:::-;:17;:32;:17;:32;:::i;:::-;27389:76;27385:124;;;27492:5;27482:15;;27385:124;27849:18;;-1:-1:-1;;;;;27841:27:0;;;;;:7;:27;;;;;:34;;;:39;27837:87;;27907:5;27897:15;;27837:87;-1:-1:-1;27038:920:0;;;:::o;28546:243::-;28650:12;;28664:16;;28607:74;;5542:6;;28638:10;;-1:-1:-1;;;;;28650:12:0;;28607:22;:74::i;:::-;28732:12;;28764:16;;28746:15;;28692:89;;5542:6;;28723:7;;-1:-1:-1;;;;;28732:12:0;;;;28746:34;28692:22;:89::i;:::-;28546:243;:::o;37571:193::-;-1:-1:-1;;;;;37664:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;37715:24;:31;;;;;;:41;;;;;;;37571:193::o;14747:1763::-;15115:24;;:::i;:::-;15142:595;;;;;;;;15178:9;-1:-1:-1;;;;;15142:595:0;;;;;15213:10;-1:-1:-1;;;;;15142:595:0;;;;;15256:1;-1:-1:-1;;;;;15142:595:0;;;;;15288:12;-1:-1:-1;;;;;15142:595:0;;;;;15330:12;-1:-1:-1;;;;;15142:595:0;;;;;15365:5;15142:595;;;;15403:15;15142:595;;;;15449:13;15142:595;;;;15496:16;15142:595;;;;15544:14;15142:595;;;;15590:1;15142:595;;;;15617:1;15142:595;;;;15643:1;15142:595;;;;15692:1;15142:595;;;;15718:7;15142:595;;;15115:622;;15794:8;:14;;;15809:1;15794:17;;;;;;;;;;;:22;;15815:1;15794:22;15790:277;;;15833:20;;:::i;:::-;-1:-1:-1;15856:135:0;;;;;;;;-1:-1:-1;;;;;15856:135:0;;;;;;;;;;;;;;;;;;16032:13;;-1:-1:-1;16024:22:0;;;:7;:22;;;;;;:31;;;;-1:-1:-1;;;;;;16024:31:0;;;;;;;;;;-1:-1:-1;16024:31:0;;;;;;;15856:135;;;;16024:31;;;;;;;;;:::i;:::-;-1:-1:-1;;;;15790:277:0;16097:13;;16087:24;;;;:9;:24;;;;;;;;;:35;;;;-1:-1:-1;;;;;;16087:35:0;;;-1:-1:-1;;;;;16087:35:0;;;;;;;;;;-1:-1:-1;16087:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16133:21;16157:26;:38;16184:10;-1:-1:-1;;;;;16157:38:0;-1:-1:-1;;;;;16157:38:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16157:38:0;16133:62;;16449:13;-1:-1:-1;;;;;16274:189:0;16437:10;-1:-1:-1;;;;;16274:189:0;16289:9;-1:-1:-1;;;;;16274:189:0;;16300:15;16317:13;16332:14;16348:12;16362:16;16380:12;16394:7;16403:5;16410:10;16422:13;;16274:189;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16274:189:0;-1:-1:-1;;;;;16274:189:0;;;;;;;;;;;-1:-1:-1;;;;;16274:189:0;-1:-1:-1;;;;;16274:189:0;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16274:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16274:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16484:13:0;:18;;16501:1;16484:18;;;-1:-1:-1;;;;;;;;;;14747:1763:0:o;35036:107::-;35094:7;35126:1;35121;:6;;:14;;35134:1;35121:14;;;35130:1;35121:14;35114:21;35036:107;-1:-1:-1;;;35036:107:0:o;126:150::-;184:7;216:5;;;240:6;;;;232:15;;;;;36754:805;-1:-1:-1;;;;;36948:37:0;;;36940:46;36948:37;;;:26;:37;;;;;;;;;;;;36940:46;;:7;:46;;;:53;;-1:-1:-1;;;36940:53:0;;;;36948:37;36940:58;36936:304;;;-1:-1:-1;;;;;37042:37:0;;;37015:24;37042:37;;;:26;:37;;;;;;;;;;;;37094:44;;;;;;:63;;-1:-1:-1;;;;;;37094:63:0;;;;;;;;37172:7;:25;;;;;;;:56;;;;;;;;;;36936:304;37281:208;;;;;;;;-1:-1:-1;;;;;37281:208:0;;;;;;37350:1;37281:208;;;;;;;;;;;;;-1:-1:-1;37281:208:0;;;;;;;;;;;;;;;;;;37260:18;;;:7;:18;;;;;:229;;;;;;37281:208;37260:229;-1:-1:-1;;;37260:229:0;-1:-1:-1;;;;37260:229:0;;;;-1:-1:-1;;;;;;37260:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37502:26;:37;;;;:49;;;;;;;;;;36754:805::o;40230:193::-;-1:-1:-1;;;;;40313:23:0;;;;;;:8;:23;;;;;;;;:33;;;;;;40372:43;;;;;;;;;;;;;;;;;;40230:193;;:::o;37776:211::-;37885:46;37911:4;37917:5;37924:6;37885:25;:46::i;:::-;37942:37;37961:2;37965:5;37972:6;37942:18;:37::i;:::-;37776:211;;;;:::o;37995:200::-;-1:-1:-1;;;;;38095:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;;38146:24;:31;;;;;;:41;;;;;;;;37995:200::o;38870:193::-;-1:-1:-1;;;;;38953:23:0;;;;;;:8;:23;;;;;;;;:33;;;;;;;39012:43;;;;;;;38953:23;;;39012:43;;;;;;;;;;;38870:193;;:::o;36292:450::-;36395:7;36423:23;36415:32;;;;;;36464:12;36460:31;;-1:-1:-1;36487:1:0;36480:8;;36460:31;36518:16;;;36528:6;36518:7;:16;:7;36551:14;;;;;:24;36547:129;;;36646:18;36639:4;:25;;;;;;36632:32;;;;;36547:129;36728:6;36706:18;36696:7;:28;;;;;;36695:39;;36292:450;-1:-1:-1;;;;;36292:450:0:o;450:213::-;508:7;532:6;528:47;;-1:-1:-1;562:1:0;555:8;;528:47;599:5;;;603:1;599;:5;:1;623:5;;;;;:10;615:19;;;;;1841:39039;;;;;;;;;;-1:-1:-1;;;;;1841:39039:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;1841:39039:0;;;-1:-1:-1;;1841:39039:0:o;:::-;;;;;;;;;-1:-1:-1;1841:39039:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;1841:39039:0;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1841:39039:0;;;-1:-1:-1;1841:39039:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1841:39039:0;;;-1:-1:-1;1841:39039:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1841:39039:0;;;;;;

Swarm Source

bzzr://7a5d3c6d2366eb79ed02b3eba85b47da141d58c3e6517e0f1f03b4051e05c0a5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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