ETH Price: $3,893.24 (+0.22%)

Token

ERC-20: Pixel (PIXEL)
 

Overview

Max Total Supply

2,011,393.521517946472818846 PIXEL

Holders

201

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
900 PIXEL

Value
$0.00
0x1eef9b7b06062f1786fd99aea49ade90cca4c516
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PixelV2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIXED
//  _____ _          _   _____            
// |  __ (_)        | | |_   _|           
// | |__) |__  _____| |   | |  _ __   ___ 
// |  ___/ \ \/ / _ \ |   | | | '_ \ / __|
// | |   | |>  <  __/ |  _| |_| | | | (__ 
// |_|   |_/_/\_\___|_| |_____|_| |_|\___| on Ethereum!
//
// Flung together by BoringCrypto during COVID-19 lockdown in 2021
// Project started on Polygon for 2 weeks and this is the migrated to Ethereum version
// The canvas starts where it left off on Polygon (as well as PIXEL balances and ambassador program info)
// This version has a lot of gas optimizations vs the Polygon one

// WARNING: No audits were done on this code...

// Stay safe! 

// Get your alpha here https://bit.ly/3icxSru

// File @boringcrypto/boring-solidity/contracts/libraries/[email protected]
// License-Identifier: MIT
pragma solidity 0.6.12;

/// @notice A library for performing overflow-/underflow-safe math,
/// updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math).
library BoringMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        require(b == 0 || (c = a * b) / b == a, "BoringMath: Mul Overflow");
    }

    function to128(uint256 a) internal pure returns (uint128 c) {
        require(a <= uint128(-1), "BoringMath: uint128 Overflow");
        c = uint128(a);
    }

    function to64(uint256 a) internal pure returns (uint64 c) {
        require(a <= uint64(-1), "BoringMath: uint64 Overflow");
        c = uint64(a);
    }

    function to32(uint256 a) internal pure returns (uint32 c) {
        require(a <= uint32(-1), "BoringMath: uint32 Overflow");
        c = uint32(a);
    }
}

/// @notice A library for performing overflow-/underflow-safe addition and subtraction on uint128.
library BoringMath128 {
    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }
}

/// @notice A library for performing overflow-/underflow-safe addition and subtraction on uint64.
library BoringMath64 {
    function add(uint64 a, uint64 b) internal pure returns (uint64 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }
}

/// @notice A library for performing overflow-/underflow-safe addition and subtraction on uint32.
library BoringMath32 {
    function add(uint32 a, uint32 b) internal pure returns (uint32 c) {
        require((c = a + b) >= b, "BoringMath: Add Overflow");
    }

    function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {
        require((c = a - b) <= a, "BoringMath: Underflow");
    }
}

// File @boringcrypto/boring-solidity/contracts/interfaces/[email protected]
// License-Identifier: MIT
pragma solidity 0.6.12;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /// @notice EIP 2612
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

// File @boringcrypto/boring-solidity/contracts/libraries/[email protected]
// License-Identifier: MIT
pragma solidity 0.6.12;

// solhint-disable avoid-low-level-calls

library BoringERC20 {
    bytes4 private constant SIG_SYMBOL = 0x95d89b41; // symbol()
    bytes4 private constant SIG_NAME = 0x06fdde03; // name()
    bytes4 private constant SIG_DECIMALS = 0x313ce567; // decimals()
    bytes4 private constant SIG_BALANCE_OF = 0x70a08231; // balanceOf(address)
    bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)
    bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256)

    function returnDataToString(bytes memory data) internal pure returns (string memory) {
        if (data.length >= 64) {
            return abi.decode(data, (string));
        } else if (data.length == 32) {
            uint8 i = 0;
            while(i < 32 && data[i] != 0) {
                i++;
            }
            bytes memory bytesArray = new bytes(i);
            for (i = 0; i < 32 && data[i] != 0; i++) {
                bytesArray[i] = data[i];
            }
            return string(bytesArray);
        } else {
            return "???";
        }
    }

    /// @notice Provides a safe ERC20.symbol version which returns '???' as fallback string.
    /// @param token The address of the ERC-20 token contract.
    /// @return (string) Token symbol.
    function safeSymbol(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_SYMBOL));
        return success ? returnDataToString(data) : "???";
    }

    /// @notice Provides a safe ERC20.name version which returns '???' as fallback string.
    /// @param token The address of the ERC-20 token contract.
    /// @return (string) Token name.
    function safeName(IERC20 token) internal view returns (string memory) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_NAME));
        return success ? returnDataToString(data) : "???";
    }

    /// @notice Provides a safe ERC20.decimals version which returns '18' as fallback value.
    /// @param token The address of the ERC-20 token contract.
    /// @return (uint8) Token decimals.
    function safeDecimals(IERC20 token) internal view returns (uint8) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_DECIMALS));
        return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
    }
    
    /// @notice Provides a gas-optimized balance check to avoid a redundant extcodesize check in addition to the returndatasize check.
    /// @param token The address of the ERC-20 token.
    /// @param to The address of the user to check.
    /// @return amount The token amount.
    function safeBalanceOf(IERC20 token, address to) internal view returns (uint256 amount) {
        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_BALANCE_OF, to));
        require(success && data.length >= 32, "BoringERC20: BalanceOf failed");
        amount = abi.decode(data, (uint256));
    } 

    /// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.
    /// Reverts on a failed transfer.
    /// @param token The address of the ERC-20 token.
    /// @param to Transfer tokens to.
    /// @param amount The token amount.
    function safeTransfer(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed");
    }

    /// @notice Provides a safe ERC20.transferFrom version for different ERC-20 implementations.
    /// Reverts on a failed transfer.
    /// @param token The address of the ERC-20 token.
    /// @param from Transfer tokens from.
    /// @param to Transfer tokens to.
    /// @param amount The token amount.
    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 amount
    ) internal {
        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed");
    }
}

// File @boringcrypto/boring-solidity/contracts/[email protected]
// License-Identifier: MIT
pragma solidity 0.6.12;

// Audit on 5-Jan-2021 by Keno and BoringCrypto
// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol
// Edited by BoringCrypto

contract BoringOwnableData {
    address public owner;
    address public pendingOwner;
}

contract BoringOwnable is BoringOwnableData {
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice `owner` defaults to msg.sender on construction.
    constructor() public {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    /// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner.
    /// Can only be invoked by the current `owner`.
    /// @param newOwner Address of the new owner.
    /// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`.
    /// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise.
    function transferOwnership(
        address newOwner,
        bool direct,
        bool renounce
    ) public onlyOwner {
        if (direct) {
            // Checks
            require(newOwner != address(0) || renounce, "Ownable: zero address");

            // Effects
            emit OwnershipTransferred(owner, newOwner);
            owner = newOwner;
            pendingOwner = address(0);
        } else {
            // Effects
            pendingOwner = newOwner;
        }
    }

    /// @notice Needs to be called by `pendingOwner` to claim ownership.
    function claimOwnership() public {
        address _pendingOwner = pendingOwner;

        // Checks
        require(msg.sender == _pendingOwner, "Ownable: caller != pending owner");

        // Effects
        emit OwnershipTransferred(owner, _pendingOwner);
        owner = _pendingOwner;
        pendingOwner = address(0);
    }

    /// @notice Only allows the `owner` to execute the function.
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }
}

// File @boringcrypto/boring-solidity/contracts/[email protected]
// License-Identifier: MIT
// Based on code and smartness by Ross Campbell and Keno
// Uses immutable to store the domain separator to reduce gas usage
// If the chain id changes due to a fork, the forked chain will calculate on the fly.
pragma solidity 0.6.12;

// solhint-disable no-inline-assembly

contract Domain {
    bytes32 private constant DOMAIN_SEPARATOR_SIGNATURE_HASH = keccak256("EIP712Domain(uint256 chainId,address verifyingContract)");
    // See https://eips.ethereum.org/EIPS/eip-191
    string private constant EIP191_PREFIX_FOR_EIP712_STRUCTURED_DATA = "\x19\x01";

    // solhint-disable var-name-mixedcase
    bytes32 private immutable _DOMAIN_SEPARATOR;
    uint256 private immutable DOMAIN_SEPARATOR_CHAIN_ID;    

    /// @dev Calculate the DOMAIN_SEPARATOR
    function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {
        return keccak256(
            abi.encode(
                DOMAIN_SEPARATOR_SIGNATURE_HASH,
                chainId,
                address(this)
            )
        );
    }

    constructor() public {
        uint256 chainId; assembly {chainId := chainid()}
        _DOMAIN_SEPARATOR = _calculateDomainSeparator(DOMAIN_SEPARATOR_CHAIN_ID = chainId);
    }

    /// @dev Return the DOMAIN_SEPARATOR
    // It's named internal to allow making it public from the contract that uses it by creating a simple view function
    // with the desired public name, such as DOMAIN_SEPARATOR or domainSeparator.
    // solhint-disable-next-line func-name-mixedcase
    function _domainSeparator() internal view returns (bytes32) {
        uint256 chainId; assembly {chainId := chainid()}
        return chainId == DOMAIN_SEPARATOR_CHAIN_ID ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId);
    }

    function _getDigest(bytes32 dataHash) internal view returns (bytes32 digest) {
        digest =
            keccak256(
                abi.encodePacked(
                    EIP191_PREFIX_FOR_EIP712_STRUCTURED_DATA,
                    _domainSeparator(),
                    dataHash
                )
            );
    }
}

// File @boringcrypto/boring-solidity/contracts/[email protected]
// License-Identifier: MIT
pragma solidity 0.6.12;


// solhint-disable no-inline-assembly
// solhint-disable not-rely-on-time

// Data part taken out for building of contracts that receive delegate calls
contract ERC20Data {
    /// @notice owner > balance mapping.
    mapping(address => uint256) public balanceOf;
    /// @notice owner > spender > allowance mapping.
    mapping(address => mapping(address => uint256)) public allowance;
    /// @notice owner > nonce mapping. Used in `permit`.
    mapping(address => uint256) public nonces;
}

abstract contract ERC20 is IERC20, Domain {
    /// @notice owner > balance mapping.
    mapping(address => uint256) public override balanceOf;
    /// @notice owner > spender > allowance mapping.
    mapping(address => mapping(address => uint256)) public override allowance;
    /// @notice owner > nonce mapping. Used in `permit`.
    mapping(address => uint256) public nonces;

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    /// @notice Transfers `amount` tokens from `msg.sender` to `to`.
    /// @param to The address to move the tokens.
    /// @param amount of the tokens to move.
    /// @return (bool) Returns True if succeeded.
    function transfer(address to, uint256 amount) public returns (bool) {
        // If `amount` is 0, or `msg.sender` is `to` nothing happens
        if (amount != 0 || msg.sender == to) {
            uint256 srcBalance = balanceOf[msg.sender];
            require(srcBalance >= amount, "ERC20: balance too low");
            if (msg.sender != to) {
                require(to != address(0), "ERC20: no zero address"); // Moved down so low balance calls safe some gas

                balanceOf[msg.sender] = srcBalance - amount; // Underflow is checked
                balanceOf[to] += amount;
            }
        }
        emit Transfer(msg.sender, to, amount);
        return true;
    }

    /// @notice Transfers `amount` tokens from `from` to `to`. Caller needs approval for `from`.
    /// @param from Address to draw tokens from.
    /// @param to The address to move the tokens.
    /// @param amount The token amount to move.
    /// @return (bool) Returns True if succeeded.
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public returns (bool) {
        // If `amount` is 0, or `from` is `to` nothing happens
        if (amount != 0) {
            uint256 srcBalance = balanceOf[from];
            require(srcBalance >= amount, "ERC20: balance too low");

            if (from != to) {
                uint256 spenderAllowance = allowance[from][msg.sender];
                // If allowance is infinite, don't decrease it to save on gas (breaks with EIP-20).
                if (spenderAllowance != type(uint256).max) {
                    require(spenderAllowance >= amount, "ERC20: allowance too low");
                    allowance[from][msg.sender] = spenderAllowance - amount; // Underflow is checked
                }
                require(to != address(0), "ERC20: no zero address"); // Moved down so other failed calls safe some gas

                balanceOf[from] = srcBalance - amount; // Underflow is checked
                balanceOf[to] += amount;
            }
        }
        emit Transfer(from, to, amount);
        return true;
    }

    /// @notice Approves `amount` from sender to be spend by `spender`.
    /// @param spender Address of the party that can draw from msg.sender's account.
    /// @param amount The maximum collective amount that `spender` can draw.
    /// @return (bool) Returns True if approved.
    function approve(address spender, uint256 amount) public override returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32) {
        return _domainSeparator();
    }

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 private constant PERMIT_SIGNATURE_HASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    /// @notice Approves `value` from `owner_` to be spend by `spender`.
    /// @param owner_ Address of the owner.
    /// @param spender The address of the spender that gets approved to draw from `owner_`.
    /// @param value The maximum collective amount that `spender` can draw.
    /// @param deadline This permit must be redeemed before this deadline (UTC timestamp in seconds).
    function permit(
        address owner_,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external override {
        require(owner_ != address(0), "ERC20: Owner cannot be 0");
        require(block.timestamp < deadline, "ERC20: Expired");
        require(
            ecrecover(_getDigest(keccak256(abi.encode(PERMIT_SIGNATURE_HASH, owner_, spender, value, nonces[owner_]++, deadline))), v, r, s) ==
                owner_,
            "ERC20: Invalid Signature"
        );
        allowance[owner_][spender] = value;
        emit Approval(owner_, spender, value);
    }
}

contract ERC20WithSupply is IERC20, ERC20 {
    uint256 public override totalSupply;

    function _mint(address user, uint256 amount) internal {
        uint256 newTotalSupply = totalSupply + amount;
        require(newTotalSupply >= totalSupply, "Mint overflow");
        totalSupply = newTotalSupply;
        balanceOf[user] += amount;
        emit Transfer(address(0), user, amount);
    }

    function _burn(address user, uint256 amount) internal {
        require(balanceOf[user] >= amount, "Burn too much");
        totalSupply -= amount;
        balanceOf[user] -= amount;
        emit Transfer(user, address(0), amount);
    }
}

// File contracts/Pixel.sol
//License-Identifier: MIT
pragma solidity ^0.6.12;
pragma experimental ABIEncoderV2;

// solhint-disable avoid-low-level-calls

contract AddressList {
    address[] public addresses;
    function addressesCount() public view returns (uint256) { return addresses.length; }

    constructor() public {
        addresses.push(address(0));
    }

    function addAddresses(
        address[] calldata addresses_
    ) public {
        for (uint256 i = 0; i < addresses_.length; i++) { addresses.push(addresses_[i]); }
    }

    function getAddresses() public view returns (address[] memory) { return addresses; }
    function getAddressesRange(
        uint256 start,
        uint256 end
    ) public view returns (address[] memory) {
        address[] memory result = new address[](end - start);
        for (uint256 i = start; i < (end == 0 ? addresses.length : end); i++)
        {
            result[i - start] = addresses[i];
        }
        return result; 
    }
}

// Simple Multi Level Marketing contract with 3 tiers
contract MLM is AddressList {
    using BoringMath for uint256;

    struct RepInfo {
        uint32 upline;
        uint32 earnings1;
        uint32 earnings2;
        uint32 earnings3;
        uint16 tier1;
        uint16 tier2;
        uint16 tier3;
    }
    mapping (address => RepInfo) public mlm;

    event MLMAddRep(address rep, address upline);
    event MLMEarn(address rep, uint32 amount, uint8 lvl);

    function _set(address rep, uint32 upline_, uint32 earnings1, uint32 earnings2, uint32 earnings3, uint16 tier1, uint16 tier2, uint16 tier3) internal {
        mlm[rep] = RepInfo({
            upline: upline_,
            earnings1: earnings1,
            earnings2: earnings2,
            earnings3: earnings3,
            tier1: tier1,
            tier2: tier2,
            tier3: tier3
        });
    }

    function _mlm(address rep, uint32 upline_, uint32 earnings1, uint32 earnings2, uint32 earnings3) internal returns (address lvl1, address lvl2, address lvl3) {
        RepInfo memory info = mlm[rep];
        bool added;
        if (info.upline == 0) {
            if (upline_ != 0) {
                lvl1 = addresses[upline_];
                require(rep != lvl1, "MLM: Can't refer yourself");

                if (lvl1 != address(0)) {
                    info.upline = upline_;
                    mlm[rep] = info;
                    emit MLMAddRep(rep, lvl1);
                    added = true;
                }
            }
        } else {
            lvl1 = addresses[info.upline];
        }

        if (lvl1 != address(0)) {
            RepInfo memory info1 = mlm[lvl1];
            if (added) {
                info1.tier1++;
                info1.tier2 += info.tier1;
                info1.tier3 += info.tier2;
            }
            info1.earnings1 += earnings1;
            emit MLMEarn(lvl1, earnings1, 1);
            mlm[lvl1] = info1;
            if (info1.upline != 0) {
                lvl2 = addresses[info1.upline];
                RepInfo memory info2 = mlm[lvl2];
                if (added) {
                    info2.tier2++;
                    info2.tier3 += info.tier1;
                }
                info2.earnings2 += earnings2;
                emit MLMEarn(lvl2, earnings2, 2);
                mlm[lvl2] = info2;
                if (info2.upline != 0) {
                    lvl3 = addresses[info2.upline];
                    RepInfo memory info3 = mlm[lvl3];
                    if (added) {
                        info3.tier3++;
                    }
                    info3.earnings3 += earnings3;
                    emit MLMEarn(lvl3, earnings3, 3);
                    mlm[lvl3] = info3;
                }
            }
        }
    }
}

contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() internal {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, 'ReentrancyGuard: reentrant call');
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

contract PixelV2 is ERC20WithSupply, BoringOwnable, MLM, ReentrancyGuard {
    using BoringMath for uint256;
    using BoringERC20 for IERC20;

    event PixelBlockTransfer(address from, address to, uint256 pricePerPixel);

    string public constant symbol = "PIXEL";
    string public constant name = "Pixel";
    uint8 public constant decimals = 18;
    uint256 private constant START_BLOCK_PRICE = 5e15; // Price starts at 0.00005 ETH/pixel = 0.005 ETH/block
    uint256 public START_TIMESTAMP;
    uint256 public LOCK_TIMESTAMP;
    
    // Block info compressed into a single storage slot
    struct Block {
        uint32 owner; // current owner nr of the block
        uint32 url; // Data nr for url
        uint32 description; // Data nr for description
        uint32 pixels; // Data nr for pixels
        uint128 lastPrice; // last sale price - 0 = never sold
    }

    struct ExportBlock {
        address owner; // current owner of the block
        string url; // url for this block (should be < 256 characters)
        string description; // description for this block (should be < 256 characters)
        bytes pixels; // pixels as bytes
        uint128 lastPrice; // last sale price - 0 = never sold
        uint32 number;
    }

    struct ExportRawBlock {
        uint32 owner; // current owner nr of the block
        uint32 url; // Data nr for url
        uint32 description; // Data nr for description
        uint32 pixels; // Data nr for pixels
        uint128 lastPrice; // last sale price - 0 = never sold
        uint32 number;
    }

    // lookup tables
    bytes[] public data;
    string[] public text;

    function dataCount() public view returns (uint256) { return data.length; }
    function textCount() public view returns (uint256) { return text.length; }

    // data is organized in blocks of 10x10. There are 100x100 blocks. Base is 0 and counting goes left to right, then top to bottom.
    Block[10000] public blk;
    uint256[] public updates;

    constructor() public payable {
        // Set data[0] to blank
        text.push("");
        data.push(bytes(""));
    }

    modifier onlyCreationPhase() {
        require(block.timestamp >= START_TIMESTAMP && block.timestamp < LOCK_TIMESTAMP, "Not in creation phase");
        _;
    }

    function getBlocks(uint256[] calldata blockNumbers) public view returns (ExportBlock[] memory blocks) {
        blocks = new ExportBlock[](blockNumbers.length);
        for (uint256 i = 0; i < blockNumbers.length; i++) {
            Block memory _blk = blk[blockNumbers[i]];
            blocks[i].number = blockNumbers[i].to32();
            blocks[i].owner = addresses[_blk.owner];
            blocks[i].url = text[_blk.url];
            blocks[i].description = text[_blk.description];
            blocks[i].pixels = data[_blk.pixels];
            blocks[i].lastPrice = _blk.lastPrice;
        }
    }

    function getRawBlocks(uint256[] calldata blockNumbers) public view returns (ExportRawBlock[] memory blocks) {
        blocks = new ExportRawBlock[](blockNumbers.length);
        for (uint256 i = 0; i < blockNumbers.length; i++) {
            Block memory _blk = blk[blockNumbers[i]];
            blocks[i].number = blockNumbers[i].to32();
            blocks[i].owner = _blk.owner;
            blocks[i].url = _blk.url;
            blocks[i].description = _blk.description;
            blocks[i].pixels = _blk.pixels;
            blocks[i].lastPrice = _blk.lastPrice;
        }
    }

    function updatesCount() public view returns (uint256) {
        return updates.length;
    }

    function getUpdates(uint256 since, uint256 max) public view returns (uint256[] memory updatesSince) {
        uint256 length = updates.length - since;
        if (length > max) { 
            length = max; 
        }
        updatesSince = new uint256[](length);
        for (uint256 i = 0; i < length; i++) {
            updatesSince[i] = updates[since + i];
        }
    }

    function addText(
        string[] calldata text_
    ) public {
        for (uint256 i = 0; i < text_.length; i++) { text.push(text_[i]); }
    }

    function addData(
        bytes[] calldata data_
    ) public {
        for (uint256 i = 0; i < data_.length; i++) { data.push(data_[i]); }
    }

    function getText() public view returns (string[] memory) { return text; }
    function getTextRange(
        uint256 start,
        uint256 end
    ) public view returns (string[] memory) {
        string[] memory result = new string[](end - start);
        for (uint256 i = start; i < (end == 0 ? text.length : end); i++)
        {
            result[i - start] = text[i];
        }
        return result; 
    }

    function getDataRange(
        uint256 start,
        uint256 end
    ) public view returns (bytes[] memory) {
        bytes[] memory result = new bytes[](end - start);
        for (uint256 i = start; i < (end == 0 ? data.length : end); i++)
        {
            result[i - start] = data[i];
        }
        return result; 
    }

    function mint(address[] calldata to, uint256[] calldata amount) public onlyOwner {
        require(START_TIMESTAMP == 0, "Initialization finished");
        for (uint256 i = 0; i < to.length; i++) {
            _mint(to[i], amount[i]);
        }
    }

    function initMLM(
        address[] memory reps,
        uint32[] memory upline,
        uint32[] memory earn1,
        uint32[] memory earn2,
        uint32[] memory earn3,
        uint16[] memory tier1,
        uint16[] memory tier2,
        uint16[] memory tier3
    ) public onlyOwner {
        require(START_TIMESTAMP == 0, "Initialization finished");
        for (uint256 i = 0; i < reps.length; i++) {
            _set(reps[i], upline[i], earn1[i], earn2[i], earn3[i], tier1[i], tier2[i], tier3[i]);
        }
    }

    function initBlocks(
        uint256[] calldata blockNumbers,
        uint128[] calldata lastPrice,
        uint32[] calldata ownerNr,
        uint32[] calldata urlNr,
        uint32[] calldata descriptionNr,
        uint32[] calldata pixelsNr
    ) public onlyOwner {
        require(START_TIMESTAMP == 0, "Initialization finished");

        for (uint256 i = 0; i < blockNumbers.length; i++) {
            uint256 blockNumber = blockNumbers[i];

            blk[blockNumber] = Block({
                owner: ownerNr[i],
                url: urlNr[i],
                description: descriptionNr[i],
                pixels: pixelsNr[i],
                lastPrice: lastPrice[i]
            });
        }
    }

    function finishInit() public onlyOwner {
        START_TIMESTAMP = block.timestamp + 2 hours;
        LOCK_TIMESTAMP = block.timestamp + 14 days + 2 hours;
        updates.push(10000); // Update of 10000 means: update all blocks from 0 to 9999
    }

    function _setBlock(
        uint256 blockNumber,
        uint32 ownerNr,
        uint32 urlNr,
        uint32 descriptionNr,
        uint32 pixelsNr
    ) private returns(uint256 blockCost) {
        require(pixelsNr < data.length, "Wrong pixelNr");

        Block memory block_ = blk[blockNumber];
        // Forward a maximum of 20000 gas to the previous owner for accepting the refund to avoid griefing attacks
        bool success;
        address previousOwner = addresses[block_.owner];
        uint256 lastPrice = block_.lastPrice;
        (success, ) = previousOwner.call{value: lastPrice, gas: 20000}("");

        blockCost = lastPrice == 0 ? START_BLOCK_PRICE : lastPrice.mul(2);

        block_.owner = ownerNr;
        block_.url = urlNr;
        block_.description = descriptionNr;
        block_.lastPrice = blockCost.to128();
        block_.pixels = pixelsNr;
        blk[blockNumber] = block_;

        updates.push(blockNumber);

        emit PixelBlockTransfer(previousOwner, addresses[ownerNr], blockCost);
    }

    function setBlocks(
        address owner,
        uint32 ownerNr,

        string memory url,
        uint32 urlNr,

        string memory description,
        uint32 descriptionNr,

        uint256[] memory blockNumbers,
        bytes[] memory pixels,
        // Positive numbers refer to existing data. Negative numbers refer to the index in the passed in pixels array
        int32[] memory pixelsNr,
        address referrer,
        uint32 referrerNr
    ) public payable onlyCreationPhase() nonReentrant() {
        if (ownerNr == uint32(-1)) {
            ownerNr = addresses.length.to32();
            addresses.push(owner);
        }
        require(ownerNr < addresses.length, "Wrong owner");

        if (urlNr == uint32(-1)) {
            urlNr = text.length.to32();
            text.push(url);
        }
        require(urlNr < text.length, "Wrong url");

        if (descriptionNr == uint32(-1)) {
            descriptionNr = text.length.to32();
            text.push(description);
        }
        require(descriptionNr < text.length, "Wrong description");

        if (referrerNr == uint32(-1)) {
            referrerNr = addresses.length.to32();
            addresses.push(referrer);
        }
        require(referrerNr < addresses.length, "Wrong referrer");

        uint256 startPixelNr = data.length;
        for (uint256 i = 0; i < pixels.length; i++) { data.push(pixels[i]); }

        uint256 cost;
        for (uint256 i = 0; i < blockNumbers.length; i++) {
            cost = cost.add(_setBlock(blockNumbers[i], ownerNr, urlNr, descriptionNr, (pixelsNr[i] >=0 ? uint256(pixelsNr[i]) : startPixelNr + uint256(-1-pixelsNr[i])).to32()));
        }

        require(msg.value == cost, "Pixel: not enough funds");

        // Mint a PIXEL token for each pixel bought
        uint256 blocks = blockNumbers.length;
        (address lvl1, address lvl2, address lvl3) = _mlm(msg.sender, referrerNr, blocks.mul(20).to32(), blocks.mul(10).to32(), blocks.mul(5).to32());

        _mint(msg.sender, blocks.mul(100e18));
        if (lvl1 != address(0)) { _mint(lvl1, blocks.mul(20e18)); }
        if (lvl2 != address(0)) { _mint(lvl2, blocks.mul(10e18)); }
        if (lvl3 != address(0)) { _mint(lvl3, blocks.mul(5e18)); }
    }

    function getCost(uint256 blockNumber) public view returns (uint256 cost) {
        uint256 last = blk[blockNumber].lastPrice;
        cost = last == 0 ? START_BLOCK_PRICE : last.mul(2);
    }

    function getCost(uint256[] calldata blockNumbers) public view returns (uint256 cost) {
        for (uint256 i = 0; i < blockNumbers.length; i++) {
            cost = cost.add(getCost(blockNumbers[i]));
        }
    }

    function withdraw(IERC20 token) public onlyOwner {
        if (token != IERC20(0)) {
            // Withdraw any accidental token deposits
            token.safeTransfer(owner, token.balanceOf(address(this)));
        } else {
            bool success;
            (success, ) = owner.call{value: address(this).balance}("");
        }
    }

    function poll(address user) public view returns (uint256 updates_, uint256 addresses_, uint256 text_, uint256 data_, uint256 balance, uint256 supply, RepInfo memory mlm_, address upline_) {
        updates_ = updates.length;
        addresses_ = addresses.length;
        text_ = text.length;
        data_ = data.length;
        balance = balanceOf[user];
        supply = totalSupply;
        mlm_ = mlm[user];
        upline_ = addresses[mlm[user].upline];
    }

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"rep","type":"address"},{"indexed":false,"internalType":"address","name":"upline","type":"address"}],"name":"MLMAddRep","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"rep","type":"address"},{"indexed":false,"internalType":"uint32","name":"amount","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"lvl","type":"uint8"}],"name":"MLMEarn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"pricePerPixel","type":"uint256"}],"name":"PixelBlockTransfer","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":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCK_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"START_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"}],"name":"addAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data_","type":"bytes[]"}],"name":"addData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"text_","type":"string[]"}],"name":"addText","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blk","outputs":[{"internalType":"uint32","name":"owner","type":"uint32"},{"internalType":"uint32","name":"url","type":"uint32"},{"internalType":"uint32","name":"description","type":"uint32"},{"internalType":"uint32","name":"pixels","type":"uint32"},{"internalType":"uint128","name":"lastPrice","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"data","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dataCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishInit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getAddressesRange","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"blockNumbers","type":"uint256[]"}],"name":"getBlocks","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"bytes","name":"pixels","type":"bytes"},{"internalType":"uint128","name":"lastPrice","type":"uint128"},{"internalType":"uint32","name":"number","type":"uint32"}],"internalType":"struct PixelV2.ExportBlock[]","name":"blocks","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getCost","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"blockNumbers","type":"uint256[]"}],"name":"getCost","outputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getDataRange","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"blockNumbers","type":"uint256[]"}],"name":"getRawBlocks","outputs":[{"components":[{"internalType":"uint32","name":"owner","type":"uint32"},{"internalType":"uint32","name":"url","type":"uint32"},{"internalType":"uint32","name":"description","type":"uint32"},{"internalType":"uint32","name":"pixels","type":"uint32"},{"internalType":"uint128","name":"lastPrice","type":"uint128"},{"internalType":"uint32","name":"number","type":"uint32"}],"internalType":"struct PixelV2.ExportRawBlock[]","name":"blocks","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getText","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getTextRange","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"since","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"getUpdates","outputs":[{"internalType":"uint256[]","name":"updatesSince","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"blockNumbers","type":"uint256[]"},{"internalType":"uint128[]","name":"lastPrice","type":"uint128[]"},{"internalType":"uint32[]","name":"ownerNr","type":"uint32[]"},{"internalType":"uint32[]","name":"urlNr","type":"uint32[]"},{"internalType":"uint32[]","name":"descriptionNr","type":"uint32[]"},{"internalType":"uint32[]","name":"pixelsNr","type":"uint32[]"}],"name":"initBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"reps","type":"address[]"},{"internalType":"uint32[]","name":"upline","type":"uint32[]"},{"internalType":"uint32[]","name":"earn1","type":"uint32[]"},{"internalType":"uint32[]","name":"earn2","type":"uint32[]"},{"internalType":"uint32[]","name":"earn3","type":"uint32[]"},{"internalType":"uint16[]","name":"tier1","type":"uint16[]"},{"internalType":"uint16[]","name":"tier2","type":"uint16[]"},{"internalType":"uint16[]","name":"tier3","type":"uint16[]"}],"name":"initMLM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mlm","outputs":[{"internalType":"uint32","name":"upline","type":"uint32"},{"internalType":"uint32","name":"earnings1","type":"uint32"},{"internalType":"uint32","name":"earnings2","type":"uint32"},{"internalType":"uint32","name":"earnings3","type":"uint32"},{"internalType":"uint16","name":"tier1","type":"uint16"},{"internalType":"uint16","name":"tier2","type":"uint16"},{"internalType":"uint16","name":"tier3","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"poll","outputs":[{"internalType":"uint256","name":"updates_","type":"uint256"},{"internalType":"uint256","name":"addresses_","type":"uint256"},{"internalType":"uint256","name":"text_","type":"uint256"},{"internalType":"uint256","name":"data_","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"components":[{"internalType":"uint32","name":"upline","type":"uint32"},{"internalType":"uint32","name":"earnings1","type":"uint32"},{"internalType":"uint32","name":"earnings2","type":"uint32"},{"internalType":"uint32","name":"earnings3","type":"uint32"},{"internalType":"uint16","name":"tier1","type":"uint16"},{"internalType":"uint16","name":"tier2","type":"uint16"},{"internalType":"uint16","name":"tier3","type":"uint16"}],"internalType":"struct MLM.RepInfo","name":"mlm_","type":"tuple"},{"internalType":"address","name":"upline_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint32","name":"ownerNr","type":"uint32"},{"internalType":"string","name":"url","type":"string"},{"internalType":"uint32","name":"urlNr","type":"uint32"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"descriptionNr","type":"uint32"},{"internalType":"uint256[]","name":"blockNumbers","type":"uint256[]"},{"internalType":"bytes[]","name":"pixels","type":"bytes[]"},{"internalType":"int32[]","name":"pixelsNr","type":"int32[]"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint32","name":"referrerNr","type":"uint32"}],"name":"setBlocks","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"textCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"updates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updatesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040524660a081905262000015816200013d565b60805250600480546001600160a01b031916339081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36006805460018181019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191690556008819055600c805491820181556000908152604080516020810191829052829052620000e5927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7019162000193565b506040805160208101918290526000808252600b80546001810182559152905162000136927f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9909201919062000193565b506200024e565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218823060405160200162000176939291906200022f565b604051602081830303815290604052805190602001209050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d657805160ff191683800117855562000206565b8280016001018555821562000206579182015b8281111562000206578251825591602001919060010190620001e9565b506200021492915062000218565b5090565b5b8082111562000214576000815560010162000219565b92835260208301919091526001600160a01b0316604082015260600190565b60805160a051615ab96200027260003980612bc4525080612bf95250615ab96000f3fe60806040526004361061031e5760003560e01c80636ac1c5a6116101a5578063a9059cbb116100ec578063e467f7e011610095578063e86f99321161006f578063e86f9932146108d8578063edf26d9b146108f8578063ee687c7514610918578063f0ba84401461092d5761031e565b8063e467f7e014610870578063e6720c4414610890578063e863ec5e146108c35761031e565b8063dd62ed3e116100c6578063dd62ed3e14610819578063e00fe2eb14610839578063e30c39781461085b5761031e565b8063a9059cbb146107b9578063b4c2f727146107d9578063d505accf146107f95761031e565b80638a6c5ec51161014e5780639a11c0dd116101285780639a11c0dd1461077c578063a39fac121461078f578063a58277e4146107a45761031e565b80638a6c5ec5146107255780638da5cb5b1461074557806395d89b41146107675761031e565b8063781cd99d1161017f578063781cd99d146106bf5780637b46a39c146106d45780637ecebe00146107055761031e565b80636ac1c5a6146106455780636f6fcb721461067257806370a082311461069f5761031e565b80633628731c1161026957806354328c0e116102125780635da40c47116101ec5780635da40c47146105f0578063616f993414610605578063697f92f4146106255761031e565b806354328c0e146105765780635a4dd47d146105a35780635ad6fbc1146105c35761031e565b806342966c681161024357806342966c68146105215780634e71e0c81461054157806351cff8d9146105565761031e565b80633628731c146104cc5780633644e515146104ec5780633f9b80db146105015761031e565b806318160ddd116102cb5780632bd4c1b7116102a55780632bd4c1b714610449578063313ce5671461047657806332985bf4146104985761031e565b806318160ddd146103ff5780631bb6082a1461041457806323b872dd146104295761031e565b806308a32d8c116102fc57806308a32d8c14610390578063095ea7b3146103b257806310bb7050146103df5761031e565b806305d748de1461032357806306fdde0314610345578063078dfbe714610370575b600080fd5b34801561032f57600080fd5b5061034361033e3660046149d6565b61094d565b005b34801561035157600080fd5b5061035a6109a4565b6040516103679190615285565b60405180910390f35b34801561037c57600080fd5b5061034361038b366004614821565b6109dd565b34801561039c57600080fd5b506103a5610afe565b604051610367919061520b565b3480156103be57600080fd5b506103d26103cd36600461486b565b610b04565b6040516103679190615200565b3480156103eb57600080fd5b5061035a6103fa366004614d3e565b610b6f565b34801561040b57600080fd5b506103a5610c15565b34801561042057600080fd5b506103a5610c1b565b34801561043557600080fd5b506103d261044436600461476c565b610c21565b34801561045557600080fd5b50610469610464366004614d6e565b610d9b565b6040516103679190614ef7565b34801561048257600080fd5b5061048b610e5e565b6040516103679190615978565b3480156104a457600080fd5b506104b86104b3366004614718565b610e63565b60405161036798979695949392919061582a565b3480156104d857600080fd5b506103436104e73660046149d6565b610f9f565b3480156104f857600080fd5b506103a561101d565b34801561050d57600080fd5b5061034361051c366004614a7f565b61102c565b34801561052d57600080fd5b5061034361053c366004614d3e565b61113d565b34801561054d57600080fd5b5061034361114a565b34801561056257600080fd5b50610343610571366004614718565b6111f0565b34801561058257600080fd5b506105966105913660046149d6565b611345565b6040516103679190615033565b3480156105af57600080fd5b506103a56105be366004614d3e565b611790565b3480156105cf57600080fd5b506105e36105de3660046149d6565b6117f1565b604051610367919061512f565b3480156105fc57600080fd5b506103a5611a31565b34801561061157600080fd5b50610343610620366004614bb6565b611a37565b34801561063157600080fd5b506103a56106403660046149d6565b611ca0565b34801561065157600080fd5b50610665610660366004614d6e565b611cdb565b60405161036791906151c8565b34801561067e57600080fd5b5061069261068d366004614d6e565b611d81565b6040516103679190614f44565b3480156106ab57600080fd5b506103a56106ba366004614718565b611eae565b3480156106cb57600080fd5b506103a5611ec0565b3480156106e057600080fd5b506106f46106ef366004614d3e565b611ec6565b6040516103679594939291906158f4565b34801561071157600080fd5b506103a5610720366004614718565b611f35565b34801561073157600080fd5b506103436107403660046149d6565b611f47565b34801561075157600080fd5b5061075a611f99565b6040516103679190614e62565b34801561077357600080fd5b5061035a611fa8565b61034361078a366004614896565b611fe1565b34801561079b57600080fd5b50610469612494565b3480156107b057600080fd5b506103436124f6565b3480156107c557600080fd5b506103d26107d436600461486b565b61256c565b3480156107e557600080fd5b506103a56107f4366004614d3e565b61265e565b34801561080557600080fd5b506103436108143660046147ac565b61267d565b34801561082557600080fd5b506103a5610834366004614734565b61281e565b34801561084557600080fd5b5061084e61283b565b6040516103679190614fc2565b34801561086757600080fd5b5061075a612913565b34801561087c57600080fd5b5061034361088b366004614a16565b612922565b34801561089c57600080fd5b506108b06108ab366004614718565b6129bb565b6040516103679796959493929190615935565b3480156108cf57600080fd5b506103a5612a51565b3480156108e457600080fd5b5061084e6108f3366004614d6e565b612a57565b34801561090457600080fd5b5061075a610913366004614d3e565b612b84565b34801561092457600080fd5b506103a5612bab565b34801561093957600080fd5b5061035a610948366004614d3e565b612bb2565b60005b8181101561099f57600b83838381811061096657fe5b90506020028101906109789190615986565b8254600181018455600093845260209093206109969301919061419e565b50600101610950565b505050565b6040518060400160405280600581526020017f506978656c00000000000000000000000000000000000000000000000000000081525081565b6004546001600160a01b03163314610a105760405162461bcd60e51b8152600401610a0790615608565b60405180910390fd5b8115610ac4576001600160a01b038316151580610a2a5750805b610a465760405162461bcd60e51b8152600401610a07906153ab565b6004546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0385167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560058054909116905561099f565b600580546001600160a01b0385167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055505050565b600a5481565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b5d90869061520b565b60405180910390a35060015b92915050565b600c8181548110610b7c57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015610c0d5780601f10610be257610100808354040283529160200191610c0d565b820191906000526020600020905b815481529060010190602001808311610bf057829003601f168201915b505050505081565b60035481565b60065490565b60008115610d46576001600160a01b03841660009081526020819052604090205482811015610c625760405162461bcd60e51b8152600401610a079061574e565b836001600160a01b0316856001600160a01b031614610d44576001600160a01b03851660009081526001602090815260408083203384529091529020546000198114610cf15783811015610cc85760405162461bcd60e51b8152600401610a07906154f5565b6001600160a01b0386166000908152600160209081526040808320338452909152902084820390555b6001600160a01b038516610d175760405162461bcd60e51b8152600401610a079061533d565b506001600160a01b0380861660009081526020819052604080822086850390559186168152208054840190555b505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d89919061520b565b60405180910390a35060019392505050565b60608083830367ffffffffffffffff81118015610db757600080fd5b50604051908082528060200260200182016040528015610de1578160200160208202803683370190505b509050835b8315610df25783610df6565b6006545b811015610e565760068181548110610e0a57fe5b9060005260206000200160009054906101000a90046001600160a01b03168286830381518110610e3657fe5b6001600160a01b0390921660209283029190910190910152600101610de6565b509392505050565b601281565b600080600080600080610e74614236565b505061271d5460068054600c54600b546001600160a01b038b16600081815260208181526040808320546003546007808552838620845160e081018652905463ffffffff80821680845264010000000083048216848a01526801000000000000000083048216978401979097526c01000000000000000000000000820416606083015261ffff70010000000000000000000000000000000082048116608084015272010000000000000000000000000000000000008204811660a0840152740100000000000000000000000000000000000000009091041660c0820152968652909352989d50959b509399509197509495509093929091888110610f7457fe5b9060005260206000200160009054906101000a90046001600160a01b03169050919395975091939597565b60005b8181101561099f576006838383818110610fb857fe5b9050602002016020810190610fcd9190614718565b815460018082018455600093845260209093200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905501610fa2565b6000611027612bbf565b905090565b6004546001600160a01b031633146110565760405162461bcd60e51b8152600401610a0790615608565b600954156110765760405162461bcd60e51b8152600401610a07906155d1565b60005b88518110156111325761112a89828151811061109157fe5b60200260200101518983815181106110a557fe5b60200260200101518984815181106110b957fe5b60200260200101518985815181106110cd57fe5b60200260200101518986815181106110e157fe5b60200260200101518987815181106110f557fe5b602002602001015189888151811061110957fe5b602002602001015189898151811061111d57fe5b6020026020010151612c1f565b600101611079565b505050505050505050565b6111473382612df7565b50565b6005546001600160a01b03163381146111755760405162461bcd60e51b8152600401610a0790615674565b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600580549091169055565b6004546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610a0790615608565b6001600160a01b038116156112de57600480546040517f70a082310000000000000000000000000000000000000000000000000000000081526112d9926001600160a01b03928316928516916370a082319161127891309101614e62565b60206040518083038186803b15801561129057600080fd5b505afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190614d56565b6001600160a01b0384169190612e95565b611147565b6004546040516000916001600160a01b03169047906112fc90614e5f565b60006040518083038185875af1925050503d8060008114611339576040519150601f19603f3d011682016040523d82523d6000602084013e61133e565b606091505b5050505050565b60608167ffffffffffffffff8111801561135e57600080fd5b5060405190808252806020026020018201604052801561139857816020015b611385614272565b81526020019060019003908161137d5790505b50905060005b82811015611789576113ae6142c9565b600d8585848181106113bc57fe5b9050602002013561271081106113ce57fe5b6040805160a081018252929091015463ffffffff80821684526401000000008204811660208501526801000000000000000082048116928401929092526c01000000000000000000000000810490911660608301526fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104166080820152905061146c85858481811061146057fe5b90506020020135612fcf565b83838151811061147857fe5b602002602001015160a0019063ffffffff16908163ffffffff16815250506006816000015163ffffffff16815481106114ad57fe5b9060005260206000200160009054906101000a90046001600160a01b03168383815181106114d757fe5b6020026020010151600001906001600160a01b031690816001600160a01b031681525050600c816020015163ffffffff168154811061151257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156115a05780601f10611575576101008083540402835291602001916115a0565b820191906000526020600020905b81548152906001019060200180831161158357829003601f168201915b50505050508383815181106115b157fe5b602002602001015160200181905250600c816040015163ffffffff16815481106115d757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116655780601f1061163a57610100808354040283529160200191611665565b820191906000526020600020905b81548152906001019060200180831161164857829003601f168201915b505050505083838151811061167657fe5b602002602001015160400181905250600b816060015163ffffffff168154811061169c57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561172a5780601f106116ff5761010080835404028352916020019161172a565b820191906000526020600020905b81548152906001019060200180831161170d57829003601f168201915b505050505083838151811061173b57fe5b602002602001015160600181905250806080015183838151811061175b57fe5b60209081029190910101516fffffffffffffffffffffffffffffffff9091166080909101525060010161139e565b5092915050565b600080600d8361271081106117a157fe5b015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16905080156117e1576117dc816002612ff9565b6117ea565b6611c37937e080005b9392505050565b60608167ffffffffffffffff8111801561180a57600080fd5b5060405190808252806020026020018201604052801561184457816020015b6118316142f7565b8152602001906001900390816118295790505b50905060005b828110156117895761185a6142c9565b600d85858481811061186857fe5b90506020020135612710811061187a57fe5b6040805160a081018252929091015463ffffffff80821684526401000000008204811660208501526801000000000000000082048116928401929092526c01000000000000000000000000810490911660608301526fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104166080820152905061190c85858481811061146057fe5b83838151811061191857fe5b602002602001015160a0019063ffffffff16908163ffffffff1681525050806000015183838151811061194757fe5b60200260200101516000019063ffffffff16908163ffffffff1681525050806020015183838151811061197657fe5b60200260200101516020019063ffffffff16908163ffffffff168152505080604001518383815181106119a557fe5b60200260200101516040019063ffffffff16908163ffffffff168152505080606001518383815181106119d457fe5b60200260200101516060019063ffffffff16908163ffffffff16815250508060800151838381518110611a0357fe5b60209081029190910101516fffffffffffffffffffffffffffffffff9091166080909101525060010161184a565b600b5490565b6004546001600160a01b03163314611a615760405162461bcd60e51b8152600401610a0790615608565b60095415611a815760405162461bcd60e51b8152600401610a07906155d1565b60005b8b811015611c915760008d8d83818110611a9a57fe5b9050602002013590506040518060a001604052808b8b85818110611aba57fe5b9050602002016020810190611acf9190614d8f565b63ffffffff168152602001898985818110611ae657fe5b9050602002016020810190611afb9190614d8f565b63ffffffff168152602001878785818110611b1257fe5b9050602002016020810190611b279190614d8f565b63ffffffff168152602001858585818110611b3e57fe5b9050602002016020810190611b539190614d8f565b63ffffffff1681526020018d8d85818110611b6a57fe5b9050602002016020810190611b7f9190614d0e565b6fffffffffffffffffffffffffffffffff169052600d826127108110611ba157fe5b82519101805460208401516040850151606086015160809096015163ffffffff1990931663ffffffff9586161767ffffffff00000000191664010000000092861692909202919091177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000091851691909102177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009390941692909202929092176fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000919092160217905550600101611a84565b50505050505050505050505050565b6000805b8281101561178957611cd1611cca858584818110611cbe57fe5b90506020020135611790565b8390613030565b9150600101611ca4565b61271d5460609083900382811115611cf05750815b8067ffffffffffffffff81118015611d0757600080fd5b50604051908082528060200260200182016040528015611d31578160200160208202803683370190505b50915060005b81811015611d795761271d81860181548110611d4f57fe5b9060005260206000200154838281518110611d6657fe5b6020908102919091010152600101611d37565b505092915050565b60608083830367ffffffffffffffff81118015611d9d57600080fd5b50604051908082528060200260200182016040528015611dd157816020015b6060815260200190600190039081611dbc5790505b509050835b8315611de25783611de6565b600b545b811015610e5657600b8181548110611dfa57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e885780601f10611e5d57610100808354040283529160200191611e88565b820191906000526020600020905b815481529060010190602001808311611e6b57829003601f168201915b50505050508286830381518110611e9b57fe5b6020908102919091010152600101611dd6565b60006020819052908152604090205481565b60095481565b600d816127108110611ed457fe5b015463ffffffff808216925064010000000082048116916801000000000000000081048216916c010000000000000000000000008204169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1685565b60026020526000908152604090205481565b60005b8181101561099f57600c838383818110611f6057fe5b9050602002810190611f729190615986565b825460018101845560009384526020909320611f909301919061419e565b50600101611f4a565b6004546001600160a01b031681565b6040518060400160405280600581526020017f504958454c00000000000000000000000000000000000000000000000000000081525081565b6009544210158015611ff45750600a5442105b6120105760405162461bcd60e51b8152600401610a0790615419565b600260085414156120335760405162461bcd60e51b8152600401610a0790615785565b600260085563ffffffff8a811614156120b85760065461205290612fcf565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038e1617905599505b60065463ffffffff8b16106120df5760405162461bcd60e51b8152600401610a0790615374565b63ffffffff888116141561214357600c546120f990612fcf565b600c80546001810182556000919091528a51919950612141917fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79091019060208c019061432c565b505b600c5463ffffffff89161061216a5760405162461bcd60e51b8152600401610a0790615298565b63ffffffff86811614156121ce57600c5461218490612fcf565b600c805460018101825560009190915288519197506121cc917fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79091019060208a019061432c565b505b600c5463ffffffff8716106121f55760405162461bcd60e51b8152600401610a079061552c565b63ffffffff81811614156122755760065461220f90612fcf565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851617905590505b60065463ffffffff82161061229c5760405162461bcd60e51b8152600401610a0790615306565b600b5460005b85518110156122f457600b8682815181106122b957fe5b602090810291909101810151825460018101845560009384529282902081516122eb949190910192919091019061432c565b506001016122a2565b506000805b875181101561238f57612385611cca89838151811061231457fe5b60200260200101518f8e8d61238060008d898151811061233057fe5b602002602001015160030b1215612363578c888151811061234d57fe5b60200260200101516000190360030b8a0161237b565b8c888151811061236f57fe5b602002602001015160030b5b612fcf565b613053565b91506001016122f9565b508034146123af5760405162461bcd60e51b8152600401610a0790615450565b8651600080806123e933886123c861237b886014612ff9565b6123d661237b89600a612ff9565b6123e461237b8a6005612ff9565b6133b7565b9194509250905061240c336124078668056bc75e2d63100000612ff9565b614040565b6001600160a01b038316156124325761243283612407866801158e460913d00000612ff9565b6001600160a01b03821615612457576124578261240786678ac7230489e80000612ff9565b6001600160a01b0381161561247c5761247c8161240786674563918244f40000612ff9565b50506001600855505050505050505050505050505050565b606060068054806020026020016040519081016040528092919081815260200182805480156124ec57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124ce575b5050505050905090565b6004546001600160a01b031633146125205760405162461bcd60e51b8152600401610a0790615608565b42611c2081016009556212912001600a5561271d80546001810182556000919091526127107f567b94c0da53e726bc4ae9646679a9c3785e89324a3d6956b975c36a8a3162bf90910155565b6000811515806125845750336001600160a01b038416145b1561261b5733600090815260208190526040902054828110156125b95760405162461bcd60e51b8152600401610a079061574e565b336001600160a01b03851614612619576001600160a01b0384166125ef5760405162461bcd60e51b8152600401610a079061533d565b3360009081526020819052604080822085840390556001600160a01b038616825290208054840190555b505b826001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b5d919061520b565b61271d818154811061266c57fe5b600091825260209091200154905081565b6001600160a01b0387166126a35760405162461bcd60e51b8152600401610a07906156e0565b8342106126c25760405162461bcd60e51b8152600401610a079061559a565b6001600160a01b038716600081815260026020908152604091829020805460018181019092559251909261274092612725927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e92918e9101615214565b604051602081830303815290604052805190602001206140c5565b858585604051600081526020016040526040516127609493929190615267565b6020604051602081039080840390855afa158015612782573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146127b25760405162461bcd60e51b8152600401610a07906157f3565b6001600160a01b038088166000818152600160209081526040808320948b168084529490915290819020889055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061280d90899061520b565b60405180910390a350505050505050565b600160209081526000928352604080842090915290825290205481565b6060600c805480602002602001604051908101604052809291908181526020016000905b8282101561290a5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156128f65780601f106128cb576101008083540402835291602001916128f6565b820191906000526020600020905b8154815290600101906020018083116128d957829003601f168201915b50505050508152602001906001019061285f565b50505050905090565b6005546001600160a01b031681565b6004546001600160a01b0316331461294c5760405162461bcd60e51b8152600401610a0790615608565b6009541561296c5760405162461bcd60e51b8152600401610a07906155d1565b60005b8381101561133e576129b385858381811061298657fe5b905060200201602081019061299b9190614718565b8484848181106129a757fe5b90506020020135614040565b60010161296f565b60076020526000908152604090205463ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000081049091169061ffff700100000000000000000000000000000000820481169172010000000000000000000000000000000000008104821691740100000000000000000000000000000000000000009091041687565b600c5490565b60608083830367ffffffffffffffff81118015612a7357600080fd5b50604051908082528060200260200182016040528015612aa757816020015b6060815260200190600190039081612a925790505b509050835b8315612ab85783612abc565b600c545b811015610e5657600c8181548110612ad057fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612b5e5780601f10612b3357610100808354040283529160200191612b5e565b820191906000526020600020905b815481529060010190602001808311612b4157829003601f168201915b50505050508286830381518110612b7157fe5b6020908102919091010152600101612aac565b60068181548110612b9157fe5b6000918252602090912001546001600160a01b0316905081565b61271d5490565b600b8181548110610b7c57fe5b6000467f00000000000000000000000000000000000000000000000000000000000000008114612bf757612bf281614135565b612c19565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6040805160e08101825263ffffffff988916815296881660208089019182529689168883019081529589166060890190815261ffff95861660808a0190815294861660a08a0190815293861660c08a019081526001600160a01b039b909b1660009081526007909852919096209651875496519551915193519251995163ffffffff199097169089161767ffffffff00000000191664010000000095891695909502949094177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000094881694909402939093177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009190961602949094177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000091851691909102177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000094841694909402939093177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000009390921692909202179055565b6001600160a01b038216600090815260208190526040902054811115612e2f5760405162461bcd60e51b8152600401610a079061563d565b6003805482900390556001600160a01b03821660008181526020819052604080822080548590039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e8990859061520b565b60405180910390a35050565b60006060846001600160a01b031663a9059cbb60e01b8585604051602401612ebe929190614eb4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612f479190614e1c565b6000604051808303816000865af19150503d8060008114612f84576040519150601f19603f3d011682016040523d82523d6000602084013e612f89565b606091505b5091509150818015612fb3575080511580612fb3575080806020019051810190612fb39190614cf2565b61133e5760405162461bcd60e51b8152600401610a07906152cf565b600063ffffffff821115612ff55760405162461bcd60e51b8152600401610a0790615717565b5090565b60008115806130145750508082028282828161301157fe5b04145b610b695760405162461bcd60e51b8152600401610a07906157bc565b81810181811015610b695760405162461bcd60e51b8152600401610a0790615487565b600b5460009063ffffffff83161061307d5760405162461bcd60e51b8152600401610a0790615563565b6130856142c9565b600d87612710811061309357fe5b6040805160a081018252919092015463ffffffff8082168084526401000000008304821660208501526801000000000000000083048216948401949094526c01000000000000000000000000820416606083015270010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166080820152600680549193506000928392811061312657fe5b60009182526020909120015460808401516040516001600160a01b0390921692506fffffffffffffffffffffffffffffffff16908290614e2090839061316b90614e5f565b600060405180830381858888f193505050503d80600081146131a9576040519150601f19603f3d011682016040523d82523d6000602084013e6131ae565b606091505b509093505080156131c9576131c4816002612ff9565b6131d2565b6611c37937e080005b63ffffffff808b16865289811660208701528816604086015294506131f68561416c565b6fffffffffffffffffffffffffffffffff16608085015263ffffffff8616606085015283600d8b612710811061322857fe5b82519101805460208401516040850151606086015160809096015163ffffffff1990931663ffffffff9586161767ffffffff00000000191664010000000092861692909202919091177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000091851691909102177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000094841694909402939093176fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000091909416029290921790915561271d80546001810182556000919091527f567b94c0da53e726bc4ae9646679a9c3785e89324a3d6956b975c36a8a3162bf018b9055600680547f03994e0ddbf7a57c940a2289e9276e7c360cd03511fa3a364a41624cba3a762092859291908d1690811061337d57fe5b6000918252602090912001546040516133a292916001600160a01b0316908990614e90565b60405180910390a15050505095945050505050565b60008060006133c4614236565b506001600160a01b0388166000908152600760209081526040808320815160e081018352905463ffffffff80821680845264010000000083048216958401959095526801000000000000000082048116938301939093526c010000000000000000000000008104909216606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c082015291906136de5763ffffffff8916156136d95760068963ffffffff16815481106134b457fe5b6000918252602090912001546001600160a01b0390811695508a168514156134ee5760405162461bcd60e51b8152600401610a07906154be565b6001600160a01b038516156136d95763ffffffff89811683526001600160a01b038b16600090815260076020908152604091829020855181549287015184880151606089015160808a015160a08b015160c08c015163ffffffff19909816958a169590951767ffffffff000000001916640100000000948a1694909402939093177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000092891692909202919091177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009190971602959095177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff96871602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000091861691909102177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000949092169390930217909155517ff4c78ee7aea6f59d773994adfe29bbdd72b3f898d9d841ab904a3a647ef3c1a9906136cd908c908890614e76565b60405180910390a15060015b61370d565b6006826000015163ffffffff16815481106136f557fe5b6000918252602090912001546001600160a01b031694505b6001600160a01b0385161561403357613724614236565b506001600160a01b038516600090815260076020908152604091829020825160e081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081048316938201939093526c010000000000000000000000008304909116606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c0820152811561382d576080818101805160010161ffff9081169091529084015160a08084018051909201831690915284015160c08301805190910190911690525b6020810180518a0163ffffffff1690526040517f7d3bc7595eef4564f4f2761526db36a5cea53fc3aea968d02d2ca67aeb4a6cb8906138729088908c90600190614ecd565b60405180910390a16001600160a01b0386166000908152600760209081526040918290208351815492850151938501516060860151608087015160a088015160c089015163ffffffff1990971663ffffffff95861690811767ffffffff00000000191664010000000099871699909902989098177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000094861694909402939093177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009490921693909302177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff93841602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000091831691909102177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919093160291909117905515614031576006816000015163ffffffff1681548110613a2f57fe5b6000918252602090912001546001600160a01b03169450613a4e614236565b506001600160a01b038516600090815260076020908152604091829020825160e081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081048316938201939093526c010000000000000000000000008304909116606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c08201528215613b455760a08101805160010161ffff908116909152608085015160c08301805190910190911690525b604081810180518b0163ffffffff169052517f7d3bc7595eef4564f4f2761526db36a5cea53fc3aea968d02d2ca67aeb4a6cb890613b899088908c90600290614ecd565b60405180910390a16001600160a01b0386166000908152600760209081526040918290208351815492850151938501516060860151608087015160a088015160c089015163ffffffff1990971663ffffffff95861690811767ffffffff00000000191664010000000099871699909902989098177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000094861694909402939093177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009490921693909302177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff93841602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000091831691909102177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000091909316029190911790551561402f576006816000015163ffffffff1681548110613d4657fe5b6000918252602090912001546001600160a01b03169450613d65614236565b506001600160a01b038516600090815260076020908152604091829020825160e081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081048316938201939093526c010000000000000000000000008304909116606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c08201528315613e465760c08101805160010161ffff1690525b6060810180518a0163ffffffff1690526040517f7d3bc7595eef4564f4f2761526db36a5cea53fc3aea968d02d2ca67aeb4a6cb890613e8b9088908c90600390614ecd565b60405180910390a16001600160a01b0386166000908152600760209081526040918290208351815492850151938501516060860151608087015160a088015160c09098015163ffffffff1990961663ffffffff9485161767ffffffff00000000191664010000000097851697909702969096177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000092841692909202919091177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009290911691909102177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff94851602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000094841694909402939093177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000092909116919091021790555b505b505b5050955095509592505050565b600354808201908110156140665760405162461bcd60e51b8152600401610a07906156a9565b60038190556001600160a01b038316600081815260208190526040808220805486019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906140b890869061520b565b60405180910390a3505050565b60006040518060400160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250614105612bbf565b8360405160200161411893929190614e38565b604051602081830303815290604052805190602001209050919050565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218823060405160200161411893929190615248565b60006fffffffffffffffffffffffffffffffff821115612ff55760405162461bcd60e51b8152600401610a07906153e2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106141fd578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855561422a565b8280016001018555821561422a579182015b8281111561422a57823582559160200191906001019061420f565b50612ff592915061439a565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060c0016040528060006001600160a01b0316815260200160608152602001606081526020016060815260200160006fffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061436d57805160ff191683800117855561422a565b8280016001018555821561422a579182015b8281111561422a57825182559160200191906001019061437f565b5b80821115612ff5576000815560010161439b565b8035610b6981615a60565b60008083601f8401126143cb578182fd5b50813567ffffffffffffffff8111156143e2578182fd5b60208301915083602080830285010111156143fc57600080fd5b9250929050565b600082601f830112614413578081fd5b813561442661442182615a10565b6159e9565b81815291506020808301908481018184028601820187101561444757600080fd5b60005b8481101561446f57813561445d81615a60565b8452928201929082019060010161444a565b505050505092915050565b600082601f83011261448a578081fd5b813561449861442182615a10565b818152915060208083019084810160005b8481101561446f576144c0888484358a010161467d565b845292820192908201906001016144a9565b600082601f8301126144e2578081fd5b81356144f061442182615a10565b81815291506020808301908481018184028601820187101561451157600080fd5b6000805b8581101561453f5782358060030b811461452d578283fd5b85529383019391830191600101614515565b50505050505092915050565b600082601f83011261455b578081fd5b813561456961442182615a10565b81815291506020808301908481018184028601820187101561458a57600080fd5b6000805b8581101561453f57823561ffff811681146145a7578283fd5b8552938301939183019160010161458e565b600082601f8301126145c9578081fd5b81356145d761442182615a10565b8181529150602080830190848101818402860182018710156145f857600080fd5b60005b8481101561446f578135845292820192908201906001016145fb565b600082601f830112614627578081fd5b813561463561442182615a10565b81815291506020808301908481018184028601820187101561465657600080fd5b60005b8481101561446f5761466b8883614704565b84529282019290820190600101614659565b600082601f83011261468d578081fd5b813567ffffffffffffffff8111156146a3578182fd5b6146d460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016159e9565b91508082528360208285010111156146eb57600080fd5b8060208401602084013760009082016020015292915050565b803563ffffffff81168114610b6957600080fd5b600060208284031215614729578081fd5b81356117ea81615a60565b60008060408385031215614746578081fd5b823561475181615a60565b9150602083013561476181615a60565b809150509250929050565b600080600060608486031215614780578081fd5b833561478b81615a60565b9250602084013561479b81615a60565b929592945050506040919091013590565b600080600080600080600060e0888a0312156147c6578485fd5b87356147d181615a60565b965060208801356147e181615a60565b95506040880135945060608801359350608088013560ff81168114614804578384fd5b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215614835578081fd5b833561484081615a60565b9250602084013561485081615a75565b9150604084013561486081615a75565b809150509250925092565b6000806040838503121561487d578182fd5b823561488881615a60565b946020939093013593505050565b60008060008060008060008060008060006101608c8e0312156148b7578485fd5b6148c18d8d6143af565b9a506148d08d60208e01614704565b995067ffffffffffffffff8060408e013511156148eb578586fd5b6148fb8e60408f01358f0161467d565b995061490a8e60608f01614704565b98508060808e0135111561491c578586fd5b61492c8e60808f01358f0161467d565b975061493b8e60a08f01614704565b96508060c08e0135111561494d578586fd5b61495d8e60c08f01358f016145b9565b95508060e08e0135111561496f578485fd5b61497f8e60e08f01358f0161447a565b9450806101008e01351115614992578384fd5b506149a48d6101008e01358e016144d2565b92506149b48d6101208e016143af565b91506149c48d6101408e01614704565b90509295989b509295989b9093969950565b600080602083850312156149e8578182fd5b823567ffffffffffffffff8111156149fe578283fd5b614a0a858286016143ba565b90969095509350505050565b60008060008060408587031215614a2b578182fd5b843567ffffffffffffffff80821115614a42578384fd5b614a4e888389016143ba565b90965094506020870135915080821115614a66578384fd5b50614a73878288016143ba565b95989497509550505050565b600080600080600080600080610100898b031215614a9b578182fd5b883567ffffffffffffffff80821115614ab2578384fd5b614abe8c838d01614403565b995060208b0135915080821115614ad3578384fd5b614adf8c838d01614617565b985060408b0135915080821115614af4578384fd5b614b008c838d01614617565b975060608b0135915080821115614b15578384fd5b614b218c838d01614617565b965060808b0135915080821115614b36578384fd5b614b428c838d01614617565b955060a08b0135915080821115614b57578384fd5b614b638c838d0161454b565b945060c08b0135915080821115614b78578384fd5b614b848c838d0161454b565b935060e08b0135915080821115614b99578283fd5b50614ba68b828c0161454b565b9150509295985092959890939650565b60008060008060008060008060008060008060c08d8f031215614bd7578586fd5b67ffffffffffffffff8d351115614bec578586fd5b614bf98e8e358f016143ba565b909c509a5067ffffffffffffffff60208e01351115614c16578586fd5b614c268e60208f01358f016143ba565b909a50985067ffffffffffffffff60408e01351115614c43578586fd5b614c538e60408f01358f016143ba565b909850965067ffffffffffffffff60608e01351115614c70578586fd5b614c808e60608f01358f016143ba565b909650945067ffffffffffffffff60808e01351115614c9d578081fd5b614cad8e60808f01358f016143ba565b909450925067ffffffffffffffff60a08e01351115614cca578081fd5b614cda8e60a08f01358f016143ba565b81935080925050509295989b509295989b509295989b565b600060208284031215614d03578081fd5b81516117ea81615a75565b600060208284031215614d1f578081fd5b81356fffffffffffffffffffffffffffffffff811681146117ea578182fd5b600060208284031215614d4f578081fd5b5035919050565b600060208284031215614d67578081fd5b5051919050565b60008060408385031215614d80578182fd5b50508035926020909101359150565b600060208284031215614da0578081fd5b813563ffffffff811681146117ea578182fd5b6001600160a01b03169052565b60008151808452614dd8816020860160208601615a30565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b61ffff169052565b63ffffffff169052565b60008251614e2e818460208701615a30565b9190910192915050565b60008451614e4a818460208901615a30565b91909101928352506020820152604001919050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835263ffffffff91909116602083015260ff16604082015260600190565b6020808252825182820181905260009190848201906040850190845b81811015614f385783516001600160a01b031683529284019291840191600101614f13565b50909695505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015614fb5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614fa3858351614dc0565b94509285019290850190600101614f69565b5092979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015614fb5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615021858351614dc0565b94509285019290850190600101614fe7565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015615121577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160c06001600160a01b03825116855288820151818a8701526150ac82870182614dc0565b91505087820151858203898701526150c48282614dc0565b915050606080830151868303828801526150de8382614dc0565b6080858101516fffffffffffffffffffffffffffffffff169089015260a09485015163ffffffff1694909701939093525050509386019390860190600101615057565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156151bb578151805163ffffffff908116865287820151811688870152868201518116878701526060808301518216908701526080808301516fffffffffffffffffffffffffffffffff169087015260a091820151169085015260c0909301929085019060010161514c565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614f38578351835292840192918401916001016151e4565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b92835260208301919091526001600160a01b0316604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526117ea6020830184614dc0565b60208082526009908201527f57726f6e672075726c0000000000000000000000000000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b6020808252600e908201527f57726f6e67207265666572726572000000000000000000000000000000000000604082015260600190565b60208082526016908201527f45524332303a206e6f207a65726f206164647265737300000000000000000000604082015260600190565b6020808252600b908201527f57726f6e67206f776e6572000000000000000000000000000000000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526015908201527f4e6f7420696e206372656174696f6e2070686173650000000000000000000000604082015260600190565b60208082526017908201527f506978656c3a206e6f7420656e6f7567682066756e6473000000000000000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526019908201527f4d4c4d3a2043616e277420726566657220796f757273656c6600000000000000604082015260600190565b60208082526018908201527f45524332303a20616c6c6f77616e636520746f6f206c6f770000000000000000604082015260600190565b60208082526011908201527f57726f6e67206465736372697074696f6e000000000000000000000000000000604082015260600190565b6020808252600d908201527f57726f6e6720706978656c4e7200000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f45524332303a2045787069726564000000000000000000000000000000000000604082015260600190565b60208082526017908201527f496e697469616c697a6174696f6e2066696e6973686564000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600d908201527f4275726e20746f6f206d75636800000000000000000000000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252600d908201527f4d696e74206f766572666c6f7700000000000000000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a204f776e65722063616e6e6f7420626520300000000000000000604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743332204f766572666c6f770000000000604082015260600190565b60208082526016908201527f45524332303a2062616c616e636520746f6f206c6f7700000000000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b60208082526018908201527f45524332303a20496e76616c6964205369676e61747572650000000000000000604082015260600190565b60006101c0820190508982528860208301528760408301528660608301528560808301528460a083015261586260c083018551614e12565b602084015161587460e0840182614e12565b506040840151615888610100840182614e12565b50606084015161589c610120840182614e12565b5060808401516158b0610140840182614e0a565b5060a08401516158c4610160840182614e0a565b5060c08401516158d8610180840182614e0a565b506158e76101a0830184614db3565b9998505050505050505050565b63ffffffff95861681529385166020850152918416604084015290921660608201526fffffffffffffffffffffffffffffffff909116608082015260a00190565b63ffffffff97881681529587166020870152938616604086015291909416606084015261ffff9384166080840152831660a083015290911660c082015260e00190565b60ff91909116815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159ba578283fd5b83018035915067ffffffffffffffff8211156159d4578283fd5b6020019150368190038213156143fc57600080fd5b60405181810167ffffffffffffffff81118282101715615a0857600080fd5b604052919050565b600067ffffffffffffffff821115615a26578081fd5b5060209081020190565b60005b83811015615a4b578181015183820152602001615a33565b83811115615a5a576000848401525b50505050565b6001600160a01b038116811461114757600080fd5b801515811461114757600080fdfea2646970667358221220497fc9216e5ec387babff86c07d0e5fdbfc80fc6b33b7da247d2fb9f782b9dbc64736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80636ac1c5a6116101a5578063a9059cbb116100ec578063e467f7e011610095578063e86f99321161006f578063e86f9932146108d8578063edf26d9b146108f8578063ee687c7514610918578063f0ba84401461092d5761031e565b8063e467f7e014610870578063e6720c4414610890578063e863ec5e146108c35761031e565b8063dd62ed3e116100c6578063dd62ed3e14610819578063e00fe2eb14610839578063e30c39781461085b5761031e565b8063a9059cbb146107b9578063b4c2f727146107d9578063d505accf146107f95761031e565b80638a6c5ec51161014e5780639a11c0dd116101285780639a11c0dd1461077c578063a39fac121461078f578063a58277e4146107a45761031e565b80638a6c5ec5146107255780638da5cb5b1461074557806395d89b41146107675761031e565b8063781cd99d1161017f578063781cd99d146106bf5780637b46a39c146106d45780637ecebe00146107055761031e565b80636ac1c5a6146106455780636f6fcb721461067257806370a082311461069f5761031e565b80633628731c1161026957806354328c0e116102125780635da40c47116101ec5780635da40c47146105f0578063616f993414610605578063697f92f4146106255761031e565b806354328c0e146105765780635a4dd47d146105a35780635ad6fbc1146105c35761031e565b806342966c681161024357806342966c68146105215780634e71e0c81461054157806351cff8d9146105565761031e565b80633628731c146104cc5780633644e515146104ec5780633f9b80db146105015761031e565b806318160ddd116102cb5780632bd4c1b7116102a55780632bd4c1b714610449578063313ce5671461047657806332985bf4146104985761031e565b806318160ddd146103ff5780631bb6082a1461041457806323b872dd146104295761031e565b806308a32d8c116102fc57806308a32d8c14610390578063095ea7b3146103b257806310bb7050146103df5761031e565b806305d748de1461032357806306fdde0314610345578063078dfbe714610370575b600080fd5b34801561032f57600080fd5b5061034361033e3660046149d6565b61094d565b005b34801561035157600080fd5b5061035a6109a4565b6040516103679190615285565b60405180910390f35b34801561037c57600080fd5b5061034361038b366004614821565b6109dd565b34801561039c57600080fd5b506103a5610afe565b604051610367919061520b565b3480156103be57600080fd5b506103d26103cd36600461486b565b610b04565b6040516103679190615200565b3480156103eb57600080fd5b5061035a6103fa366004614d3e565b610b6f565b34801561040b57600080fd5b506103a5610c15565b34801561042057600080fd5b506103a5610c1b565b34801561043557600080fd5b506103d261044436600461476c565b610c21565b34801561045557600080fd5b50610469610464366004614d6e565b610d9b565b6040516103679190614ef7565b34801561048257600080fd5b5061048b610e5e565b6040516103679190615978565b3480156104a457600080fd5b506104b86104b3366004614718565b610e63565b60405161036798979695949392919061582a565b3480156104d857600080fd5b506103436104e73660046149d6565b610f9f565b3480156104f857600080fd5b506103a561101d565b34801561050d57600080fd5b5061034361051c366004614a7f565b61102c565b34801561052d57600080fd5b5061034361053c366004614d3e565b61113d565b34801561054d57600080fd5b5061034361114a565b34801561056257600080fd5b50610343610571366004614718565b6111f0565b34801561058257600080fd5b506105966105913660046149d6565b611345565b6040516103679190615033565b3480156105af57600080fd5b506103a56105be366004614d3e565b611790565b3480156105cf57600080fd5b506105e36105de3660046149d6565b6117f1565b604051610367919061512f565b3480156105fc57600080fd5b506103a5611a31565b34801561061157600080fd5b50610343610620366004614bb6565b611a37565b34801561063157600080fd5b506103a56106403660046149d6565b611ca0565b34801561065157600080fd5b50610665610660366004614d6e565b611cdb565b60405161036791906151c8565b34801561067e57600080fd5b5061069261068d366004614d6e565b611d81565b6040516103679190614f44565b3480156106ab57600080fd5b506103a56106ba366004614718565b611eae565b3480156106cb57600080fd5b506103a5611ec0565b3480156106e057600080fd5b506106f46106ef366004614d3e565b611ec6565b6040516103679594939291906158f4565b34801561071157600080fd5b506103a5610720366004614718565b611f35565b34801561073157600080fd5b506103436107403660046149d6565b611f47565b34801561075157600080fd5b5061075a611f99565b6040516103679190614e62565b34801561077357600080fd5b5061035a611fa8565b61034361078a366004614896565b611fe1565b34801561079b57600080fd5b50610469612494565b3480156107b057600080fd5b506103436124f6565b3480156107c557600080fd5b506103d26107d436600461486b565b61256c565b3480156107e557600080fd5b506103a56107f4366004614d3e565b61265e565b34801561080557600080fd5b506103436108143660046147ac565b61267d565b34801561082557600080fd5b506103a5610834366004614734565b61281e565b34801561084557600080fd5b5061084e61283b565b6040516103679190614fc2565b34801561086757600080fd5b5061075a612913565b34801561087c57600080fd5b5061034361088b366004614a16565b612922565b34801561089c57600080fd5b506108b06108ab366004614718565b6129bb565b6040516103679796959493929190615935565b3480156108cf57600080fd5b506103a5612a51565b3480156108e457600080fd5b5061084e6108f3366004614d6e565b612a57565b34801561090457600080fd5b5061075a610913366004614d3e565b612b84565b34801561092457600080fd5b506103a5612bab565b34801561093957600080fd5b5061035a610948366004614d3e565b612bb2565b60005b8181101561099f57600b83838381811061096657fe5b90506020028101906109789190615986565b8254600181018455600093845260209093206109969301919061419e565b50600101610950565b505050565b6040518060400160405280600581526020017f506978656c00000000000000000000000000000000000000000000000000000081525081565b6004546001600160a01b03163314610a105760405162461bcd60e51b8152600401610a0790615608565b60405180910390fd5b8115610ac4576001600160a01b038316151580610a2a5750805b610a465760405162461bcd60e51b8152600401610a07906153ab565b6004546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b0385167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560058054909116905561099f565b600580546001600160a01b0385167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055505050565b600a5481565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b5d90869061520b565b60405180910390a35060015b92915050565b600c8181548110610b7c57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815293509091830182828015610c0d5780601f10610be257610100808354040283529160200191610c0d565b820191906000526020600020905b815481529060010190602001808311610bf057829003601f168201915b505050505081565b60035481565b60065490565b60008115610d46576001600160a01b03841660009081526020819052604090205482811015610c625760405162461bcd60e51b8152600401610a079061574e565b836001600160a01b0316856001600160a01b031614610d44576001600160a01b03851660009081526001602090815260408083203384529091529020546000198114610cf15783811015610cc85760405162461bcd60e51b8152600401610a07906154f5565b6001600160a01b0386166000908152600160209081526040808320338452909152902084820390555b6001600160a01b038516610d175760405162461bcd60e51b8152600401610a079061533d565b506001600160a01b0380861660009081526020819052604080822086850390559186168152208054840190555b505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d89919061520b565b60405180910390a35060019392505050565b60608083830367ffffffffffffffff81118015610db757600080fd5b50604051908082528060200260200182016040528015610de1578160200160208202803683370190505b509050835b8315610df25783610df6565b6006545b811015610e565760068181548110610e0a57fe5b9060005260206000200160009054906101000a90046001600160a01b03168286830381518110610e3657fe5b6001600160a01b0390921660209283029190910190910152600101610de6565b509392505050565b601281565b600080600080600080610e74614236565b505061271d5460068054600c54600b546001600160a01b038b16600081815260208181526040808320546003546007808552838620845160e081018652905463ffffffff80821680845264010000000083048216848a01526801000000000000000083048216978401979097526c01000000000000000000000000820416606083015261ffff70010000000000000000000000000000000082048116608084015272010000000000000000000000000000000000008204811660a0840152740100000000000000000000000000000000000000009091041660c0820152968652909352989d50959b509399509197509495509093929091888110610f7457fe5b9060005260206000200160009054906101000a90046001600160a01b03169050919395975091939597565b60005b8181101561099f576006838383818110610fb857fe5b9050602002016020810190610fcd9190614718565b815460018082018455600093845260209093200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905501610fa2565b6000611027612bbf565b905090565b6004546001600160a01b031633146110565760405162461bcd60e51b8152600401610a0790615608565b600954156110765760405162461bcd60e51b8152600401610a07906155d1565b60005b88518110156111325761112a89828151811061109157fe5b60200260200101518983815181106110a557fe5b60200260200101518984815181106110b957fe5b60200260200101518985815181106110cd57fe5b60200260200101518986815181106110e157fe5b60200260200101518987815181106110f557fe5b602002602001015189888151811061110957fe5b602002602001015189898151811061111d57fe5b6020026020010151612c1f565b600101611079565b505050505050505050565b6111473382612df7565b50565b6005546001600160a01b03163381146111755760405162461bcd60e51b8152600401610a0790615674565b6004546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600480546001600160a01b039092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600580549091169055565b6004546001600160a01b0316331461121a5760405162461bcd60e51b8152600401610a0790615608565b6001600160a01b038116156112de57600480546040517f70a082310000000000000000000000000000000000000000000000000000000081526112d9926001600160a01b03928316928516916370a082319161127891309101614e62565b60206040518083038186803b15801561129057600080fd5b505afa1580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c89190614d56565b6001600160a01b0384169190612e95565b611147565b6004546040516000916001600160a01b03169047906112fc90614e5f565b60006040518083038185875af1925050503d8060008114611339576040519150601f19603f3d011682016040523d82523d6000602084013e61133e565b606091505b5050505050565b60608167ffffffffffffffff8111801561135e57600080fd5b5060405190808252806020026020018201604052801561139857816020015b611385614272565b81526020019060019003908161137d5790505b50905060005b82811015611789576113ae6142c9565b600d8585848181106113bc57fe5b9050602002013561271081106113ce57fe5b6040805160a081018252929091015463ffffffff80821684526401000000008204811660208501526801000000000000000082048116928401929092526c01000000000000000000000000810490911660608301526fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104166080820152905061146c85858481811061146057fe5b90506020020135612fcf565b83838151811061147857fe5b602002602001015160a0019063ffffffff16908163ffffffff16815250506006816000015163ffffffff16815481106114ad57fe5b9060005260206000200160009054906101000a90046001600160a01b03168383815181106114d757fe5b6020026020010151600001906001600160a01b031690816001600160a01b031681525050600c816020015163ffffffff168154811061151257fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156115a05780601f10611575576101008083540402835291602001916115a0565b820191906000526020600020905b81548152906001019060200180831161158357829003601f168201915b50505050508383815181106115b157fe5b602002602001015160200181905250600c816040015163ffffffff16815481106115d757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156116655780601f1061163a57610100808354040283529160200191611665565b820191906000526020600020905b81548152906001019060200180831161164857829003601f168201915b505050505083838151811061167657fe5b602002602001015160400181905250600b816060015163ffffffff168154811061169c57fe5b600091825260209182902001805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561172a5780601f106116ff5761010080835404028352916020019161172a565b820191906000526020600020905b81548152906001019060200180831161170d57829003601f168201915b505050505083838151811061173b57fe5b602002602001015160600181905250806080015183838151811061175b57fe5b60209081029190910101516fffffffffffffffffffffffffffffffff9091166080909101525060010161139e565b5092915050565b600080600d8361271081106117a157fe5b015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16905080156117e1576117dc816002612ff9565b6117ea565b6611c37937e080005b9392505050565b60608167ffffffffffffffff8111801561180a57600080fd5b5060405190808252806020026020018201604052801561184457816020015b6118316142f7565b8152602001906001900390816118295790505b50905060005b828110156117895761185a6142c9565b600d85858481811061186857fe5b90506020020135612710811061187a57fe5b6040805160a081018252929091015463ffffffff80821684526401000000008204811660208501526801000000000000000082048116928401929092526c01000000000000000000000000810490911660608301526fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104166080820152905061190c85858481811061146057fe5b83838151811061191857fe5b602002602001015160a0019063ffffffff16908163ffffffff1681525050806000015183838151811061194757fe5b60200260200101516000019063ffffffff16908163ffffffff1681525050806020015183838151811061197657fe5b60200260200101516020019063ffffffff16908163ffffffff168152505080604001518383815181106119a557fe5b60200260200101516040019063ffffffff16908163ffffffff168152505080606001518383815181106119d457fe5b60200260200101516060019063ffffffff16908163ffffffff16815250508060800151838381518110611a0357fe5b60209081029190910101516fffffffffffffffffffffffffffffffff9091166080909101525060010161184a565b600b5490565b6004546001600160a01b03163314611a615760405162461bcd60e51b8152600401610a0790615608565b60095415611a815760405162461bcd60e51b8152600401610a07906155d1565b60005b8b811015611c915760008d8d83818110611a9a57fe5b9050602002013590506040518060a001604052808b8b85818110611aba57fe5b9050602002016020810190611acf9190614d8f565b63ffffffff168152602001898985818110611ae657fe5b9050602002016020810190611afb9190614d8f565b63ffffffff168152602001878785818110611b1257fe5b9050602002016020810190611b279190614d8f565b63ffffffff168152602001858585818110611b3e57fe5b9050602002016020810190611b539190614d8f565b63ffffffff1681526020018d8d85818110611b6a57fe5b9050602002016020810190611b7f9190614d0e565b6fffffffffffffffffffffffffffffffff169052600d826127108110611ba157fe5b82519101805460208401516040850151606086015160809096015163ffffffff1990931663ffffffff9586161767ffffffff00000000191664010000000092861692909202919091177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000091851691909102177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009390941692909202929092176fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000919092160217905550600101611a84565b50505050505050505050505050565b6000805b8281101561178957611cd1611cca858584818110611cbe57fe5b90506020020135611790565b8390613030565b9150600101611ca4565b61271d5460609083900382811115611cf05750815b8067ffffffffffffffff81118015611d0757600080fd5b50604051908082528060200260200182016040528015611d31578160200160208202803683370190505b50915060005b81811015611d795761271d81860181548110611d4f57fe5b9060005260206000200154838281518110611d6657fe5b6020908102919091010152600101611d37565b505092915050565b60608083830367ffffffffffffffff81118015611d9d57600080fd5b50604051908082528060200260200182016040528015611dd157816020015b6060815260200190600190039081611dbc5790505b509050835b8315611de25783611de6565b600b545b811015610e5657600b8181548110611dfa57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611e885780601f10611e5d57610100808354040283529160200191611e88565b820191906000526020600020905b815481529060010190602001808311611e6b57829003601f168201915b50505050508286830381518110611e9b57fe5b6020908102919091010152600101611dd6565b60006020819052908152604090205481565b60095481565b600d816127108110611ed457fe5b015463ffffffff808216925064010000000082048116916801000000000000000081048216916c010000000000000000000000008204169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1685565b60026020526000908152604090205481565b60005b8181101561099f57600c838383818110611f6057fe5b9050602002810190611f729190615986565b825460018101845560009384526020909320611f909301919061419e565b50600101611f4a565b6004546001600160a01b031681565b6040518060400160405280600581526020017f504958454c00000000000000000000000000000000000000000000000000000081525081565b6009544210158015611ff45750600a5442105b6120105760405162461bcd60e51b8152600401610a0790615419565b600260085414156120335760405162461bcd60e51b8152600401610a0790615785565b600260085563ffffffff8a811614156120b85760065461205290612fcf565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038e1617905599505b60065463ffffffff8b16106120df5760405162461bcd60e51b8152600401610a0790615374565b63ffffffff888116141561214357600c546120f990612fcf565b600c80546001810182556000919091528a51919950612141917fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79091019060208c019061432c565b505b600c5463ffffffff89161061216a5760405162461bcd60e51b8152600401610a0790615298565b63ffffffff86811614156121ce57600c5461218490612fcf565b600c805460018101825560009190915288519197506121cc917fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79091019060208a019061432c565b505b600c5463ffffffff8716106121f55760405162461bcd60e51b8152600401610a079061552c565b63ffffffff81811614156122755760065461220f90612fcf565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851617905590505b60065463ffffffff82161061229c5760405162461bcd60e51b8152600401610a0790615306565b600b5460005b85518110156122f457600b8682815181106122b957fe5b602090810291909101810151825460018101845560009384529282902081516122eb949190910192919091019061432c565b506001016122a2565b506000805b875181101561238f57612385611cca89838151811061231457fe5b60200260200101518f8e8d61238060008d898151811061233057fe5b602002602001015160030b1215612363578c888151811061234d57fe5b60200260200101516000190360030b8a0161237b565b8c888151811061236f57fe5b602002602001015160030b5b612fcf565b613053565b91506001016122f9565b508034146123af5760405162461bcd60e51b8152600401610a0790615450565b8651600080806123e933886123c861237b886014612ff9565b6123d661237b89600a612ff9565b6123e461237b8a6005612ff9565b6133b7565b9194509250905061240c336124078668056bc75e2d63100000612ff9565b614040565b6001600160a01b038316156124325761243283612407866801158e460913d00000612ff9565b6001600160a01b03821615612457576124578261240786678ac7230489e80000612ff9565b6001600160a01b0381161561247c5761247c8161240786674563918244f40000612ff9565b50506001600855505050505050505050505050505050565b606060068054806020026020016040519081016040528092919081815260200182805480156124ec57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124ce575b5050505050905090565b6004546001600160a01b031633146125205760405162461bcd60e51b8152600401610a0790615608565b42611c2081016009556212912001600a5561271d80546001810182556000919091526127107f567b94c0da53e726bc4ae9646679a9c3785e89324a3d6956b975c36a8a3162bf90910155565b6000811515806125845750336001600160a01b038416145b1561261b5733600090815260208190526040902054828110156125b95760405162461bcd60e51b8152600401610a079061574e565b336001600160a01b03851614612619576001600160a01b0384166125ef5760405162461bcd60e51b8152600401610a079061533d565b3360009081526020819052604080822085840390556001600160a01b038616825290208054840190555b505b826001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b5d919061520b565b61271d818154811061266c57fe5b600091825260209091200154905081565b6001600160a01b0387166126a35760405162461bcd60e51b8152600401610a07906156e0565b8342106126c25760405162461bcd60e51b8152600401610a079061559a565b6001600160a01b038716600081815260026020908152604091829020805460018181019092559251909261274092612725927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e92918e9101615214565b604051602081830303815290604052805190602001206140c5565b858585604051600081526020016040526040516127609493929190615267565b6020604051602081039080840390855afa158015612782573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146127b25760405162461bcd60e51b8152600401610a07906157f3565b6001600160a01b038088166000818152600160209081526040808320948b168084529490915290819020889055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061280d90899061520b565b60405180910390a350505050505050565b600160209081526000928352604080842090915290825290205481565b6060600c805480602002602001604051908101604052809291908181526020016000905b8282101561290a5760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156128f65780601f106128cb576101008083540402835291602001916128f6565b820191906000526020600020905b8154815290600101906020018083116128d957829003601f168201915b50505050508152602001906001019061285f565b50505050905090565b6005546001600160a01b031681565b6004546001600160a01b0316331461294c5760405162461bcd60e51b8152600401610a0790615608565b6009541561296c5760405162461bcd60e51b8152600401610a07906155d1565b60005b8381101561133e576129b385858381811061298657fe5b905060200201602081019061299b9190614718565b8484848181106129a757fe5b90506020020135614040565b60010161296f565b60076020526000908152604090205463ffffffff8082169164010000000081048216916801000000000000000082048116916c0100000000000000000000000081049091169061ffff700100000000000000000000000000000000820481169172010000000000000000000000000000000000008104821691740100000000000000000000000000000000000000009091041687565b600c5490565b60608083830367ffffffffffffffff81118015612a7357600080fd5b50604051908082528060200260200182016040528015612aa757816020015b6060815260200190600190039081612a925790505b509050835b8315612ab85783612abc565b600c545b811015610e5657600c8181548110612ad057fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015612b5e5780601f10612b3357610100808354040283529160200191612b5e565b820191906000526020600020905b815481529060010190602001808311612b4157829003601f168201915b50505050508286830381518110612b7157fe5b6020908102919091010152600101612aac565b60068181548110612b9157fe5b6000918252602090912001546001600160a01b0316905081565b61271d5490565b600b8181548110610b7c57fe5b6000467f00000000000000000000000000000000000000000000000000000000000000018114612bf757612bf281614135565b612c19565b7fb53a0b40682659f73e54a951c0db1e0a5d381b93860cf2f18f392fc5d213a0ca5b91505090565b6040805160e08101825263ffffffff988916815296881660208089019182529689168883019081529589166060890190815261ffff95861660808a0190815294861660a08a0190815293861660c08a019081526001600160a01b039b909b1660009081526007909852919096209651875496519551915193519251995163ffffffff199097169089161767ffffffff00000000191664010000000095891695909502949094177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000094881694909402939093177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009190961602949094177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000091851691909102177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000094841694909402939093177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000009390921692909202179055565b6001600160a01b038216600090815260208190526040902054811115612e2f5760405162461bcd60e51b8152600401610a079061563d565b6003805482900390556001600160a01b03821660008181526020819052604080822080548590039055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e8990859061520b565b60405180910390a35050565b60006060846001600160a01b031663a9059cbb60e01b8585604051602401612ebe929190614eb4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051612f479190614e1c565b6000604051808303816000865af19150503d8060008114612f84576040519150601f19603f3d011682016040523d82523d6000602084013e612f89565b606091505b5091509150818015612fb3575080511580612fb3575080806020019051810190612fb39190614cf2565b61133e5760405162461bcd60e51b8152600401610a07906152cf565b600063ffffffff821115612ff55760405162461bcd60e51b8152600401610a0790615717565b5090565b60008115806130145750508082028282828161301157fe5b04145b610b695760405162461bcd60e51b8152600401610a07906157bc565b81810181811015610b695760405162461bcd60e51b8152600401610a0790615487565b600b5460009063ffffffff83161061307d5760405162461bcd60e51b8152600401610a0790615563565b6130856142c9565b600d87612710811061309357fe5b6040805160a081018252919092015463ffffffff8082168084526401000000008304821660208501526801000000000000000083048216948401949094526c01000000000000000000000000820416606083015270010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff166080820152600680549193506000928392811061312657fe5b60009182526020909120015460808401516040516001600160a01b0390921692506fffffffffffffffffffffffffffffffff16908290614e2090839061316b90614e5f565b600060405180830381858888f193505050503d80600081146131a9576040519150601f19603f3d011682016040523d82523d6000602084013e6131ae565b606091505b509093505080156131c9576131c4816002612ff9565b6131d2565b6611c37937e080005b63ffffffff808b16865289811660208701528816604086015294506131f68561416c565b6fffffffffffffffffffffffffffffffff16608085015263ffffffff8616606085015283600d8b612710811061322857fe5b82519101805460208401516040850151606086015160809096015163ffffffff1990931663ffffffff9586161767ffffffff00000000191664010000000092861692909202919091177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000091851691909102177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000094841694909402939093176fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000091909416029290921790915561271d80546001810182556000919091527f567b94c0da53e726bc4ae9646679a9c3785e89324a3d6956b975c36a8a3162bf018b9055600680547f03994e0ddbf7a57c940a2289e9276e7c360cd03511fa3a364a41624cba3a762092859291908d1690811061337d57fe5b6000918252602090912001546040516133a292916001600160a01b0316908990614e90565b60405180910390a15050505095945050505050565b60008060006133c4614236565b506001600160a01b0388166000908152600760209081526040808320815160e081018352905463ffffffff80821680845264010000000083048216958401959095526801000000000000000082048116938301939093526c010000000000000000000000008104909216606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c082015291906136de5763ffffffff8916156136d95760068963ffffffff16815481106134b457fe5b6000918252602090912001546001600160a01b0390811695508a168514156134ee5760405162461bcd60e51b8152600401610a07906154be565b6001600160a01b038516156136d95763ffffffff89811683526001600160a01b038b16600090815260076020908152604091829020855181549287015184880151606089015160808a015160a08b015160c08c015163ffffffff19909816958a169590951767ffffffff000000001916640100000000948a1694909402939093177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000092891692909202919091177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009190971602959095177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff96871602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000091861691909102177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000949092169390930217909155517ff4c78ee7aea6f59d773994adfe29bbdd72b3f898d9d841ab904a3a647ef3c1a9906136cd908c908890614e76565b60405180910390a15060015b61370d565b6006826000015163ffffffff16815481106136f557fe5b6000918252602090912001546001600160a01b031694505b6001600160a01b0385161561403357613724614236565b506001600160a01b038516600090815260076020908152604091829020825160e081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081048316938201939093526c010000000000000000000000008304909116606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c0820152811561382d576080818101805160010161ffff9081169091529084015160a08084018051909201831690915284015160c08301805190910190911690525b6020810180518a0163ffffffff1690526040517f7d3bc7595eef4564f4f2761526db36a5cea53fc3aea968d02d2ca67aeb4a6cb8906138729088908c90600190614ecd565b60405180910390a16001600160a01b0386166000908152600760209081526040918290208351815492850151938501516060860151608087015160a088015160c089015163ffffffff1990971663ffffffff95861690811767ffffffff00000000191664010000000099871699909902989098177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000094861694909402939093177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009490921693909302177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff93841602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000091831691909102177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919093160291909117905515614031576006816000015163ffffffff1681548110613a2f57fe5b6000918252602090912001546001600160a01b03169450613a4e614236565b506001600160a01b038516600090815260076020908152604091829020825160e081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081048316938201939093526c010000000000000000000000008304909116606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c08201528215613b455760a08101805160010161ffff908116909152608085015160c08301805190910190911690525b604081810180518b0163ffffffff169052517f7d3bc7595eef4564f4f2761526db36a5cea53fc3aea968d02d2ca67aeb4a6cb890613b899088908c90600290614ecd565b60405180910390a16001600160a01b0386166000908152600760209081526040918290208351815492850151938501516060860151608087015160a088015160c089015163ffffffff1990971663ffffffff95861690811767ffffffff00000000191664010000000099871699909902989098177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000094861694909402939093177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009490921693909302177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff93841602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000091831691909102177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000091909316029190911790551561402f576006816000015163ffffffff1681548110613d4657fe5b6000918252602090912001546001600160a01b03169450613d65614236565b506001600160a01b038516600090815260076020908152604091829020825160e081018452905463ffffffff808216835264010000000082048116938301939093526801000000000000000081048316938201939093526c010000000000000000000000008304909116606082015261ffff70010000000000000000000000000000000083048116608083015272010000000000000000000000000000000000008304811660a08301527401000000000000000000000000000000000000000090920490911660c08201528315613e465760c08101805160010161ffff1690525b6060810180518a0163ffffffff1690526040517f7d3bc7595eef4564f4f2761526db36a5cea53fc3aea968d02d2ca67aeb4a6cb890613e8b9088908c90600390614ecd565b60405180910390a16001600160a01b0386166000908152600760209081526040918290208351815492850151938501516060860151608087015160a088015160c09098015163ffffffff1990961663ffffffff9485161767ffffffff00000000191664010000000097851697909702969096177fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff166801000000000000000092841692909202919091177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000009290911691909102177fffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000061ffff94851602177fffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff16720100000000000000000000000000000000000094841694909402939093177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000092909116919091021790555b505b505b5050955095509592505050565b600354808201908110156140665760405162461bcd60e51b8152600401610a07906156a9565b60038190556001600160a01b038316600081815260208190526040808220805486019055517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906140b890869061520b565b60405180910390a3505050565b60006040518060400160405280600281526020017f1901000000000000000000000000000000000000000000000000000000000000815250614105612bbf565b8360405160200161411893929190614e38565b604051602081830303815290604052805190602001209050919050565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218823060405160200161411893929190615248565b60006fffffffffffffffffffffffffffffffff821115612ff55760405162461bcd60e51b8152600401610a07906153e2565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106141fd578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082351617855561422a565b8280016001018555821561422a579182015b8281111561422a57823582559160200191906001019061420f565b50612ff592915061439a565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060c0016040528060006001600160a01b0316815260200160608152602001606081526020016060815260200160006fffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061436d57805160ff191683800117855561422a565b8280016001018555821561422a579182015b8281111561422a57825182559160200191906001019061437f565b5b80821115612ff5576000815560010161439b565b8035610b6981615a60565b60008083601f8401126143cb578182fd5b50813567ffffffffffffffff8111156143e2578182fd5b60208301915083602080830285010111156143fc57600080fd5b9250929050565b600082601f830112614413578081fd5b813561442661442182615a10565b6159e9565b81815291506020808301908481018184028601820187101561444757600080fd5b60005b8481101561446f57813561445d81615a60565b8452928201929082019060010161444a565b505050505092915050565b600082601f83011261448a578081fd5b813561449861442182615a10565b818152915060208083019084810160005b8481101561446f576144c0888484358a010161467d565b845292820192908201906001016144a9565b600082601f8301126144e2578081fd5b81356144f061442182615a10565b81815291506020808301908481018184028601820187101561451157600080fd5b6000805b8581101561453f5782358060030b811461452d578283fd5b85529383019391830191600101614515565b50505050505092915050565b600082601f83011261455b578081fd5b813561456961442182615a10565b81815291506020808301908481018184028601820187101561458a57600080fd5b6000805b8581101561453f57823561ffff811681146145a7578283fd5b8552938301939183019160010161458e565b600082601f8301126145c9578081fd5b81356145d761442182615a10565b8181529150602080830190848101818402860182018710156145f857600080fd5b60005b8481101561446f578135845292820192908201906001016145fb565b600082601f830112614627578081fd5b813561463561442182615a10565b81815291506020808301908481018184028601820187101561465657600080fd5b60005b8481101561446f5761466b8883614704565b84529282019290820190600101614659565b600082601f83011261468d578081fd5b813567ffffffffffffffff8111156146a3578182fd5b6146d460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016159e9565b91508082528360208285010111156146eb57600080fd5b8060208401602084013760009082016020015292915050565b803563ffffffff81168114610b6957600080fd5b600060208284031215614729578081fd5b81356117ea81615a60565b60008060408385031215614746578081fd5b823561475181615a60565b9150602083013561476181615a60565b809150509250929050565b600080600060608486031215614780578081fd5b833561478b81615a60565b9250602084013561479b81615a60565b929592945050506040919091013590565b600080600080600080600060e0888a0312156147c6578485fd5b87356147d181615a60565b965060208801356147e181615a60565b95506040880135945060608801359350608088013560ff81168114614804578384fd5b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215614835578081fd5b833561484081615a60565b9250602084013561485081615a75565b9150604084013561486081615a75565b809150509250925092565b6000806040838503121561487d578182fd5b823561488881615a60565b946020939093013593505050565b60008060008060008060008060008060006101608c8e0312156148b7578485fd5b6148c18d8d6143af565b9a506148d08d60208e01614704565b995067ffffffffffffffff8060408e013511156148eb578586fd5b6148fb8e60408f01358f0161467d565b995061490a8e60608f01614704565b98508060808e0135111561491c578586fd5b61492c8e60808f01358f0161467d565b975061493b8e60a08f01614704565b96508060c08e0135111561494d578586fd5b61495d8e60c08f01358f016145b9565b95508060e08e0135111561496f578485fd5b61497f8e60e08f01358f0161447a565b9450806101008e01351115614992578384fd5b506149a48d6101008e01358e016144d2565b92506149b48d6101208e016143af565b91506149c48d6101408e01614704565b90509295989b509295989b9093969950565b600080602083850312156149e8578182fd5b823567ffffffffffffffff8111156149fe578283fd5b614a0a858286016143ba565b90969095509350505050565b60008060008060408587031215614a2b578182fd5b843567ffffffffffffffff80821115614a42578384fd5b614a4e888389016143ba565b90965094506020870135915080821115614a66578384fd5b50614a73878288016143ba565b95989497509550505050565b600080600080600080600080610100898b031215614a9b578182fd5b883567ffffffffffffffff80821115614ab2578384fd5b614abe8c838d01614403565b995060208b0135915080821115614ad3578384fd5b614adf8c838d01614617565b985060408b0135915080821115614af4578384fd5b614b008c838d01614617565b975060608b0135915080821115614b15578384fd5b614b218c838d01614617565b965060808b0135915080821115614b36578384fd5b614b428c838d01614617565b955060a08b0135915080821115614b57578384fd5b614b638c838d0161454b565b945060c08b0135915080821115614b78578384fd5b614b848c838d0161454b565b935060e08b0135915080821115614b99578283fd5b50614ba68b828c0161454b565b9150509295985092959890939650565b60008060008060008060008060008060008060c08d8f031215614bd7578586fd5b67ffffffffffffffff8d351115614bec578586fd5b614bf98e8e358f016143ba565b909c509a5067ffffffffffffffff60208e01351115614c16578586fd5b614c268e60208f01358f016143ba565b909a50985067ffffffffffffffff60408e01351115614c43578586fd5b614c538e60408f01358f016143ba565b909850965067ffffffffffffffff60608e01351115614c70578586fd5b614c808e60608f01358f016143ba565b909650945067ffffffffffffffff60808e01351115614c9d578081fd5b614cad8e60808f01358f016143ba565b909450925067ffffffffffffffff60a08e01351115614cca578081fd5b614cda8e60a08f01358f016143ba565b81935080925050509295989b509295989b509295989b565b600060208284031215614d03578081fd5b81516117ea81615a75565b600060208284031215614d1f578081fd5b81356fffffffffffffffffffffffffffffffff811681146117ea578182fd5b600060208284031215614d4f578081fd5b5035919050565b600060208284031215614d67578081fd5b5051919050565b60008060408385031215614d80578182fd5b50508035926020909101359150565b600060208284031215614da0578081fd5b813563ffffffff811681146117ea578182fd5b6001600160a01b03169052565b60008151808452614dd8816020860160208601615a30565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b61ffff169052565b63ffffffff169052565b60008251614e2e818460208701615a30565b9190910192915050565b60008451614e4a818460208901615a30565b91909101928352506020820152604001919050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835263ffffffff91909116602083015260ff16604082015260600190565b6020808252825182820181905260009190848201906040850190845b81811015614f385783516001600160a01b031683529284019291840191600101614f13565b50909695505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015614fb5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614fa3858351614dc0565b94509285019290850190600101614f69565b5092979650505050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015614fb5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615021858351614dc0565b94509285019290850190600101614fe7565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015615121577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160c06001600160a01b03825116855288820151818a8701526150ac82870182614dc0565b91505087820151858203898701526150c48282614dc0565b915050606080830151868303828801526150de8382614dc0565b6080858101516fffffffffffffffffffffffffffffffff169089015260a09485015163ffffffff1694909701939093525050509386019390860190600101615057565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156151bb578151805163ffffffff908116865287820151811688870152868201518116878701526060808301518216908701526080808301516fffffffffffffffffffffffffffffffff169087015260a091820151169085015260c0909301929085019060010161514c565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614f38578351835292840192918401916001016151e4565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b92835260208301919091526001600160a01b0316604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526117ea6020830184614dc0565b60208082526009908201527f57726f6e672075726c0000000000000000000000000000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b6020808252600e908201527f57726f6e67207265666572726572000000000000000000000000000000000000604082015260600190565b60208082526016908201527f45524332303a206e6f207a65726f206164647265737300000000000000000000604082015260600190565b6020808252600b908201527f57726f6e67206f776e6572000000000000000000000000000000000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526015908201527f4e6f7420696e206372656174696f6e2070686173650000000000000000000000604082015260600190565b60208082526017908201527f506978656c3a206e6f7420656e6f7567682066756e6473000000000000000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526019908201527f4d4c4d3a2043616e277420726566657220796f757273656c6600000000000000604082015260600190565b60208082526018908201527f45524332303a20616c6c6f77616e636520746f6f206c6f770000000000000000604082015260600190565b60208082526011908201527f57726f6e67206465736372697074696f6e000000000000000000000000000000604082015260600190565b6020808252600d908201527f57726f6e6720706978656c4e7200000000000000000000000000000000000000604082015260600190565b6020808252600e908201527f45524332303a2045787069726564000000000000000000000000000000000000604082015260600190565b60208082526017908201527f496e697469616c697a6174696f6e2066696e6973686564000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600d908201527f4275726e20746f6f206d75636800000000000000000000000000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252600d908201527f4d696e74206f766572666c6f7700000000000000000000000000000000000000604082015260600190565b60208082526018908201527f45524332303a204f776e65722063616e6e6f7420626520300000000000000000604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743332204f766572666c6f770000000000604082015260600190565b60208082526016908201527f45524332303a2062616c616e636520746f6f206c6f7700000000000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b60208082526018908201527f45524332303a20496e76616c6964205369676e61747572650000000000000000604082015260600190565b60006101c0820190508982528860208301528760408301528660608301528560808301528460a083015261586260c083018551614e12565b602084015161587460e0840182614e12565b506040840151615888610100840182614e12565b50606084015161589c610120840182614e12565b5060808401516158b0610140840182614e0a565b5060a08401516158c4610160840182614e0a565b5060c08401516158d8610180840182614e0a565b506158e76101a0830184614db3565b9998505050505050505050565b63ffffffff95861681529385166020850152918416604084015290921660608201526fffffffffffffffffffffffffffffffff909116608082015260a00190565b63ffffffff97881681529587166020870152938616604086015291909416606084015261ffff9384166080840152831660a083015290911660c082015260e00190565b60ff91909116815260200190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159ba578283fd5b83018035915067ffffffffffffffff8211156159d4578283fd5b6020019150368190038213156143fc57600080fd5b60405181810167ffffffffffffffff81118282101715615a0857600080fd5b604052919050565b600067ffffffffffffffff821115615a26578081fd5b5060209081020190565b60005b83811015615a4b578181015183820152602001615a33565b83811115615a5a576000848401525b50505050565b6001600160a01b038116811461114757600080fd5b801515811461114757600080fdfea2646970667358221220497fc9216e5ec387babff86c07d0e5fdbfc80fc6b33b7da247d2fb9f782b9dbc64736f6c634300060c0033

Deployed Bytecode Sourcemap

23833:11699:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28056:149;;;;;;;;;;-1:-1:-1;28056:149:0;;;;;:::i;:::-;;:::i;:::-;;24113:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9962:506;;;;;;;;;;-1:-1:-1;9962:506:0;;;;;:::i;:::-;;:::i;24347:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17182:214::-;;;;;;;;;;-1:-1:-1;17182:214:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25488:20::-;;;;;;;;;;-1:-1:-1;25488:20:0;;;;;:::i;:::-;;:::i;18921:35::-;;;;;;;;;;;;;:::i;19755:84::-;;;;;;;;;;;;;:::i;15736:1151::-;;;;;;;;;;-1:-1:-1;15736:1151:0;;;;;:::i;:::-;;:::i;20195:363::-;;;;;;;;;;-1:-1:-1;20195:363:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24157:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34966:474::-;;;;;;;;;;-1:-1:-1;34966:474:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;19921:176::-;;;;;;;;;;-1:-1:-1;19921:176:0;;;;;:::i;:::-;;:::i;17458:104::-;;;;;;;;;;;;;:::i;29259:536::-;;;;;;;;;;-1:-1:-1;29259:536:0;;;;;:::i;:::-;;:::i;35448:81::-;;;;;;;;;;-1:-1:-1;35448:81:0;;;;;:::i;:::-;;:::i;10550:340::-;;;;;;;;;;;;;:::i;34610:348::-;;;;;;;;;;-1:-1:-1;34610:348:0;;;;;:::i;:::-;;:::i;26182:613::-;;;;;;;;;;-1:-1:-1;26182:613:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34179:194::-;;;;;;;;;;-1:-1:-1;34179:194:0;;;;;:::i;:::-;;:::i;26803:593::-;;;;;;;;;;-1:-1:-1;26803:593:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25517:74::-;;;;;;;;;;;;;:::i;29803:729::-;;;;;;;;;;-1:-1:-1;29803:729:0;;;;;:::i;:::-;;:::i;34381:221::-;;;;;;;;;;-1:-1:-1;34381:221:0;;;;;:::i;:::-;;:::i;27506:384::-;;;;;;;;;;-1:-1:-1;27506:384:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28645:342::-;;;;;;;;;;-1:-1:-1;28645:342:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14036:53::-;;;;;;;;;;-1:-1:-1;14036:53:0;;;;;:::i;:::-;;:::i;24310:30::-;;;;;;;;;;;;;:::i;25814:23::-;;;;;;;;;;-1:-1:-1;25814:23:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;14288:41::-;;;;;;;;;;-1:-1:-1;14288:41:0;;;;;:::i;:::-;;:::i;27898:150::-;;;;;;;;;;-1:-1:-1;27898:150:0;;;;;:::i;:::-;;:::i;9108:20::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24067:39::-;;;;;;;;;;;;;:::i;31869:2302::-;;;;;;:::i;:::-;;:::i;20105:84::-;;;;;;;;;;;;;:::i;30540:253::-;;;;;;;;;;;;;:::i;14726:703::-;;;;;;;;;;-1:-1:-1;14726:703:0;;;;;:::i;:::-;;:::i;25844:24::-;;;;;;;;;;-1:-1:-1;25844:24:0;;;;;:::i;:::-;;:::i;18191:674::-;;;;;;;;;;-1:-1:-1;18191:674:0;;;;;:::i;:::-;;:::i;14150:73::-;;;;;;;;;;-1:-1:-1;14150:73:0;;;;;:::i;:::-;;:::i;28213:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9135:27::-;;;;;;;;;;;;;:::i;28995:256::-;;;;;;;;;;-1:-1:-1;28995:256:0;;;;;:::i;:::-;;:::i;20895:39::-;;;;;;;;;;-1:-1:-1;20895:39:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;25597:74::-;;;;;;;;;;;;;:::i;28292:345::-;;;;;;;;;;-1:-1:-1;28292:345:0;;;;;:::i;:::-;;:::i;19722:26::-;;;;;;;;;;-1:-1:-1;19722:26:0;;;;;:::i;:::-;;:::i;27404:94::-;;;;;;;;;;;;;:::i;25462:19::-;;;;;;;;;;-1:-1:-1;25462:19:0;;;;;:::i;:::-;;:::i;28056:149::-;28136:9;28131:67;28151:16;;;28131:67;;;28176:4;28186:5;;28192:1;28186:8;;;;;;;;;;;;;;;;;;:::i;:::-;28176:19;;;;;;;-1:-1:-1;28176:19:0;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28169:3:0;;28131:67;;;;28056:149;;:::o;24113:37::-;;;;;;;;;;;;;;;;;;;:::o;9962:506::-;11018:5;;-1:-1:-1;;;;;11018:5:0;11004:10;:19;10996:64;;;;-1:-1:-1;;;10996:64:0;;;;;;;:::i;:::-;;;;;;;;;10101:6:::1;10097:364;;;-1:-1:-1::0;;;;;10155:22:0;::::1;::::0;::::1;::::0;:34:::1;;;10181:8;10155:34;10147:68;;;;-1:-1:-1::0;;;10147:68:0::1;;;;;;;:::i;:::-;10282:5;::::0;10261:37:::1;::::0;-1:-1:-1;;;;;10261:37:0;;::::1;::::0;10282:5:::1;::::0;10261:37:::1;::::0;10282:5:::1;::::0;10261:37:::1;10313:5;:16:::0;;-1:-1:-1;;;;;10313:16:0;::::1;::::0;;;::::1;;::::0;;;10344:12:::1;:25:::0;;;;::::1;::::0;;10097:364:::1;;;10426:12;:23:::0;;-1:-1:-1;;;;;10426:23:0;::::1;::::0;;;::::1;;::::0;;9962:506;;;:::o;24347:29::-;;;;:::o;17182:214::-;17284:10;17257:4;17274:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17274:30:0;;;;;;;;;;:39;;;17329:37;17257:4;;17274:30;;17329:37;;;;17307:6;;17329:37;:::i;:::-;;;;;;;;-1:-1:-1;17384:4:0;17182:214;;;;;:::o;25488:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25488:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25488:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18921:35::-;;;;:::o;19755:84::-;19820:9;:16;19755:84;:::o;15736:1151::-;15850:4;15935:11;;15931:885;;-1:-1:-1;;;;;15984:15:0;;15963:18;15984:15;;;;;;;;;;;16022:20;;;;16014:55;;;;-1:-1:-1;;;16014:55:0;;;;;;;:::i;:::-;16098:2;-1:-1:-1;;;;;16090:10:0;:4;-1:-1:-1;;;;;16090:10:0;;16086:719;;-1:-1:-1;;;;;16148:15:0;;16121:24;16148:15;;;:9;:15;;;;;;;;16164:10;16148:27;;;;;;;;-1:-1:-1;;16299:37:0;;16295:251;;16389:6;16369:16;:26;;16361:63;;;;-1:-1:-1;;;16361:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16447:15:0;;;;;;:9;:15;;;;;;;;16463:10;16447:27;;;;;;;16477:25;;;16447:55;;16295:251;-1:-1:-1;;;;;16572:16:0;;16564:51;;;;-1:-1:-1;;;16564:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;16686:15:0;;;:9;:15;;;;;;;;;;;16704:19;;;16686:37;;16766:13;;;;;;:23;;;;;;16086:719;15931:885;;16846:2;-1:-1:-1;;;;;16831:26:0;16840:4;-1:-1:-1;;;;;16831:26:0;;16850:6;16831:26;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;16875:4:0;15736:1151;;;;;:::o;20195:363::-;20296:16;20325:23;20371:5;20365:3;:11;20351:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20351:26:0;-1:-1:-1;20325:52:0;-1:-1:-1;20405:5:0;20388:138;20417:8;;:33;;20447:3;20417:33;;;20428:9;:16;20417:33;20412:1;:39;20388:138;;;20502:9;20512:1;20502:12;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20502:12:0;20482:6;20493:5;20489:1;:9;20482:17;;;;;;;;-1:-1:-1;;;;;20482:32:0;;;:17;;;;;;;;;;;:32;20453:3;;20388:138;;;-1:-1:-1;20543:6:0;20195:363;-1:-1:-1;;;20195:363:0:o;24157:35::-;24190:2;24157:35;:::o;34966:474::-;35015:16;35033:18;35053:13;35068;35083:15;35100:14;35116:19;;:::i;:::-;-1:-1:-1;;35176:7:0;:14;35214:9;:16;;35249:4;:11;35279:4;:11;-1:-1:-1;;;;;35311:15:0;;35137;35311;;;;;;;;;;;;35346:11;;35375:3;:9;;;;;;35368:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35415:9;;;;;;35176:14;;-1:-1:-1;35214:16:0;;-1:-1:-1;35249:11:0;;-1:-1:-1;35279:11:0;;-1:-1:-1;35311:15:0;;-1:-1:-1;35346:11:0;;35368:16;35137:15;;35405:27;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35405:27:0;35395:37;;34966:474;;;;;;;;;:::o;19921:176::-;20013:9;20008:82;20028:21;;;20008:82;;;20058:9;20073:10;;20084:1;20073:13;;;;;;;;;;;;;;;;;;;;:::i;:::-;20058:29;;;;;;;;-1:-1:-1;20058:29:0;;;;;;;;;;;;-1:-1:-1;;;;;20058:29:0;;;;;;;;;;20051:3;20008:82;;17458:104;17509:7;17536:18;:16;:18::i;:::-;17529:25;;17458:104;:::o;29259:536::-;11018:5;;-1:-1:-1;;;;;11018:5:0;11004:10;:19;10996:64;;;;-1:-1:-1;;;10996:64:0;;;;;;;:::i;:::-;29576:15:::1;::::0;:20;29568:56:::1;;;;-1:-1:-1::0;;;29568:56:0::1;;;;;;;:::i;:::-;29640:9;29635:153;29659:4;:11;29655:1;:15;29635:153;;;29692:84;29697:4;29702:1;29697:7;;;;;;;;;;;;;;29706:6;29713:1;29706:9;;;;;;;;;;;;;;29717:5;29723:1;29717:8;;;;;;;;;;;;;;29727:5;29733:1;29727:8;;;;;;;;;;;;;;29737:5;29743:1;29737:8;;;;;;;;;;;;;;29747:5;29753:1;29747:8;;;;;;;;;;;;;;29757:5;29763:1;29757:8;;;;;;;;;;;;;;29767:5;29773:1;29767:8;;;;;;;;;;;;;;29692:4;:84::i;:::-;29672:3;;29635:153;;;;29259:536:::0;;;;;;;;:::o;35448:81::-;35496:25;35502:10;35514:6;35496:5;:25::i;:::-;35448:81;:::o;10550:340::-;10618:12;;-1:-1:-1;;;;;10618:12:0;10670:10;:27;;10662:72;;;;-1:-1:-1;;;10662:72:0;;;;;;;:::i;:::-;10793:5;;10772:42;;-1:-1:-1;;;;;10772:42:0;;;;10793:5;;10772:42;;10793:5;;10772:42;10825:5;:21;;-1:-1:-1;;;;;10825:21:0;;;;;;;;;;10857:12;:25;;;;;;;10550:340::o;34610:348::-;11018:5;;-1:-1:-1;;;;;11018:5:0;11004:10;:19;10996:64;;;;-1:-1:-1;;;10996:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34674:18:0;::::1;::::0;34670:281:::1;;34783:5;::::0;;34790:30:::1;::::0;;;;34764:57:::1;::::0;-1:-1:-1;;;;;34783:5:0;;::::1;::::0;34790:15;::::1;::::0;::::1;::::0;:30:::1;::::0;34814:4:::1;::::0;34790:30:::1;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34764:18:0;::::1;::::0;:57;:18:::1;:57::i;:::-;34670:281;;;34895:5;::::0;:44:::1;::::0;34854:12:::1;::::0;-1:-1:-1;;;;;34895:5:0::1;::::0;34913:21:::1;::::0;34895:44:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;34610:348:0;:::o;26182:613::-;26255:27;26322:12;26304:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;26295:47;;26358:9;26353:435;26373:23;;;26353:435;;;26418:17;;:::i;:::-;26438:3;26442:12;;26455:1;26442:15;;;;;;;;;;;;;26438:20;;;;;;;26418:40;;;;;;;;26438:20;;;;26418:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26492:22:0;:12;;26505:1;26492:15;;;;;;;;;;;;;:20;:22::i;:::-;26473:6;26480:1;26473:9;;;;;;;;;;;;;;:16;;:41;;;;;;;;;;;26547:9;26557:4;:10;;;26547:21;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26547:21:0;26529:6;26536:1;26529:9;;;;;;;;;;;;;;:15;;:39;-1:-1:-1;;;;;26529:39:0;;;-1:-1:-1;;;;;26529:39:0;;;;;26599:4;26604;:8;;;26599:14;;;;;;;;;;;;;;;;;;;;26583:30;;;;;;;-1:-1:-1;;26583:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26599:14;26583:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;26590:1;26583:9;;;;;;;;;;;;;;:13;;:30;;;;26652:4;26657;:16;;;26652:22;;;;;;;;;;;;;;;;;;;;26628:46;;;;;;;-1:-1:-1;;26628:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26652:22;26628:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;26635:1;26628:9;;;;;;;;;;;;;;:21;;:46;;;;26708:4;26713;:11;;;26708:17;;;;;;;;;;;;;;;;;;;;26689:36;;;;;;;-1:-1:-1;;26689:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26708:17;26689:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;26696:1;26689:9;;;;;;;;;;;;;;:16;;:36;;;;26762:4;:14;;;26740:6;26747:1;26740:9;;;;;;;;;;;;;;;;;;:36;;;;:19;;;;:36;-1:-1:-1;26398:3:0;;26353:435;;;;26182:613;;;;:::o;34179:194::-;34238:12;34263;34278:3;34282:11;34278:16;;;;;;;;:26;;;;;;;-1:-1:-1;34322:9:0;;:43;;34354:11;:4;34363:1;34354:8;:11::i;:::-;34322:43;;;24244:4;34322:43;34315:50;34179:194;-1:-1:-1;;;34179:194:0:o;26803:593::-;26879:30;26952:12;26931:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;26922:50;;26988:9;26983:406;27003:23;;;26983:406;;;27048:17;;:::i;:::-;27068:3;27072:12;;27085:1;27072:15;;;;;;;;;;;;;27068:20;;;;;;;27048:40;;;;;;;;27068:20;;;;27048:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27122:22:0;:12;;27135:1;27122:15;;;;;;:22;27103:6;27110:1;27103:9;;;;;;;;;;;;;;:16;;:41;;;;;;;;;;;27177:4;:10;;;27159:6;27166:1;27159:9;;;;;;;;;;;;;;:15;;:28;;;;;;;;;;;27218:4;:8;;;27202:6;27209:1;27202:9;;;;;;;;;;;;;;:13;;:24;;;;;;;;;;;27265:4;:16;;;27241:6;27248:1;27241:9;;;;;;;;;;;;;;:21;;:40;;;;;;;;;;;27315:4;:11;;;27296:6;27303:1;27296:9;;;;;;;;;;;;;;:16;;:30;;;;;;;;;;;27363:4;:14;;;27341:6;27348:1;27341:9;;;;;;;;;;;;;;;;;;:36;;;;:19;;;;:36;-1:-1:-1;27028:3:0;;26983:406;;25517:74;25577:4;:11;25517:74;:::o;29803:729::-;11018:5;;-1:-1:-1;;;;;11018:5:0;11004:10;:19;10996:64;;;;-1:-1:-1;;;10996:64:0;;;;;;;:::i;:::-;30096:15:::1;::::0;:20;30088:56:::1;;;;-1:-1:-1::0;;;30088:56:0::1;;;;;;;:::i;:::-;30162:9;30157:368;30177:23:::0;;::::1;30157:368;;;30222:19;30244:12;;30257:1;30244:15;;;;;;;;;;;;;30222:37;;30295:218;;;;;;;;30327:7;;30335:1;30327:10;;;;;;;;;;;;;;;;;;;;:::i;:::-;30295:218;;;;;;30361:5;;30367:1;30361:8;;;;;;;;;;;;;;;;;;;;:::i;:::-;30295:218;;;;;;30401:13;;30415:1;30401:16;;;;;;;;;;;;;;;;;;;;:::i;:::-;30295:218;;;;;;30444:8;;30453:1;30444:11;;;;;;;;;;;;;;;;;;;;:::i;:::-;30295:218;;;;;;30485:9;;30495:1;30485:12;;;;;;;;;;;;;;;;;;;;:::i;:::-;30295:218;;::::0;;30276:3:::1;30280:11:::0;30276:16:::1;::::0;::::1;;;;;:237:::0;;:16;::::1;:237:::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;;30276:237:0;;::::1;;::::0;;::::1;;-1:-1:-1::0;;30276:237:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;::::1;::::0;;;;::::1;;;::::0;;-1:-1:-1;;30202:3:0::1;30157:368;;;;29803:729:::0;;;;;;;;;;;;:::o;34381:221::-;34452:12;;34477:118;34497:23;;;34477:118;;;34549:34;34558:24;34566:12;;34579:1;34566:15;;;;;;;;;;;;;34558:7;:24::i;:::-;34549:4;;:8;:34::i;:::-;34542:41;-1:-1:-1;34522:3:0;;34477:118;;27506:384;27634:7;:14;27575:29;;27634:22;;;27671:12;;;27667:59;;;-1:-1:-1;27710:3:0;27667:59;27765:6;27751:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27751:21:0;;27736:36;;27788:9;27783:100;27807:6;27803:1;:10;27783:100;;;27853:7;27869:1;27861:5;:9;27853:18;;;;;;;;;;;;;;;;27835:12;27848:1;27835:15;;;;;;;;;;;;;;;;;:36;27815:3;;27783:100;;;;27506:384;;;;;:::o;28645:342::-;28741:14;28768:21;28810:5;28804:3;:11;28792:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28768:48:0;-1:-1:-1;28844:5:0;28827:128;28856:8;;:28;;28881:3;28856:28;;;28867:4;:11;28856:28;28851:1;:34;28827:128;;;28936:4;28941:1;28936:7;;;;;;;;;;;;;;;;;;28916:27;;;;;;;-1:-1:-1;;28916:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28936:7;28916:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;28927:5;28923:1;:9;28916:17;;;;;;;;;;;;;;;;;:27;28887:3;;28827:128;;14036:53;;;;;;;;;;;;;;:::o;24310:30::-;;;;:::o;25814:23::-;;;;;;;;;;;;;;;;;-1:-1:-1;25814:23:0;;;;;;;;;;;;;;;;;;;;;;;:::o;14288:41::-;;;;;;;;;;;;;:::o;27898:150::-;27979:9;27974:67;27994:16;;;27974:67;;;28019:4;28029:5;;28035:1;28029:8;;;;;;;;;;;;;;;;;;:::i;:::-;28019:19;;;;;;;-1:-1:-1;28019:19:0;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28012:3:0;;27974:67;;9108:20;;;-1:-1:-1;;;;;9108:20:0;;:::o;24067:39::-;;;;;;;;;;;;;;;;;;;:::o;31869:2302::-;26077:15;;26058;:34;;:70;;;;;26114:14;;26096:15;:32;26058:70;26050:104;;;;-1:-1:-1;;;26050:104:0;;;;;;;:::i;:::-;23532:1:::1;23689:7;;:19;;23681:63;;;;-1:-1:-1::0;;;23681:63:0::1;;;;;;;:::i;:::-;23532:1;23755:7;:18:::0;32413:21:::2;::::0;;::::2;;32409:123;;;32461:9;:16:::0;:23:::2;::::0;:21:::2;:23::i;:::-;32499:9;:21:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;32499:21:0;;;;;::::2;::::0;;;::::2;-1:-1:-1::0;;;;;32499:21:0;::::2;;::::0;;32451:33;-1:-1:-1;32409:123:0::2;32560:9;:16:::0;32550:26:::2;::::0;::::2;;32542:50;;;;-1:-1:-1::0;;;32542:50:0::2;;;;;;;:::i;:::-;32609:19;::::0;;::::2;;32605:107;;;32653:4;:11:::0;:18:::2;::::0;:16:::2;:18::i;:::-;32686:4;:14:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;32686:14:0;;;;;;32645:26;;-1:-1:-1;32686:14:0::2;::::0;;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;:::i;:::-;;32605:107;32738:4;:11:::0;32730:19:::2;::::0;::::2;;32722:41;;;;-1:-1:-1::0;;;32722:41:0::2;;;;;;;:::i;:::-;32780:27;::::0;;::::2;;32776:131;;;32840:4;:11:::0;:18:::2;::::0;:16:::2;:18::i;:::-;32873:4;:22:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;32873:22:0;;;;;;32824:34;;-1:-1:-1;32873:22:0::2;::::0;;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;:::i;:::-;;32776:131;32941:4;:11:::0;32925:27:::2;::::0;::::2;;32917:57;;;;-1:-1:-1::0;;;32917:57:0::2;;;;;;;:::i;:::-;32991:24;::::0;;::::2;;32987:132;;;33045:9;:16:::0;:23:::2;::::0;:21:::2;:23::i;:::-;33083:9;:24:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;33083:24:0;;;;;::::2;::::0;;;::::2;-1:-1:-1::0;;;;;33083:24:0;::::2;;::::0;;33032:36;-1:-1:-1;32987:132:0::2;33150:9;:16:::0;33137:29:::2;::::0;::::2;;33129:56;;;;-1:-1:-1::0;;;33129:56:0::2;;;;;;;:::i;:::-;33221:4;:11:::0;33198:20:::2;33243:69;33267:6;:13;33263:1;:17;33243:69;;;33289:4;33299:6;33306:1;33299:9;;;;;;;;;::::0;;::::2;::::0;;;;;;;33289:20;;::::2;::::0;::::2;::::0;;-1:-1:-1;33289:20:0;;;;;;;;;::::2;::::0;;;;::::2;::::0;;;;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;33282:3:0::2;;33243:69;;;-1:-1:-1::0;33324:12:0::2;::::0;33347:241:::2;33371:12;:19;33367:1;:23;33347:241;;;33419:157;33428:147;33438:12;33451:1;33438:15;;;;;;;;;;;;;;33455:7;33464:5;33471:13;33486:88;33501:1;33487:8;33496:1;33487:11;;;;;;;;;;;;;;:15;;;;:79;;33554:8;33563:1;33554:11;;;;;;;;;;;;;;-1:-1:-1::0;;33551:14:0::2;33543:23;;33528:12;:38;33487:79;;;33513:8;33522:1;33513:11;;;;;;;;;;;;;;33505:20;;33487:79;33486:86;:88::i;:::-;33428:9;:147::i;33419:157::-;33412:164:::0;-1:-1:-1;33392:3:0::2;;33347:241;;;;33621:4;33608:9;:17;33600:53;;;;-1:-1:-1::0;;;33600:53:0::2;;;;;;;:::i;:::-;33736:19:::0;;33719:14:::2;::::0;;33811:96:::2;33816:10;33828::::0;33840:21:::2;:14;33736:19:::0;33851:2:::2;33840:10;:14::i;:21::-;33863;:14;:6:::0;33874:2:::2;33863:10;:14::i;:21::-;33886:20;:13;:6:::0;33897:1:::2;33886:10;:13::i;:20::-;33811:4;:96::i;:::-;33766:141:::0;;-1:-1:-1;33766:141:0;-1:-1:-1;33766:141:0;-1:-1:-1;33920:37:0::2;33926:10;33938:18;:6:::0;33949::::2;33938:10;:18::i;:::-;33920:5;:37::i;:::-;-1:-1:-1::0;;;;;33972:18:0;::::2;::::0;33968:59:::2;;33994:30;34000:4:::0;34006:17:::2;:6:::0;34017:5:::2;34006:10;:17::i;33994:30::-;-1:-1:-1::0;;;;;34041:18:0;::::2;::::0;34037:59:::2;;34063:30;34069:4:::0;34075:17:::2;:6:::0;34086:5:::2;34075:10;:17::i;34063:30::-;-1:-1:-1::0;;;;;34110:18:0;::::2;::::0;34106:58:::2;;34132:29;34138:4:::0;34144:16:::2;:6:::0;34155:4:::2;34144:10;:16::i;34132:29::-;-1:-1:-1::0;;23488:1:0::1;23796:7;:22:::0;-1:-1:-1;;;;;;;;;;;;;;;31869:2302:0:o;20105:84::-;20150:16;20177:9;20170:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20170:16:0;;;;;;;;;;;;;;;;;;;;;;;20105:84;:::o;30540:253::-;11018:5;;-1:-1:-1;;;;;11018:5:0;11004:10;:19;10996:64;;;;-1:-1:-1;;;10996:64:0;;;;;;;:::i;:::-;30608:15:::1;30626:7;30608:25:::0;::::1;30590:15;:43:::0;30661:35;;30644:14:::1;:52:::0;30707:7:::1;:19:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;30707:19:0;;;;30720:5:::1;30707:19:::0;;;::::1;::::0;30540:253::o;14726:703::-;14788:4;14879:11;;;;:31;;-1:-1:-1;14894:10:0;-1:-1:-1;;;;;14894:16:0;;;14879:31;14875:477;;;14958:10;14927:18;14948:21;;;;;;;;;;;14992:20;;;;14984:55;;;;-1:-1:-1;;;14984:55:0;;;;;;;:::i;:::-;15058:10;-1:-1:-1;;;;;15058:16:0;;;15054:287;;-1:-1:-1;;;;;15103:16:0;;15095:51;;;;-1:-1:-1;;;15095:51:0;;;;;;;:::i;:::-;15226:10;15216:9;:21;;;;;;;;;;;15240:19;;;15216:43;;-1:-1:-1;;;;;15302:13:0;;;;;;:23;;;;;;15054:287;14875:477;;15388:2;-1:-1:-1;;;;;15367:32:0;15376:10;-1:-1:-1;;;;;15367:32:0;;15392:6;15367:32;;;;;;:::i;25844:24::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25844:24:0;:::o;18191:674::-;-1:-1:-1;;;;;18411:20:0;;18403:57;;;;-1:-1:-1;;;18403:57:0;;;;;;;:::i;:::-;18497:8;18479:15;:26;18471:53;;;;-1:-1:-1;;;18471:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18557:155:0;;18599:21;18646:14;;;:6;:14;;;;;;;;;:16;;18557:128;18646:16;;;;;;18588:85;;18557:128;;18567:108;;18588:85;;17724:66;;18706:6;;18630:7;;18639:5;;18646:16;18664:8;;18588:85;;:::i;:::-;;;;;;;;;;;;;18578:96;;;;;;18567:10;:108::i;:::-;18677:1;18680;18683;18557:128;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18557:155:0;;18535:229;;;;-1:-1:-1;;;18535:229:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18775:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;;:34;;;18825:32;;;;;18804:5;;18825:32;:::i;:::-;;;;;;;;18191:674;;;;;;;:::o;14150:73::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;28213:::-;28253:15;28279:4;28272:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28272:11:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28213:73;:::o;9135:27::-;;;-1:-1:-1;;;;;9135:27:0;;:::o;28995:256::-;11018:5;;-1:-1:-1;;;;;11018:5:0;11004:10;:19;10996:64;;;;-1:-1:-1;;;10996:64:0;;;;;;;:::i;:::-;29095:15:::1;::::0;:20;29087:56:::1;;;;-1:-1:-1::0;;;29087:56:0::1;;;;;;;:::i;:::-;29159:9;29154:90;29174:13:::0;;::::1;29154:90;;;29209:23;29215:2;;29218:1;29215:5;;;;;;;;;;;;;;;;;;;;:::i;:::-;29222:6;;29229:1;29222:9;;;;;;;;;;;;;29209:5;:23::i;:::-;29189:3;;29154:90;;20895:39:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25597:74::-;25657:4;:11;25597:74;:::o;28292:345::-;28388:15;28416:22;28460:5;28454:3;:11;28441:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28416:50:0;-1:-1:-1;28494:5:0;28477:128;28506:8;;:28;;28531:3;28506:28;;;28517:4;:11;28506:28;28501:1;:34;28477:128;;;28586:4;28591:1;28586:7;;;;;;;;;;;;;;;;;;28566:27;;;;;;;-1:-1:-1;;28566:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28586:7;28566:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;28577:5;28573:1;:9;28566:17;;;;;;;;;;;;;;;;;:27;28537:3;;28477:128;;19722:26;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19722:26:0;;-1:-1:-1;19722:26:0;:::o;27404:94::-;27476:7;:14;27404:94;:::o;25462:19::-;;;;;;;;;;12732:237;12783:7;12841:9;12879:25;12868:36;;:93;;12927:34;12953:7;12927:25;:34::i;:::-;12868:93;;;12907:17;12868:93;12861:100;;;12732:237;:::o;21055:414::-;21225:236;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21214:8:0;;;;-1:-1:-1;21214:8:0;;;:3;:8;;;;;;;:247;;;;;;;;;;;;;;;;-1:-1:-1;;21214:247:0;;;;;;;-1:-1:-1;;21214:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21055:414::o;19282:242::-;-1:-1:-1;;;;;19355:15:0;;:9;:15;;;;;;;;;;;:25;-1:-1:-1;19355:25:0;19347:51;;;;-1:-1:-1;;;19347:51:0;;;;;;;:::i;:::-;19409:11;:21;;;;;;;-1:-1:-1;;;;;19441:15:0;;19409:11;19441:15;;;;;;;;;;;:25;;;;;;;19482:34;19409:11;;19441:15;19482:34;;;;19424:6;;19482:34;:::i;:::-;;;;;;;;19282:242;;:::o;7691:340::-;7810:12;7824:17;7853:5;-1:-1:-1;;;;;7845:19:0;4670:10;7888:12;;7902:2;7906:6;7865:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7845:69;;;;7865:48;7845:69;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7809:105;;;;7933:7;:57;;;;-1:-1:-1;7945:11:0;;:16;;:44;;;7976:4;7965:24;;;;;;;;;;;;:::i;:::-;7925:98;;;;-1:-1:-1;;;7925:98:0;;;;;;;:::i;1872:156::-;1920:8;1949:15;;;;1941:55;;;;-1:-1:-1;;;1941:55:0;;;;;;;:::i;:::-;-1:-1:-1;2018:1:0;1872:156::o;1376:155::-;1434:9;1464:6;;;:30;;-1:-1:-1;;1479:5:0;;;1493:1;1488;1479:5;1488:1;1474:15;;;;;:20;1464:30;1456:67;;;;-1:-1:-1;;;1456:67:0;;;;;;;:::i;1081:141::-;1174:5;;;1169:16;;;;1161:53;;;;-1:-1:-1;;;1161:53:0;;;;;;;:::i;30801:1060::-;31027:4;:11;30978:17;;31016:22;;;;31008:48;;;;-1:-1:-1;;;31008:48:0;;;;;;;:::i;:::-;31069:19;;:::i;:::-;31091:3;31095:11;31091:16;;;;;;;31069:38;;;;;;;;31091:16;;;;31069:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31281:9;:23;;31069:38;;-1:-1:-1;;;;;31281:23:0;;;;;;;;;;;;;;;;31335:16;;;;31376:52;;-1:-1:-1;;;;;31281:23:0;;;;-1:-1:-1;31315:36:0;;;31281:23;;31418:5;;31315:36;;31376:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31362:66:0;;-1:-1:-1;;31453:14:0;;:53;;31490:16;:9;31504:1;31490:13;:16::i;:::-;31453:53;;;24244:4;31453:53;31519:22;;;;;;31552:18;;;:10;;;:18;31581:34;;:18;;;:34;31441:65;-1:-1:-1;31645:17:0;31441:65;31645:15;:17::i;:::-;31626:36;;:16;;;:36;31673:24;;;:13;;;:24;31626:6;31708:3;31712:11;31708:16;;;;;;;:25;;:16;;:25;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31708:25:0;;;;;;;;-1:-1:-1;;31708:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31746:7;:25;;-1:-1:-1;31746:25:0;;;;-1:-1:-1;31746:25:0;;;;;;;;;31823:9;:18;;31789:64;;31808:13;;31823:9;:18;;;;;;;;;;;;;;;;;;;;31789:64;;;;;-1:-1:-1;;;;;31823:18:0;;31843:9;;31789:64;:::i;:::-;;;;;;;;30801:1060;;;;;;;;;;;:::o;21477:1932::-;21592:12;21606;21620;21645:19;;:::i;:::-;-1:-1:-1;;;;;;21667:8:0;;;;;;:3;:8;;;;;;;;21645:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21667:8;21707:485;;21748:12;;;;21744:375;;21788:9;21798:7;21788:18;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21788:18:0;;;;-1:-1:-1;21833:11:0;;;;;21825:49;;;;-1:-1:-1;;;21825:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21899:18:0;;;21895:209;;21942:21;;;;;;-1:-1:-1;;;;;21986:8:0;;21942:11;21986:8;;;:3;:8;;;;;;;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21986:15:0;;;;;;;;;;-1:-1:-1;;21986:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22029:20;;;;;21986:8;;22044:4;;22029:20;:::i;:::-;;;;;;;;-1:-1:-1;22080:4:0;21895:209;21707:485;;;22158:9;22168:4;:11;;;22158:22;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22158:22:0;;-1:-1:-1;21707:485:0;-1:-1:-1;;;;;22208:18:0;;;22204:1198;;22243:20;;:::i;:::-;-1:-1:-1;;;;;;22266:9:0;;;;;;:3;:9;;;;;;;;;22243:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22290:147;;;;22320:11;;;;:13;;;;;;;;;;;22367:10;;;;22352:11;;;;:25;;;;;;;;;;22411:10;;;22396:11;;;:25;;;;;;;;;;22290:147;22451:15;;;:28;;;;;;;;22499:27;;;;;;22507:4;;22451:28;;22524:1;;22499:27;:::i;:::-;;;;;;;;-1:-1:-1;;;;;22541:9:0;;;;;;:3;:9;;;;;;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22541:17:0;;;;;;;;;;-1:-1:-1;;22541:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22577;22573:818;;22622:9;22632:5;:12;;;22622:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22622:23:0;;-1:-1:-1;22664:20:0;;:::i;:::-;-1:-1:-1;;;;;;22687:9:0;;;;;;:3;:9;;;;;;;;;22664:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22715:115;;;;22749:11;;;:13;;;;;;;;;;;22800:10;;;;22785:11;;;:25;;;;;;;;;;22715:115;22848:15;;;;:28;;;;;;;;22900:27;;;;;22908:4;;22848:28;;22925:1;;22900:27;:::i;:::-;;;;;;;;-1:-1:-1;;;;;22946:9:0;;;;;;:3;:9;;;;;;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22946:17:0;;;;;;;;;;-1:-1:-1;;22946:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22986;22982:394;;23035:9;23045:5;:12;;;23035:23;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23035:23:0;;-1:-1:-1;23081:20:0;;:::i;:::-;-1:-1:-1;;;;;;23104:9:0;;;;;;:3;:9;;;;;;;;;23081:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23136:75;;;;23174:11;;;:13;;;;;;;;23136:75;23233:15;;;:28;;;;;;;;23289:27;;;;;;23297:4;;23233:28;;23314:1;;23289:27;:::i;:::-;;;;;;;;-1:-1:-1;;;;;23339:9:0;;;;;;:3;:9;;;;;;;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23339:17:0;;;;;;;;-1:-1:-1;;23339:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22982:394;22573:818;;22204:1198;;21477:1932;;;;;;;;;;;:::o;18965:309::-;19055:11;;:20;;;;19094:29;;;19086:55;;;;-1:-1:-1;;;19086:55:0;;;;;;;:::i;:::-;19152:11;:28;;;-1:-1:-1;;;;;19191:15:0;;:9;:15;;;;;;;;;;;:25;;;;;;19232:34;;;;;19210:6;;19232:34;:::i;:::-;;;;;;;;18965:309;;;:::o;12977:331::-;13038:14;13154:40;;;;;;;;;;;;;;;;;13217:18;:16;:18::i;:::-;13258:8;13115:170;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13087:213;;;;;;13065:235;;12977:331;;;:::o;11960:277::-;12034:7;11546:68;12164:7;12198:4;12085:133;;;;;;;;;;:::i;1539:161::-;1588:9;1618:16;;;;1610:57;;;;-1:-1:-1;;;1610:57:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:130;72:20;;97:33;72:20;97:33;:::i;160:352::-;;;290:3;283:4;275:6;271:17;267:27;257:2;;-1:-1;;298:12;257:2;-1:-1;328:20;;368:18;357:30;;354:2;;;-1:-1;;390:12;354:2;434:4;426:6;422:17;410:29;;485:3;434:4;;469:6;465:17;426:6;451:32;;448:41;445:2;;;502:1;;492:12;445:2;250:262;;;;;:::o;538:707::-;;655:3;648:4;640:6;636:17;632:27;622:2;;-1:-1;;663:12;622:2;710:6;697:20;732:80;747:64;804:6;747:64;:::i;:::-;732:80;:::i;:::-;840:21;;;723:89;-1:-1;884:4;897:14;;;;872:17;;;986;;;977:27;;;;974:36;-1:-1;971:2;;;1023:1;;1013:12;971:2;1048:1;1033:206;1058:6;1055:1;1052:13;1033:206;;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1126:50;;1190:14;;;;1218;;;;1080:1;1073:9;1033:206;;;1037:14;;;;;615:630;;;;:::o;1656:705::-;;1782:3;1775:4;1767:6;1763:17;1759:27;1749:2;;-1:-1;;1790:12;1749:2;1837:6;1824:20;1859:89;1874:73;1940:6;1874:73;:::i;1859:89::-;1976:21;;;1850:98;-1:-1;2020:4;2033:14;;;;2008:17;;;2128:1;2113:242;2138:6;2135:1;2132:13;2113:242;;;2245:46;2287:3;2020:4;2221:3;2208:17;2012:6;2196:30;;2245:46;:::i;:::-;2233:59;;2306:14;;;;2334;;;;2160:1;2153:9;2113:242;;2385:701;;2500:3;2493:4;2485:6;2481:17;2477:27;2467:2;;-1:-1;;2508:12;2467:2;2555:6;2542:20;2577:78;2592:62;2647:6;2592:62;:::i;2577:78::-;2683:21;;;2568:87;-1:-1;2727:4;2740:14;;;;2715:17;;;2829;;;2820:27;;;;2817:36;-1:-1;2814:2;;;2866:1;;2856:12;2814:2;2891:1;;2876:204;2901:6;2898:1;2895:13;2876:204;;;7901:6;7888:20;81650:5;79453:1;79442:20;81627:5;81624:33;81614:2;;2891:1;;81661:12;81614:2;2969:48;;3031:14;;;;3059;;;;2923:1;2916:9;2876:204;;;2880:14;;;;;;2460:626;;;;:::o;3878:704::-;;3994:3;3987:4;3979:6;3975:17;3971:27;3961:2;;-1:-1;;4002:12;3961:2;4049:6;4036:20;4071:79;4086:63;4142:6;4086:63;:::i;4071:79::-;4178:21;;;4062:88;-1:-1;4222:4;4235:14;;;;4210:17;;;4324;;;4315:27;;;;4312:36;-1:-1;4309:2;;;4361:1;;4351:12;4309:2;4386:1;;4371:205;4396:6;4393:1;4390:13;4371:205;;;8623:6;8610:20;79666:6;81896:5;79655:18;81872:5;81869:34;81859:2;;4386:1;;81907:12;81859:2;4464:49;;4527:14;;;;4555;;;;4418:1;4411:9;4371:205;;4986:707;;5103:3;5096:4;5088:6;5084:17;5080:27;5070:2;;-1:-1;;5111:12;5070:2;5158:6;5145:20;5180:80;5195:64;5252:6;5195:64;:::i;5180:80::-;5288:21;;;5171:89;-1:-1;5332:4;5345:14;;;;5320:17;;;5434;;;5425:27;;;;5422:36;-1:-1;5419:2;;;5471:1;;5461:12;5419:2;5496:1;5481:206;5506:6;5503:1;5500:13;5481:206;;;8746:20;;5574:50;;5638:14;;;;5666;;;;5528:1;5521:9;5481:206;;6094:704;;6210:3;6203:4;6195:6;6191:17;6187:27;6177:2;;-1:-1;;6218:12;6177:2;6265:6;6252:20;6287:79;6302:63;6358:6;6302:63;:::i;6287:79::-;6394:21;;;6278:88;-1:-1;6438:4;6451:14;;;;6426:17;;;6540;;;6531:27;;;;6528:36;-1:-1;6525:2;;;6577:1;;6567:12;6525:2;6602:1;6587:205;6612:6;6609:1;6606:13;6587:205;;;6692:36;6724:3;6712:10;6692:36;:::i;:::-;6680:49;;6743:14;;;;6771;;;;6634:1;6627:9;6587:205;;7210:440;;7311:3;7304:4;7296:6;7292:17;7288:27;7278:2;;-1:-1;;7319:12;7278:2;7366:6;7353:20;73313:18;73305:6;73302:30;73299:2;;;-1:-1;;73335:12;73299:2;7388:64;73476:4;73408:9;7304:4;73393:6;73389:17;73385:33;73466:15;7388:64;:::i;:::-;7379:73;;7472:6;7465:5;7458:21;7576:3;73476:4;7567:6;7500;7558:16;;7555:25;7552:2;;;7593:1;;7583:12;7552:2;80514:6;73476:4;7500:6;7496:17;73476:4;7534:5;7530:16;80491:30;80570:1;80552:16;;;73476:4;80552:16;80545:27;7534:5;7271:379;-1:-1;;7271:379::o;8957:128::-;9023:20;;79964:10;79953:22;;82115:34;;82105:2;;82163:1;;82153:12;9225:241;;9329:2;9317:9;9308:7;9304:23;9300:32;9297:2;;;-1:-1;;9335:12;9297:2;85:6;72:20;97:33;124:5;97:33;:::i;9473:366::-;;;9594:2;9582:9;9573:7;9569:23;9565:32;9562:2;;;-1:-1;;9600:12;9562:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;9652:63;-1:-1;9752:2;9791:22;;72:20;97:33;72:20;97:33;:::i;:::-;9760:63;;;;9556:283;;;;;:::o;9846:491::-;;;;9984:2;9972:9;9963:7;9959:23;9955:32;9952:2;;;-1:-1;;9990:12;9952:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;10042:63;-1:-1;10142:2;10181:22;;72:20;97:33;72:20;97:33;:::i;:::-;9946:391;;10150:63;;-1:-1;;;10250:2;10289:22;;;;8746:20;;9946:391::o;10344:991::-;;;;;;;;10548:3;10536:9;10527:7;10523:23;10519:33;10516:2;;;-1:-1;;10555:12;10516:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;10607:63;-1:-1;10707:2;10746:22;;72:20;97:33;72:20;97:33;:::i;:::-;10715:63;-1:-1;10815:2;10854:22;;8746:20;;-1:-1;10923:2;10962:22;;8746:20;;-1:-1;11031:3;11069:22;;9157:20;80058:4;80047:16;;82236:33;;82226:2;;-1:-1;;82273:12;82226:2;10510:825;;;;-1:-1;10510:825;;;;11040:61;11138:3;11178:22;;7139:20;;-1:-1;11247:3;11287:22;;;7139:20;;10510:825;-1:-1;;10510:825::o;11342:479::-;;;;11474:2;11462:9;11453:7;11449:23;11445:32;11442:2;;;-1:-1;;11480:12;11442:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;11532:63;-1:-1;11632:2;11668:22;;6870:20;6895:30;6870:20;6895:30;:::i;:::-;11640:60;-1:-1;11737:2;11773:22;;6870:20;6895:30;6870:20;6895:30;:::i;:::-;11745:60;;;;11436:385;;;;;:::o;11828:366::-;;;11949:2;11937:9;11928:7;11924:23;11920:32;11917:2;;;-1:-1;;11955:12;11917:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;12007:63;12107:2;12146:22;;;;8746:20;;-1:-1;;;11911:283::o;12201:2127::-;;;;;;;;;;;;12574:3;12562:9;12553:7;12549:23;12545:33;12542:2;;;-1:-1;;12581:12;12542:2;12643:53;12688:7;12664:22;12643:53;:::i;:::-;12633:63;;12751:52;12795:7;12733:2;12775:9;12771:22;12751:52;:::i;:::-;12741:62;;12892:18;;12868:2;12857:9;12853:18;12840:32;12881:30;12878:2;;;-1:-1;;12914:12;12878:2;12944:63;12999:7;12868:2;12857:9;12853:18;12840:32;12979:9;12975:22;12944:63;:::i;:::-;12934:73;;13062:52;13106:7;13044:2;13086:9;13082:22;13062:52;:::i;:::-;13052:62;;12892:18;13179:3;13168:9;13164:19;13151:33;13193:30;13190:2;;;-1:-1;;13226:12;13190:2;13256:63;13311:7;13179:3;13168:9;13164:19;13151:33;13291:9;13287:22;13256:63;:::i;:::-;13246:73;;13375:52;13419:7;13356:3;13399:9;13395:22;13375:52;:::i;:::-;13365:62;;12892:18;13492:3;13481:9;13477:19;13464:33;13506:30;13503:2;;;-1:-1;;13539:12;13503:2;13569:78;13639:7;13492:3;13481:9;13477:19;13464:33;13619:9;13615:22;13569:78;:::i;:::-;13559:88;;12892:18;13712:3;13701:9;13697:19;13684:33;13726:30;13723:2;;;-1:-1;;13759:12;13723:2;13789:87;13868:7;13712:3;13701:9;13697:19;13684:33;13848:9;13844:22;13789:87;:::i;:::-;13779:97;;12892:18;13941:3;13930:9;13926:19;13913:33;13955:30;13952:2;;;-1:-1;;13988:12;13952:2;;14018:76;14086:7;13941:3;13930:9;13926:19;13913:33;14066:9;14062:22;14018:76;:::i;:::-;14008:86;;14150:53;14195:7;14131:3;14175:9;14171:22;14150:53;:::i;:::-;14140:63;;14260:52;14304:7;14240:3;14284:9;14280:22;14260:52;:::i;:::-;14249:63;;12536:1792;;;;;;;;;;;;;;:::o;14335:397::-;;;14474:2;14462:9;14453:7;14449:23;14445:32;14442:2;;;-1:-1;;14480:12;14442:2;14538:17;14525:31;14576:18;14568:6;14565:30;14562:2;;;-1:-1;;14598:12;14562:2;14636:80;14708:7;14699:6;14688:9;14684:22;14636:80;:::i;:::-;14618:98;;;;-1:-1;14436:296;-1:-1;;;;14436:296::o;14739:678::-;;;;;14930:2;14918:9;14909:7;14905:23;14901:32;14898:2;;;-1:-1;;14936:12;14898:2;14994:17;14981:31;15032:18;;15024:6;15021:30;15018:2;;;-1:-1;;15054:12;15018:2;15092:80;15164:7;15155:6;15144:9;15140:22;15092:80;:::i;:::-;15074:98;;-1:-1;15074:98;-1:-1;15237:2;15222:18;;15209:32;;-1:-1;15250:30;;;15247:2;;;-1:-1;;15283:12;15247:2;;15321:80;15393:7;15384:6;15373:9;15369:22;15321:80;:::i;:::-;14892:525;;;;-1:-1;15303:98;-1:-1;;;;14892:525::o;15424:2195::-;;;;;;;;;15840:3;15828:9;15819:7;15815:23;15811:33;15808:2;;;-1:-1;;15847:12;15808:2;15905:17;15892:31;15943:18;;15935:6;15932:30;15929:2;;;-1:-1;;15965:12;15929:2;15995:78;16065:7;16056:6;16045:9;16041:22;15995:78;:::i;:::-;15985:88;;16138:2;16127:9;16123:18;16110:32;16096:46;;15943:18;16154:6;16151:30;16148:2;;;-1:-1;;16184:12;16148:2;16214:77;16283:7;16274:6;16263:9;16259:22;16214:77;:::i;:::-;16204:87;;16356:2;16345:9;16341:18;16328:32;16314:46;;15943:18;16372:6;16369:30;16366:2;;;-1:-1;;16402:12;16366:2;16432:77;16501:7;16492:6;16481:9;16477:22;16432:77;:::i;:::-;16422:87;;16574:2;16563:9;16559:18;16546:32;16532:46;;15943:18;16590:6;16587:30;16584:2;;;-1:-1;;16620:12;16584:2;16650:77;16719:7;16710:6;16699:9;16695:22;16650:77;:::i;:::-;16640:87;;16792:3;16781:9;16777:19;16764:33;16750:47;;15943:18;16809:6;16806:30;16803:2;;;-1:-1;;16839:12;16803:2;16869:77;16938:7;16929:6;16918:9;16914:22;16869:77;:::i;:::-;16859:87;;17011:3;17000:9;16996:19;16983:33;16969:47;;15943:18;17028:6;17025:30;17022:2;;;-1:-1;;17058:12;17022:2;17088:77;17157:7;17148:6;17137:9;17133:22;17088:77;:::i;:::-;17078:87;;17230:3;17219:9;17215:19;17202:33;17188:47;;15943:18;17247:6;17244:30;17241:2;;;-1:-1;;17277:12;17241:2;17307:77;17376:7;17367:6;17356:9;17352:22;17307:77;:::i;:::-;17297:87;;17449:3;17438:9;17434:19;17421:33;17407:47;;15943:18;17466:6;17463:30;17460:2;;;-1:-1;;17496:12;17460:2;;17526:77;17595:7;17586:6;17575:9;17571:22;17526:77;:::i;:::-;17516:87;;;15802:1817;;;;;;;;;;;:::o;18884:1801::-;;;;;;;;;;;;;19281:3;19269:9;19260:7;19256:23;19252:33;19249:2;;;-1:-1;;19288:12;19249:2;19384:18;19346:17;19333:31;19373:30;19370:2;;;-1:-1;;19406:12;19370:2;19444:80;19516:7;19346:17;19333:31;19496:9;19492:22;19444:80;:::i;:::-;19426:98;;-1:-1;19426:98;-1:-1;19384:18;19589:2;19574:18;;19561:32;19602:30;19599:2;;;-1:-1;;19635:12;19599:2;19673:80;19745:7;19589:2;19578:9;19574:18;19561:32;19725:9;19721:22;19673:80;:::i;:::-;19655:98;;-1:-1;19655:98;-1:-1;19384:18;19818:2;19803:18;;19790:32;19831:30;19828:2;;;-1:-1;;19864:12;19828:2;19902:79;19973:7;19818:2;19807:9;19803:18;19790:32;19953:9;19949:22;19902:79;:::i;:::-;19884:97;;-1:-1;19884:97;-1:-1;19384:18;20046:2;20031:18;;20018:32;20059:30;20056:2;;;-1:-1;;20092:12;20056:2;20130:79;20201:7;20046:2;20035:9;20031:18;20018:32;20181:9;20177:22;20130:79;:::i;:::-;20112:97;;-1:-1;20112:97;-1:-1;19384:18;20274:3;20259:19;;20246:33;20288:30;20285:2;;;-1:-1;;20321:12;20285:2;20359:79;20430:7;20274:3;20263:9;20259:19;20246:33;20410:9;20406:22;20359:79;:::i;:::-;20341:97;;-1:-1;20341:97;-1:-1;19384:18;20503:3;20488:19;;20475:33;20517:30;20514:2;;;-1:-1;;20550:12;20514:2;20590:79;20661:7;20503:3;20492:9;20488:19;20475:33;20641:9;20637:22;20590:79;:::i;:::-;20570:99;;;;;;;;19243:1442;;;;;;;;;;;;;;:::o;20692:257::-;;20804:2;20792:9;20783:7;20779:23;20775:32;20772:2;;;-1:-1;;20810:12;20772:2;7018:6;7012:13;7030:30;7054:5;7030:30;:::i;21232:241::-;;21336:2;21324:9;21315:7;21311:23;21307:32;21304:2;;;-1:-1;;21342:12;21304:2;8487:6;8474:20;79547:34;81774:5;79536:46;81749:5;81746:35;81736:2;;-1:-1;;81785:12;21480:241;;21584:2;21572:9;21563:7;21559:23;21555:32;21552:2;;;-1:-1;;21590:12;21552:2;-1:-1;8746:20;;21546:175;-1:-1;21546:175::o;21728:263::-;;21843:2;21831:9;21822:7;21818:23;21814:32;21811:2;;;-1:-1;;21849:12;21811:2;-1:-1;8894:13;;21805:186;-1:-1;21805:186::o;21998:366::-;;;22119:2;22107:9;22098:7;22094:23;22090:32;22087:2;;;-1:-1;;22125:12;22087:2;-1:-1;;8746:20;;;22277:2;22316:22;;;8746:20;;-1:-1;22081:283::o;22371:239::-;;22474:2;22462:9;22453:7;22449:23;22445:32;22442:2;;;-1:-1;;22480:12;22442:2;9036:6;9023:20;79964:10;82142:5;79953:22;82118:5;82115:34;82105:2;;-1:-1;;82153:12;23969:103;-1:-1;;;;;79747:54;24030:37;;24024:48::o;30153:323::-;;30285:5;74958:12;76957:6;76952:3;76945:19;30368:52;30413:6;76994:4;76989:3;76985:14;76994:4;30394:5;30390:16;30368:52;:::i;:::-;81032:2;81012:14;81028:7;81008:28;30432:39;;;;76994:4;30432:39;;30233:243;-1:-1;;30233:243::o;45716:100::-;79666:6;79655:18;45775:36;;45769:47::o;46170:100::-;79964:10;79953:22;46229:36;;46223:47::o;46508:271::-;;30993:5;74958:12;31104:52;31149:6;31144:3;31137:4;31130:5;31126:16;31104:52;:::i;:::-;31168:16;;;;;46642:137;-1:-1;;46642:137::o;46786:553::-;;30993:5;74958:12;31104:52;31149:6;31144:3;31137:4;31130:5;31126:16;31104:52;:::i;:::-;31168:16;;;;29945:37;;;-1:-1;31137:4;47191:12;;29945:37;47302:12;;;46978:361;-1:-1;46978:361::o;47346:379::-;47710:10;47534:191::o;47732:222::-;-1:-1;;;;;79747:54;;;;24030:37;;47859:2;47844:18;;47830:124::o;47961:333::-;-1:-1;;;;;79747:54;;;24030:37;;79747:54;;48280:2;48265:18;;24030:37;48116:2;48101:18;;48087:207::o;48301:444::-;-1:-1;;;;;79747:54;;;24030:37;;79747:54;;;;48648:2;48633:18;;24030:37;48731:2;48716:18;;29945:37;;;;48484:2;48469:18;;48455:290::o;48752:333::-;-1:-1;;;;;79747:54;;;;24030:37;;49071:2;49056:18;;29945:37;48907:2;48892:18;;48878:207::o;49092:452::-;-1:-1;;;;;79747:54;;;;24030:37;;79964:10;79953:22;;;;49441:2;49426:18;;46229:36;80058:4;80047:16;49530:2;49515:18;;31273:56;49279:2;49264:18;;49250:294::o;50469:370::-;50646:2;50660:47;;;74958:12;;50631:18;;;76945:19;;;50469:370;;50646:2;73942:14;;;;76985;;;;50469:370;24638:260;24663:6;24660:1;24657:13;24638:260;;;24724:13;;-1:-1;;;;;79747:54;24030:37;;76145:14;;;;22771;;;;24685:1;24678:9;24638:260;;;-1:-1;50713:116;;50617:222;-1:-1;;;;;;50617:222::o;50846:406::-;;51041:2;;51030:9;51026:18;51041:2;51062:17;51055:47;51116:126;25175:5;74958:12;76957:6;76952:3;76945:19;76985:14;51030:9;76985:14;25187:102;;76985:14;51041:2;25346:6;25342:17;51030:9;25333:27;;25321:39;;51041:2;25440:5;73942:14;-1:-1;25479:357;25504:6;25501:1;25498:13;25479:357;;;25556:20;51030:9;25560:4;25556:20;;25551:3;25544:33;22919:64;22979:3;25611:6;25605:13;22919:64;:::i;:::-;25625:90;-1:-1;25815:14;;;;76145;;;;25526:1;25519:9;25479:357;;;-1:-1;51108:134;;51012:240;-1:-1;;;;;;;51012:240::o;51259:410::-;;51456:2;;51445:9;51441:18;51456:2;51477:17;51470:47;51531:128;26135:5;74958:12;76957:6;76952:3;76945:19;76985:14;51445:9;76985:14;26147:103;;76985:14;51456:2;26307:6;26303:17;51445:9;26294:27;;26282:39;;51456:2;26402:5;73942:14;-1:-1;26441:360;26466:6;26463:1;26460:13;26441:360;;;26518:20;51445:9;26522:4;26518:20;;26513:3;26506:33;23119:66;23181:3;26573:6;26567:13;23119:66;:::i;:::-;26587:92;-1:-1;26780:14;;;;76145;;;;26488:1;26481:9;26441:360;;51676:486;51911:2;51925:47;;;74958:12;;51896:18;;;76945:19;;;51676:486;;51911:2;76985:14;;;;;;27384:17;;;27375:27;;;;73942:14;;;51676:486;27541:417;27566:6;27563:1;27560:13;27541:417;;;27618:20;51900:9;27622:4;27618:20;;27613:3;27606:33;27673:6;27667:13;41795:4;-1:-1;;;;;41868:16;41862:23;79747:54;24037:3;24030:37;51911:2;42025:5;42021:16;42015:23;41795:4;51911:2;42062:3;42058:14;42051:38;42104:73;41795:4;41790:3;41786:14;42158:12;42104:73;:::i;:::-;42096:81;;;76985:14;42262:5;42258:16;42252:23;42321:3;42315:4;42311:14;76985;42299:3;42295:14;42288:38;42341:73;42409:4;42395:12;42341:73;:::i;:::-;42333:81;;;42501:4;;42494:5;42490:16;42484:23;42553:3;42547:4;42543:14;42501:4;42531:3;42527:14;42520:38;42573:71;42639:4;42625:12;42573:71;:::i;:::-;42734:4;42723:16;;;42717:23;79547:34;79536:46;42794:14;;;45547:37;42890:4;42879:16;;;42873:23;79964:10;79953:22;42948:14;;;;46229:36;;;;-1:-1;;;27937:14;;;;76145;;;;27588:1;27581:9;27541:417;;;-1:-1;51978:174;;51882:280;-1:-1;;;;;;;;51882:280::o;52169:498::-;52410:2;52424:47;;;74958:12;;52395:18;;;76945:19;;;52169:498;;52410:2;76985:14;;;;;;73942;;;52169:498;28648:356;28673:6;28670:1;28667:13;28648:356;;;28734:13;;43285:23;;79964:10;79953:22;;;46229:36;;43442:16;;;43436:23;79953:22;;43511:14;;;46229:36;43601:16;;;43595:23;79953:22;;43670:14;;;46229:36;43766:4;43755:16;;;43749:23;79953:22;;43824:14;;;46229:36;43923:4;43912:16;;;43906:23;79547:34;79536:46;43983:14;;;45547:37;44079:4;44068:16;;;44062:23;79953:22;44137:14;;;46229:36;23768:4;23759:14;;;;76145;;;;28695:1;28688:9;28648:356;;;-1:-1;52477:180;;52381:286;-1:-1;;;;;;;52381:286::o;52674:370::-;52851:2;52865:47;;;74958:12;;52836:18;;;76945:19;;;52674:370;;52851:2;73942:14;;;;76985;;;;52674:370;29473:260;29498:6;29495:1;29492:13;29473:260;;;29559:13;;29945:37;;76145:14;;;;23941;;;;29520:1;29513:9;29473:260;;53051:210;79165:13;;79158:21;29828:34;;53172:2;53157:18;;53143:118::o;53268:222::-;29945:37;;;53395:2;53380:18;;53366:124::o;53497:780::-;29945:37;;;-1:-1;;;;;79747:54;;;53929:2;53914:18;;24030:37;79747:54;;;;54012:2;53997:18;;24030:37;54095:2;54080:18;;29945:37;54178:3;54163:19;;29945:37;;;;54262:3;54247:19;;29945:37;53764:3;53749:19;;53735:542::o;54284:444::-;29945:37;;;54631:2;54616:18;;29945:37;;;;-1:-1;;;;;79747:54;54714:2;54699:18;;24030:37;54467:2;54452:18;;54438:290::o;54735:548::-;29945:37;;;80058:4;80047:16;;;;55103:2;55088:18;;46461:35;55186:2;55171:18;;29945:37;55269:2;55254:18;;29945:37;54942:3;54927:19;;54913:370::o;55290:306::-;;55435:2;55456:17;55449:47;55510:76;55435:2;55424:9;55420:18;55572:6;55510:76;:::i;55920:416::-;56120:2;56134:47;;;32911:1;56105:18;;;76945:19;32946:11;76985:14;;;32926:32;32977:12;;;56091:245::o;56343:416::-;56543:2;56557:47;;;33228:2;56528:18;;;76945:19;33264:30;76985:14;;;33244:51;33314:12;;;56514:245::o;56766:416::-;56966:2;56980:47;;;33565:2;56951:18;;;76945:19;33601:16;76985:14;;;33581:37;33637:12;;;56937:245::o;57189:416::-;57389:2;57403:47;;;33888:2;57374:18;;;76945:19;33924:24;76985:14;;;33904:45;33968:12;;;57360:245::o;57612:416::-;57812:2;57826:47;;;34219:2;57797:18;;;76945:19;34255:13;76985:14;;;34235:34;34288:12;;;57783:245::o;58035:416::-;58235:2;58249:47;;;34539:2;58220:18;;;76945:19;34575:23;76985:14;;;34555:44;34618:12;;;58206:245::o;58458:416::-;58658:2;58672:47;;;34869:2;58643:18;;;76945:19;34905:30;76985:14;;;34885:51;34955:12;;;58629:245::o;58881:416::-;59081:2;59095:47;;;35206:2;59066:18;;;76945:19;35242:23;76985:14;;;35222:44;35285:12;;;59052:245::o;59304:416::-;59504:2;59518:47;;;35536:2;59489:18;;;76945:19;35572:25;76985:14;;;35552:46;35617:12;;;59475:245::o;59727:416::-;59927:2;59941:47;;;35868:2;59912:18;;;76945:19;35904:26;76985:14;;;35884:47;35950:12;;;59898:245::o;60150:416::-;60350:2;60364:47;;;36201:2;60335:18;;;76945:19;36237:27;76985:14;;;36217:48;36284:12;;;60321:245::o;60573:416::-;60773:2;60787:47;;;36535:2;60758:18;;;76945:19;36571:26;76985:14;;;36551:47;36617:12;;;60744:245::o;60996:416::-;61196:2;61210:47;;;36868:2;61181:18;;;76945:19;36904;76985:14;;;36884:40;36943:12;;;61167:245::o;61419:416::-;61619:2;61633:47;;;37194:2;61604:18;;;76945:19;37230:15;76985:14;;;37210:36;37265:12;;;61590:245::o;61842:416::-;62042:2;62056:47;;;37516:2;62027:18;;;76945:19;37552:16;76985:14;;;37532:37;37588:12;;;62013:245::o;62265:416::-;62465:2;62479:47;;;37839:2;62450:18;;;76945:19;37875:25;76985:14;;;37855:46;37920:12;;;62436:245::o;62688:416::-;62888:2;62902:47;;;62873:18;;;76945:19;38207:34;76985:14;;;38187:55;38261:12;;;62859:245::o;63111:416::-;63311:2;63325:47;;;38512:2;63296:18;;;76945:19;38548:15;76985:14;;;38528:36;38583:12;;;63282:245::o;63534:416::-;63734:2;63748:47;;;63719:18;;;76945:19;38870:34;76985:14;;;38850:55;38924:12;;;63705:245::o;63957:416::-;64157:2;64171:47;;;39175:2;64142:18;;;76945:19;39211:15;76985:14;;;39191:36;39246:12;;;64128:245::o;64380:416::-;64580:2;64594:47;;;39802:2;64565:18;;;76945:19;39838:26;76985:14;;;39818:47;39884:12;;;64551:245::o;64803:416::-;65003:2;65017:47;;;40135:2;64988:18;;;76945:19;40171:29;76985:14;;;40151:50;40220:12;;;64974:245::o;65226:416::-;65426:2;65440:47;;;40471:2;65411:18;;;76945:19;40507:24;76985:14;;;40487:45;40551:12;;;65397:245::o;65649:416::-;65849:2;65863:47;;;40802:2;65834:18;;;76945:19;40838:33;76985:14;;;40818:54;40891:12;;;65820:245::o;66072:416::-;66272:2;66286:47;;;41142:2;66257:18;;;76945:19;41178:26;76985:14;;;41158:47;41224:12;;;66243:245::o;66495:416::-;66695:2;66709:47;;;41475:2;66680:18;;;76945:19;41511:26;76985:14;;;41491:47;41557:12;;;66666:245::o;67147:1104::-;;67520:3;67509:9;67505:19;67497:27;;29975:5;29952:3;29945:37;29975:5;67685:2;67674:9;67670:18;29945:37;29975:5;67768:2;67757:9;67753:18;29945:37;29975:5;67851:2;67840:9;67836:18;29945:37;29975:5;67934:3;67923:9;67919:19;29945:37;29975:5;68018:3;68007:9;68003:19;29945:37;44467:61;68152:3;68141:9;68137:19;44444:16;44438:23;44467:61;:::i;:::-;67685:2;44605:5;44601:16;44595:23;44624:61;44670:14;68141:9;44670:14;44656:12;44624:61;:::i;:::-;;67768:2;44762:5;44758:16;44752:23;44781:61;44827:14;68141:9;44827:14;44813:12;44781:61;:::i;:::-;;67851:2;44919:5;44915:16;44909:23;44938:61;44984:14;68141:9;44984:14;44970:12;44938:61;:::i;:::-;;67934:3;45072:5;45068:16;45062:23;45091:61;45137:14;68141:9;45137:14;45123:12;45091:61;:::i;:::-;;68018:3;45225:5;45221:16;45215:23;45244:61;45290:14;68141:9;45290:14;45276:12;45244:61;:::i;:::-;;68152:3;45378:5;45374:16;45368:23;45397:61;45443:14;68141:9;45443:14;45429:12;45397:61;:::i;:::-;;68168:73;68236:3;68225:9;68221:19;68212:6;68168:73;:::i;:::-;67491:760;;;;;;;;;;;:::o;68258:652::-;79964:10;79953:22;;;46229:36;;79953:22;;;68650:2;68635:18;;46229:36;79953:22;;;68731:2;68716:18;;46229:36;79953:22;;;68812:2;68797:18;;46229:36;79547:34;79536:46;;;68895:3;68880:19;;45547:37;68489:3;68474:19;;68460:450::o;68917:864::-;79964:10;79953:22;;;46229:36;;79953:22;;;69359:2;69344:18;;46229:36;79953:22;;;69440:2;69425:18;;46229:36;79953:22;;;;69521:2;69506:18;;46229:36;79666:6;79655:18;;;69602:3;69587:19;;45775:36;79655:18;;69684:3;69669:19;;45775:36;79655:18;;;69766:3;69751:19;;45775:36;69198:3;69183:19;;69169:612::o;69788:214::-;80058:4;80047:16;;;;46461:35;;69911:2;69896:18;;69882:120::o;70009:506::-;;;70144:11;70131:25;70195:48;70219:8;70203:14;70199:29;70195:48;70175:18;70171:73;70161:2;;-1:-1;;70248:12;70161:2;70275:33;;70329:18;;;-1:-1;70367:18;70356:30;;70353:2;;;-1:-1;;70389:12;70353:2;70234:4;70417:13;;-1:-1;70203:14;70449:38;;;70439:49;;70436:2;;;70501:1;;70491:12;71036:256;71098:2;71092:9;71124:17;;;71199:18;71184:34;;71220:22;;;71181:62;71178:2;;;71256:1;;71246:12;71178:2;71098;71265:22;71076:216;;-1:-1;71076:216::o;71299:304::-;;71458:18;71450:6;71447:30;71444:2;;;-1:-1;;71480:12;71444:2;-1:-1;71525:4;71513:17;;;71578:15;;71381:222::o;80587:268::-;80652:1;80659:101;80673:6;80670:1;80667:13;80659:101;;;80740:11;;;80734:18;80721:11;;;80714:39;80695:2;80688:10;80659:101;;;80775:6;80772:1;80769:13;80766:2;;;80652:1;80831:6;80826:3;80822:16;80815:27;80766:2;;80636:219;;;:::o;81049:117::-;-1:-1;;;;;81136:5;79747:54;81111:5;81108:35;81098:2;;81157:1;;81147:12;81173:111;81254:5;79165:13;79158:21;81232:5;81229:32;81219:2;;81275:1;;81265:12

Swarm Source

ipfs://497fc9216e5ec387babff86c07d0e5fdbfc80fc6b33b7da247d2fb9f782b9dbc
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.