ETH Price: $3,587.45 (-2.90%)

Token

IMBC (BOB)
 

Overview

Max Total Supply

226 BOB

Holders

84

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
siradeghyan.eth
Balance
3 BOB
0xb537a654e3215696d10134c31a70a3fb5fa337dd
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:
BOB

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-02
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/*
  _____ __  __ ____   _____ 
 |_   _|  \/  |  _ \ / ____|
   | | | \  / | |_) | |     
   | | | |\/| |  _ <| |     
  _| |_| |  | | |_) | |____ 
 |_____|_|  |_|____/ \_____|

https://imbobnft.com

*/


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        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);
}
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;
  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }
  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }
  uint256 private currentIndex = 0;
  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;
  string private _name;
  string private _symbol;
  mapping(uint256 => TokenOwnership) private _ownerships;
  mapping(address => AddressData) private _addressData;
  mapping(uint256 => address) private _tokenApprovals;
  mapping(address => mapping(address => bool)) private _operatorApprovals;
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  }
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  }
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  }
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }
  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }
  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");
    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }
    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }
    revert("ERC721A: unable to determine the owner of token");
  }
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  }
  function name() public view virtual override returns (string memory) {
    return _name;
  }
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  }
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString()))
        : "";
  }
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");
    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );
    _approve(to, tokenId, owner);
  }
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");
    return _tokenApprovals[tokenId];
  }
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");
    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  }
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  }
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  }
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }
  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  }
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");
    _beforeTokenTransfers(address(0), to, startTokenId, quantity);
    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));
    uint256 updatedIndex = startTokenId;
    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }
    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }
  function reStake(
    address from,
    address to,
    uint256 _id
  ) internal {
    _beforeTokenTransfers(from, to, _id, 1);
    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(1),
      addressData.numberMinted + uint128(1)
    );
    _ownerships[_id] = TokenOwnership(to, uint64(block.timestamp));
    emit Transfer(from, to, _id);
    _afterTokenTransfers(from, to, _id, 1);
  }
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);
    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));
    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );
    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");
    _beforeTokenTransfers(from, to, tokenId, 1);
    _approve(address(0), tokenId, prevOwnership.addr);
    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }
    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  }
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }
  uint256 public nextOwnerToExplicitlySet = 0;
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  }
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
contract BOB is ERC721A, Ownable, ReentrancyGuard {
    bytes32 whroot;
    bytes32 raroot;
    string public baseTokenURI;
    uint256 public allowlistprice = 0.19 ether;
    uint256 public allowlistmaxmint = 3;
    uint256 public waitlistprice = 0.19 ether;
    uint256 public waitlistmaxmint = 3;
    uint256 public publicprice = 0.25 ether;
    uint256 public publicmaxmint = 10;
    uint256 public collectionsize = 5335;
    uint256 public reservedsize = 335;
    uint256 public stakedmax = 20;
    uint256 public mintpause=1;
    uint256 public allowlistmintopen;
    uint256 public waitlistmintopen;
    uint256 public publicmintopen;
    uint256 public stakingpoolopen;
    mapping(address => uint256) public mintedq;
    mapping(address => uint256[]) public userStakedTokens;
    uint256 public stakedToken;
    struct stakeInfo {
	uint32 epoch;
	uint32 status;
	uint32 tokenId;
	address owner;
    }
    stakeInfo[] public stakeLog;
    struct holderInfo {
	uint32 tokenId;
	address owner;
    }
constructor() ERC721A("IMBC", "BOB",100,5335){}
    function _onlyMinter() private view 
    { 
	require(msg.sender == tx.origin);
    }
    modifier onlyMinter 
    {
	_onlyMinter();
	_;
    }
    function ownerMintOne(address recipient) public onlyOwner returns (uint256) 
    {
	_safeMint(recipient, 1);
	return 1;
    }
    function ownerMintMulti(address recipient,uint256 value) public onlyOwner returns (uint256) 
    {
	_safeMint(recipient, value);
	return 1;
    }
    function calculateq(uint256 ev, uint256 aprice) internal view returns (uint256) 
    {
        uint256 r=ev%aprice;
        require(r==0,"Bad ammount of ETH");
        uint256 a=ev/aprice;
        require(a>0,"Input amount=0");
        require(totalSupply() + a <= collectionsize - reservedsize, "Sold out!" );
        return a;
    }
    function isOwner(uint256 _id, address _address) public view virtual returns (bool) 
    {
	return ownerOf(_id) == _address;
    }
    function createStake(uint256 _id) external payable onlyMinter nonReentrant
    {
	require(stakingpoolopen!=0, "Staking Pool is not open yet!");
        require(ownerOf(_id) == msg.sender,
            "You are not a owner of the NFT"
        );
        require(userStakedTokens[msg.sender].length<stakedmax,"This would exceed the maximum staked NFTs/address!");
	transferFrom(msg.sender, address(this), _id);
	userStakedTokens[msg.sender].push(_id);
	stakedToken++;
	stakeLog.push(stakeInfo({
	    epoch: uint32(block.timestamp),
	    status: uint32(1),
	    tokenId: uint32(_id),
	    owner: address(msg.sender)
	}));
    }
    function unStake(uint256 _id) external payable onlyMinter nonReentrant
    {
	uint256 st=99999;
	uint256 value = userStakedTokens[msg.sender].length;
	if ( value > 0 )
	{
    	    for (uint256 i = 0; i < value; i++) 
	    {
		if ( userStakedTokens[msg.sender][i] == _id )
		{
		    st=i;
		    break;
		}
	    }
	}
        require( st != 99999, "You are not a owner of the staked NFT" );
	reStake(address(this), address(msg.sender), _id );
        userStakedTokens[msg.sender][st] = userStakedTokens[msg.sender][value-1];
	userStakedTokens[msg.sender].pop();
	stakedToken--;
	stakeLog.push(stakeInfo({
	    epoch: uint32(block.timestamp),
	    status: uint32(2),
	    tokenId: uint32(_id),
	    owner: address(msg.sender)
	}));
    }
    function stakedValue(address _address) public view virtual returns (uint32) 
    {
	return uint32(userStakedTokens[_address].length);
    }
    function getStakelog(uint256 from, uint256 value) public view virtual returns (stakeInfo[] memory)  
    {
        stakeInfo[] memory stakeLogRe = new stakeInfo[](value);
        for (uint256 i = 0; i < value; i++) 
	{
	    stakeLogRe[i]=stakeLog[i+from];
	}
	return stakeLogRe;
    }
    function numStakelog() public view virtual returns (uint32)  
    {
	return uint32(stakeLog.length);
    }
    function getStakedTokens(address tokenowner) public view virtual returns(uint256[] memory) 
    {
	require(totalSupply() > 0);
	require(userStakedTokens[tokenowner].length > 0);
	return userStakedTokens[tokenowner];
    }
    function isStaker(uint256 _id, address _address) public view virtual returns (bool) 
    {
	uint256 value = userStakedTokens[_address].length;
	if ( value > 0 )
	{
    	    for (uint256 i = 0; i < value; i++) 
	    {
		if ( userStakedTokens[_address][i] == _id )
		{
		    return true;
		}
	    }
	}
	return false;
    }
    function allowlistMint(bytes32[] memory proof) external payable onlyMinter nonReentrant
    {
	uint256 st;
	bytes32 cHa;
	require(mintpause==0, "Minting is not live yet!");
	require(allowlistmintopen!=0, "Allowlist minting is not open!");
	cHa = keccak256(abi.encodePacked(msg.sender));
    	for (uint256 i = 0; i < proof.length; i++) 
	{
	    bytes32 pEl = proof[i];
    	    if (cHa <= pEl) 
	    {
        	cHa = keccak256(abi.encodePacked(cHa, pEl));
    	    } else {
                cHa = keccak256(abi.encodePacked(pEl, cHa));
    	    }
    	}
	require( cHa==whroot, "You are not eligible for Allowlist mint!" );
        st=calculateq(msg.value,allowlistprice);
        require(mintedq[msg.sender]+st<=allowlistmaxmint,"This would exceed the maximum NFTs/address!");
        mintedq[msg.sender]+=st;
	_safeMint(msg.sender,st);
    }
    function waitlistMint() external payable onlyMinter nonReentrant
    {
	uint256 st;
	require(mintpause==0, "Minting is not live yet!");
	require(waitlistmintopen!=0, "Waitlist minting is not open!");
        st=calculateq(msg.value,waitlistprice);
        require(mintedq[msg.sender]+st<=waitlistmaxmint,"This would exceed the maximum NFTs/address!");
        mintedq[msg.sender]+=st;
	_safeMint(msg.sender,st);
    }
    function publicMint() external payable onlyMinter nonReentrant
    {
	uint256 st;
	require(mintpause==0, "Minting is not live yet!");
	require(publicmintopen!=0, "Public minting is not open!");
        st=calculateq(msg.value,publicprice);
        require(mintedq[msg.sender]+st<=publicmaxmint,"This would exceed the maximum NFTs/address!");
        mintedq[msg.sender]+=st;
	_safeMint(msg.sender,st);
    }
    function _baseURI() internal view virtual override returns (string memory) 
    {
	return baseTokenURI;
    }
    function setBaseTokenURI(string memory _b) public onlyOwner 
    {
	baseTokenURI = _b;
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
    {
	string memory currentBaseURI = _baseURI();
	return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), "")) : "";
    }
    function _sendmoney(address _address, uint256 _amount) private 
    {
        (bool success, ) = _address.call{value: _amount}("");
	require(success, "Transfer failed.");
    }
    function withdraw() public onlyOwner 
    {
	_sendmoney(owner(),address(this).balance);
    }
    function withdrawto(address payable to, uint256 amount) public onlyOwner 
    {
	require( address(this).balance >= amount, "Insufficient balance to withdraw");
	_sendmoney(to,amount);
    }
    function setallowlistprice(uint256 _p) external onlyOwner 
    {
	allowlistprice=_p;
    }
    function setallowlistmaxmint(uint256 _p) external onlyOwner 
    {
	allowlistmaxmint=_p;
    }
    function setwaitlistprice(uint256 _p) external onlyOwner 
    {
	waitlistprice=_p;
    }
    function setwaitlistmaxmint(uint256 _p) external onlyOwner 
    {
	waitlistmaxmint=_p;
    }
    function setpublicprice(uint256 _p) external onlyOwner 
    {
	waitlistprice=_p;
    }
    function setpublicmaxmint(uint256 _p) external onlyOwner 
    {
	publicmaxmint=_p;
    }
    function setreserveditem(uint256 _p) external onlyOwner 
    {
	reservedsize=_p;
    }
    function setcollectionsize(uint256 _p) external onlyOwner 
    {
	collectionsize=_p;
    }
    function setstakedmax(uint256 _p) external onlyOwner 
    {
	stakedmax=_p;
    }
    function setmintpause(uint256 _st) external onlyOwner
    {
        mintpause = _st;
    }
    function setallowlistmintopen(uint256 _st) external onlyOwner
    {
        allowlistmintopen = _st;
    }
    function setwaitlistmintopen(uint256 _st) external onlyOwner
    {
        waitlistmintopen = _st;
    }
    function setpublicmintopen(uint256 _st) external onlyOwner
    {
        publicmintopen = _st;
    }
    function setstakingpoolopen(uint256 _st) external onlyOwner
    {
        stakingpoolopen = _st;
    }
    function getmintstatus(address minter) public view virtual returns (string memory) 
    {
	string memory o1 = string(abi.encodePacked(
	"mintpause:",Strings.toString(mintpause),
	";allowlist:",Strings.toString(allowlistmintopen), 
	";waitlist:",Strings.toString(waitlistmintopen), 
	";public:",Strings.toString(publicmintopen), 
	";staking:",Strings.toString(stakingpoolopen), 
	";allowlistprice:",Strings.toString(allowlistprice), 
	";allowlistmaxmint:",Strings.toString(allowlistmaxmint),
	";stakedtoken:",Strings.toString(stakedToken)
	));
	string memory o2 = string(abi.encodePacked(
	";waitlistprice:",Strings.toString(waitlistprice), 
	";waitlistmaxmint:",Strings.toString(waitlistmaxmint),
	";publicprice:",Strings.toString(publicprice), 
	";publicmaxmint:",Strings.toString(publicmaxmint),
	";totalsupply:", Strings.toString(totalSupply()), 
	";reservedsize:", Strings.toString(reservedsize), 
	";collectionsize:", Strings.toString(collectionsize),
	";minted:", Strings.toString(mintedq[minter]) 
	));
	string memory outstring = string(abi.encodePacked(o1,o2));
	return outstring;
    }
    function getholdertokens(address _owner,uint256 from, uint256 value) public view returns (uint[] memory) 
    {
        uint[] memory _tokensOfOwner = new uint[](value);
        uint i;
        for (i=0;i<value;i++)
	{
            _tokensOfOwner[i] = ERC721A.tokenOfOwnerByIndex(_owner, i+from);
        }
        return (_tokensOfOwner);
    }
    function getallholder(uint256 from, uint256 value) public view virtual returns (holderInfo[] memory)  
    {
	uint256 index;
        holderInfo[] memory holderRe = new holderInfo[](value);
        for (uint256 i = 0; i < value; i++) 
	{
	    index = i+from;
	    holderRe[i].owner=ownerOf(index);
	    holderRe[i].tokenId=uint32(index);
	}
	return holderRe;
    }
    function setallowlistroot(bytes32 _mr) external onlyOwner
    {
	whroot = _mr;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"allowlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"allowlistmaxmint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistmintopen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionsize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"createStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenowner","type":"address"}],"name":"getStakedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getStakelog","outputs":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"status","type":"uint32"},{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct BOB.stakeInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getallholder","outputs":[{"components":[{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"address","name":"owner","type":"address"}],"internalType":"struct BOB.holderInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getholdertokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"getmintstatus","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"isStaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedq","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintpause","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numStakelog","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"ownerMintMulti","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"ownerMintOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicmaxmint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicmintopen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedsize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_b","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setallowlistmaxmint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setallowlistmintopen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setallowlistprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_mr","type":"bytes32"}],"name":"setallowlistroot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setcollectionsize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setmintpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setpublicmaxmint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setpublicmintopen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setpublicprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setreserveditem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setstakedmax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setstakingpoolopen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setwaitlistmaxmint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_st","type":"uint256"}],"name":"setwaitlistmintopen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setwaitlistprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeLog","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint32","name":"status","type":"uint32"},{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"stakedValue","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedmax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingpoolopen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userStakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"waitlistmaxmint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitlistmintopen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waitlistprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawto","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526000805560006007556702a303fe4b530000600d556003600e556702a303fe4b530000600f5560036010556703782dace9d90000601155600a6012556114d760135561014f601455601460155560016016553480156200006357600080fd5b5060405180604001604052806004815260200163494d424360e01b815250604051806040016040528060038152602001622127a160e91b81525060646114d7600081116200010f5760405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060448201526d6e6f6e7a65726f20737570706c7960901b60648201526084015b60405180910390fd5b60008211620001715760405162461bcd60e51b815260206004820152602760248201527f455243373231413a206d61782062617463682073697a65206d757374206265206044820152666e6f6e7a65726f60c81b606482015260840162000106565b83516200018690600190602087019062000211565b5082516200019c90600290602086019062000211565b5060a09190915260805250620001b4905033620001bf565b6001600955620002f4565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200021f90620002b7565b90600052602060002090601f0160209004810192826200024357600085556200028e565b82601f106200025e57805160ff19168380011785556200028e565b828001600101855582156200028e579182015b828111156200028e57825182559160200191906001019062000271565b506200029c929150620002a0565b5090565b5b808211156200029c5760008155600101620002a1565b600181811c90821680620002cc57607f821691505b60208210811415620002ee57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516142126200032560003960008181612fb801528181612fe201526134070152600050506142126000f3fe6080604052600436106104265760003560e01c80636b5eb5c011610229578063b5c95f181161012e578063d7224ba0116100b6578063e985e9c51161007a578063e985e9c514610c41578063ede2e40c14610c8a578063f2fde38b14610ca0578063f54112ab14610cc0578063fffcfdbd14610a5257600080fd5b8063d7224ba014610bbf578063d844260014610bd5578063d9e023b714610bf5578063db5ec00414610c0b578063e598212014610c2b57600080fd5b8063c87b56dd116100fd578063c87b56dd14610b27578063ca19d84e14610b47578063cab2bab514610b67578063cc7a262e14610b94578063d547cfb714610baa57600080fd5b8063b5c95f1814610ac6578063b5e5d4e414610adc578063b88d4fde14610af2578063c637669214610b1257600080fd5b806395d89b41116101b1578063a619d2fc11610180578063a619d2fc14610a52578063aeab458a14610a72578063aebb096c14610a88578063b00c357514610a90578063b14f316b14610ab057600080fd5b806395d89b41146109dd578063a1a77234146109f2578063a22cb46514610a12578063a60c840114610a3257600080fd5b8063834846a4116101f8578063834846a414610928578063873fd089146109735780638da5cb5b146109935780638f58913a146109b1578063925430d2146109c757600080fd5b80636b5eb5c0146108bd57806370a08231146108dd578063715018a6146108fd57806379eef03c1461091257600080fd5b806337840cae1161032f5780634f6ccce7116102b75780635af3963a116102865780635af3963a146107f15780635d3eea91146108475780636352211e1461085a57806363c28db11461087a578063658db7ec146108a757600080fd5b80634f6ccce714610788578063537924ef146107a8578063571cce17146107bb5780635a5d096c146107d157600080fd5b806342c20bdd116102fe57806342c20bdd146106f257806342f51a6214610712578063433ee791146107325780634396d43b1461075257806348787ca31461077257600080fd5b806337840cae146106705780633ccfd60b1461069d578063411410cc146106b257806342842e0e146106d257600080fd5b806318160ddd116103b2578063253f654111610381578063253f6541146105e857806326092b83146106085780632f745c591461061057806330176e131461063057806332710d571461065057600080fd5b806318160ddd146105805780631bf6ddae1461059557806323b872dd146105a8578063246f7b30146105c857600080fd5b8063081812fc116103f9578063081812fc146104d2578063090cdeaa1461050a578063095ea7b3146105205780630b28105c146105405780630cf9ef011461056057600080fd5b806301ffc9a71461042b578063061886cd1461046057806306b0f5ca1461048e57806306fdde03146104b0575b600080fd5b34801561043757600080fd5b5061044b6104463660046136ca565b610ced565b60405190151581526020015b60405180910390f35b34801561046c57600080fd5b5061048061047b3660046136fc565b610d5a565b604051908152602001610457565b34801561049a57600080fd5b506104ae6104a9366004613728565b610d8b565b005b3480156104bc57600080fd5b506104c5610dc3565b6040516104579190613799565b3480156104de57600080fd5b506104f26104ed366004613728565b610e55565b6040516001600160a01b039091168152602001610457565b34801561051657600080fd5b5061048060145481565b34801561052c57600080fd5b506104ae61053b3660046136fc565b610ee0565b34801561054c57600080fd5b5061048061055b3660046136fc565b610ff8565b34801561056c57600080fd5b506104ae61057b366004613728565b611038565b34801561058c57600080fd5b50600054610480565b6104ae6105a3366004613728565b611067565b3480156105b457600080fd5b506104ae6105c33660046137ac565b6112d2565b3480156105d457600080fd5b506104ae6105e3366004613728565b6112dd565b3480156105f457600080fd5b506104ae610603366004613728565b61130c565b6104ae61133b565b34801561061c57600080fd5b5061048061062b3660046136fc565b611460565b34801561063c57600080fd5b506104ae61064b36600461388a565b6115cd565b34801561065c57600080fd5b506104ae61066b366004613728565b61160e565b34801561067c57600080fd5b5061069061068b3660046138d2565b61163d565b60405161045791906138f4565b3480156106a957600080fd5b506104ae61173b565b3480156106be57600080fd5b506104ae6106cd366004613728565b611782565b3480156106de57600080fd5b506104ae6106ed3660046137ac565b6117b1565b3480156106fe57600080fd5b506104ae61070d366004613728565b6117cc565b34801561071e57600080fd5b506104ae61072d366004613728565b6117fb565b34801561073e57600080fd5b506104ae61074d3660046136fc565b61182a565b34801561075e57600080fd5b506104ae61076d366004613728565b6118ae565b34801561077e57600080fd5b5061048060115481565b34801561079457600080fd5b506104806107a3366004613728565b6118dd565b6104ae6107b6366004613952565b61193f565b3480156107c757600080fd5b50610480601a5481565b3480156107dd57600080fd5b5061044b6107ec3660046139f7565b611ba3565b3480156107fd57600080fd5b5061081161080c366004613728565b611bc9565b6040805163ffffffff9586168152938516602085015291909316908201526001600160a01b039091166060820152608001610457565b6104ae610855366004613728565b611c18565b34801561086657600080fd5b506104f2610875366004613728565b611eaf565b34801561088657600080fd5b5061089a610895366004613a27565b611ec1565b6040516104579190613a44565b3480156108b357600080fd5b50610480600d5481565b3480156108c957600080fd5b506104ae6108d8366004613728565b611f64565b3480156108e957600080fd5b506104806108f8366004613a27565b611f93565b34801561090957600080fd5b506104ae612024565b34801561091e57600080fd5b5061048060165481565b34801561093457600080fd5b5061095e610943366004613a27565b6001600160a01b03166000908152601c602052604090205490565b60405163ffffffff9091168152602001610457565b34801561097f57600080fd5b5061044b61098e3660046139f7565b612058565b34801561099f57600080fd5b506008546001600160a01b03166104f2565b3480156109bd57600080fd5b5061048060155481565b3480156109d357600080fd5b5061048060195481565b3480156109e957600080fd5b506104c56120e9565b3480156109fe57600080fd5b506104ae610a0d366004613728565b6120f8565b348015610a1e57600080fd5b506104ae610a2d366004613a88565b612127565b348015610a3e57600080fd5b5061089a610a4d366004613abb565b6121ec565b348015610a5e57600080fd5b506104ae610a6d366004613728565b61227c565b348015610a7e57600080fd5b5061048060125481565b6104ae6122ab565b348015610a9c57600080fd5b506104ae610aab366004613728565b61237b565b348015610abc57600080fd5b5061048060175481565b348015610ad257600080fd5b50610480600e5481565b348015610ae857600080fd5b5061048060105481565b348015610afe57600080fd5b506104ae610b0d366004613af0565b6123aa565b348015610b1e57600080fd5b50601e5461095e565b348015610b3357600080fd5b506104c5610b42366004613728565b6123e3565b348015610b5357600080fd5b50610480610b62366004613a27565b612441565b348015610b7357600080fd5b50610480610b82366004613a27565b601b6020526000908152604090205481565b348015610ba057600080fd5b50610480601d5481565b348015610bb657600080fd5b506104c5612481565b348015610bcb57600080fd5b5061048060075481565b348015610be157600080fd5b506104ae610bf0366004613728565b61250f565b348015610c0157600080fd5b5061048060135481565b348015610c1757600080fd5b506104c5610c26366004613a27565b61253e565b348015610c3757600080fd5b50610480600f5481565b348015610c4d57600080fd5b5061044b610c5c366004613b6f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610c9657600080fd5b5061048060185481565b348015610cac57600080fd5b506104ae610cbb366004613a27565b61268f565b348015610ccc57600080fd5b50610ce0610cdb3660046138d2565b61272a565b6040516104579190613b9d565b60006001600160e01b031982166380ac58cd60e01b1480610d1e57506001600160e01b03198216635b5e139f60e01b145b80610d3957506001600160e01b0319821663780e9d6360e01b145b80610d5457506301ffc9a760e01b6001600160e01b03198316145b92915050565b601c6020528160005260406000208181548110610d7657600080fd5b90600052602060002001600091509150505481565b6008546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610db590613c08565b60405180910390fd5b601755565b606060018054610dd290613c3d565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfe90613c3d565b8015610e4b5780601f10610e2057610100808354040283529160200191610e4b565b820191906000526020600020905b815481529060010190602001808311610e2e57829003601f168201915b5050505050905090565b6000610e62826000541190565b610ec45760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b6064820152608401610db5565b506000908152600560205260409020546001600160a01b031690565b6000610eeb82611eaf565b9050806001600160a01b0316836001600160a01b03161415610f5a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610db5565b336001600160a01b0382161480610f765750610f768133610c5c565b610fe85760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610db5565b610ff3838383612855565b505050565b6008546000906001600160a01b031633146110255760405162461bcd60e51b8152600401610db590613c08565b61102f83836128b1565b50600192915050565b6008546001600160a01b031633146110625760405162461bcd60e51b8152600401610db590613c08565b601955565b61106f6128cb565b600260095414156110925760405162461bcd60e51b8152600401610db590613c78565b6002600955601a546110e65760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e6720506f6f6c206973206e6f74206f70656e20796574210000006044820152606401610db5565b336110f082611eaf565b6001600160a01b0316146111465760405162461bcd60e51b815260206004820152601e60248201527f596f7520617265206e6f742061206f776e6572206f6620746865204e465400006044820152606401610db5565b601554336000908152601c6020526040902054106111c15760405162461bcd60e51b815260206004820152603260248201527f5468697320776f756c642065786365656420746865206d6178696d756d207374604482015271616b6564204e4654732f616464726573732160701b6064820152608401610db5565b6111cc3330836112d2565b336000908152601c602090815260408220805460018101825590835290822001829055601d8054916111fd83613cc5565b90915550506040805160808101825263ffffffff42811682526001602083018181529482169383019384523360608401908152601e8054808401825560009190915293517f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e35090940180549651955191516001600160a01b0316600160601b026bffffffffffffffffffffffff928516600160401b02929092166001600160401b039685166401000000000267ffffffffffffffff19909816959094169490941795909517939093161792909217909155600955565b610ff38383836128d7565b6008546001600160a01b031633146113075760405162461bcd60e51b8152600401610db590613c08565b601255565b6008546001600160a01b031633146113365760405162461bcd60e51b8152600401610db590613c08565b600e55565b6113436128cb565b600260095414156113665760405162461bcd60e51b8152600401610db590613c78565b60026009556016546000901561138e5760405162461bcd60e51b8152600401610db590613ce0565b6019546113dd5760405162461bcd60e51b815260206004820152601b60248201527f5075626c6963206d696e74696e67206973206e6f74206f70656e2100000000006044820152606401610db5565b6113e934601154612c5d565b601254336000908152601b60205260409020549192509061140b908390613d17565b11156114295760405162461bcd60e51b8152600401610db590613d2f565b336000908152601b602052604081208054839290611448908490613d17565b90915550611458905033826128b1565b506001600955565b600061146b83611f93565b82106114c45760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610db5565b600080549080805b8381101561156d576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561151e57805192505b876001600160a01b0316836001600160a01b0316141561155a578684141561154c57509350610d5492505050565b8361155681613cc5565b9450505b508061156581613cc5565b9150506114cc565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610db5565b6008546001600160a01b031633146115f75760405162461bcd60e51b8152600401610db590613c08565b805161160a90600c906020840190613624565b5050565b6008546001600160a01b031633146116385760405162461bcd60e51b8152600401610db590613c08565b601555565b6060600080836001600160401b0381111561165a5761165a6137ed565b60405190808252806020026020018201604052801561169f57816020015b60408051808201909152600080825260208201528152602001906001900390816116785790505b50905060005b84811015611732576116b78682613d17565b92506116c283611eaf565b8282815181106116d4576116d4613d7a565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250508282828151811061170b5761170b613d7a565b602090810291909101015163ffffffff90911690528061172a81613cc5565b9150506116a5565b50949350505050565b6008546001600160a01b031633146117655760405162461bcd60e51b8152600401610db590613c08565b61178061177a6008546001600160a01b031690565b47612d64565b565b6008546001600160a01b031633146117ac5760405162461bcd60e51b8152600401610db590613c08565b600d55565b610ff3838383604051806020016040528060008152506123aa565b6008546001600160a01b031633146117f65760405162461bcd60e51b8152600401610db590613c08565b600a55565b6008546001600160a01b031633146118255760405162461bcd60e51b8152600401610db590613c08565b601455565b6008546001600160a01b031633146118545760405162461bcd60e51b8152600401610db590613c08565b804710156118a45760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e742062616c616e636520746f2077697468647261776044820152606401610db5565b61160a8282612d64565b6008546001600160a01b031633146118d85760405162461bcd60e51b8152600401610db590613c08565b601a55565b60008054821061193b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610db5565b5090565b6119476128cb565b6002600954141561196a5760405162461bcd60e51b8152600401610db590613c78565b60026009556016546000908190156119945760405162461bcd60e51b8152600401610db590613ce0565b6017546119e35760405162461bcd60e51b815260206004820152601e60248201527f416c6c6f776c697374206d696e74696e67206973206e6f74206f70656e2100006044820152606401610db5565b6040516bffffffffffffffffffffffff193360601b16602082015260340160405160208183030381529060405280519060200120905060005b8351811015611abb576000848281518110611a3957611a39613d7a565b60200260200101519050808311611a7b576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611aa8565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611ab381613cc5565b915050611a1c565b50600a548114611b1e5760405162461bcd60e51b815260206004820152602860248201527f596f7520617265206e6f7420656c696769626c6520666f7220416c6c6f776c696044820152677374206d696e742160c01b6064820152608401610db5565b611b2a34600d54612c5d565b600e54336000908152601b602052604090205491935090611b4c908490613d17565b1115611b6a5760405162461bcd60e51b8152600401610db590613d2f565b336000908152601b602052604081208054849290611b89908490613d17565b90915550611b99905033836128b1565b5050600160095550565b6000816001600160a01b0316611bb884611eaf565b6001600160a01b0316149392505050565b601e8181548110611bd957600080fd5b60009182526020909120015463ffffffff80821692506401000000008204811691600160401b810490911690600160601b90046001600160a01b031684565b611c206128cb565b60026009541415611c435760405162461bcd60e51b8152600401610db590613c78565b6002600955336000908152601c60205260409020546201869f908015611cbf5760005b81811015611cbd57336000908152601c60205260409020805485919083908110611c9257611c92613d7a565b90600052602060002001541415611cab57809250611cbd565b80611cb581613cc5565b915050611c66565b505b816201869f1415611d205760405162461bcd60e51b815260206004820152602560248201527f596f7520617265206e6f742061206f776e6572206f6620746865207374616b65604482015264190813919560da1b6064820152608401610db5565b611d2b303385612dfa565b336000908152601c60205260409020611d45600183613d90565b81548110611d5557611d55613d7a565b6000918252602080832090910154338352601c9091526040909120805484908110611d8257611d82613d7a565b6000918252602080832090910192909255338152601c90915260409020805480611dae57611dae613da7565b60019003818190600052602060002001600090559055601d6000815480929190611dd790613dbd565b90915550506040805160808101825263ffffffff42811682526002602083019081529581169282019283523360608301908152601e80546001818101835560009290925293517f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e35090940180549851955192516001600160a01b0316600160601b026bffffffffffffffffffffffff938516600160401b02939093166001600160401b039685166401000000000267ffffffffffffffff19909a1695909416949094179790971793909316179190911790555050600955565b6000611eba82612f36565b5192915050565b60606000611ece60005490565b11611ed857600080fd5b6001600160a01b0382166000908152601c6020526040902054611efa57600080fd5b6001600160a01b0382166000908152601c602090815260409182902080548351818402810184019094528084529091830182828015611f5857602002820191906000526020600020905b815481526020019060010190808311611f44575b50505050509050919050565b6008546001600160a01b03163314611f8e5760405162461bcd60e51b8152600401610db590613c08565b601055565b60006001600160a01b038216611fff5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610db5565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6008546001600160a01b0316331461204e5760405162461bcd60e51b8152600401610db590613c08565b61178060006130df565b6001600160a01b0381166000908152601c602052604081205480156120df5760005b818110156120dd576001600160a01b0384166000908152601c602052604090208054869190839081106120af576120af613d7a565b906000526020600020015414156120cb57600192505050610d54565b806120d581613cc5565b91505061207a565b505b5060009392505050565b606060028054610dd290613c3d565b6008546001600160a01b031633146121225760405162461bcd60e51b8152600401610db590613c08565b601355565b6001600160a01b0382163314156121805760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610db5565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60606000826001600160401b03811115612208576122086137ed565b604051908082528060200260200182016040528015612231578160200160208202803683370190505b50905060005b838110156117325761224d8661062b8784613d17565b82828151811061225f5761225f613d7a565b60209081029190910101528061227481613cc5565b915050612237565b6008546001600160a01b031633146122a65760405162461bcd60e51b8152600401610db590613c08565b600f55565b6122b36128cb565b600260095414156122d65760405162461bcd60e51b8152600401610db590613c78565b6002600955601654600090156122fe5760405162461bcd60e51b8152600401610db590613ce0565b60185461234d5760405162461bcd60e51b815260206004820152601d60248201527f576169746c697374206d696e74696e67206973206e6f74206f70656e210000006044820152606401610db5565b61235934600f54612c5d565b601054336000908152601b60205260409020549192509061140b908390613d17565b6008546001600160a01b031633146123a55760405162461bcd60e51b8152600401610db590613c08565b601655565b6123b58484846128d7565b6123c184848484613131565b6123dd5760405162461bcd60e51b8152600401610db590613dd4565b50505050565b606060006123ef61323e565b9050600081511161240f576040518060200160405280600081525061243a565b806124198461324d565b60405160200161242a929190613e43565b6040516020818303038152906040525b9392505050565b6008546000906001600160a01b0316331461246e5760405162461bcd60e51b8152600401610db590613c08565b6124798260016128b1565b506001919050565b600c805461248e90613c3d565b80601f01602080910402602001604051908101604052809291908181526020018280546124ba90613c3d565b80156125075780601f106124dc57610100808354040283529160200191612507565b820191906000526020600020905b8154815290600101906020018083116124ea57829003601f168201915b505050505081565b6008546001600160a01b031633146125395760405162461bcd60e51b8152600401610db590613c08565b601855565b6060600061254d60165461324d565b61255860175461324d565b61256360185461324d565b61256e60195461324d565b612579601a5461324d565b612584600d5461324d565b61258f600e5461324d565b61259a601d5461324d565b6040516020016125b1989796959493929190613e72565b604051602081830303815290604052905060006125cf600f5461324d565b6125da60105461324d565b6125e560115461324d565b6125f060125461324d565b6126016125fc60005490565b61324d565b61260c60145461324d565b61261760135461324d565b6001600160a01b038b166000908152601b60205260409020546126399061324d565b604051602001612650989796959493929190613fc0565b604051602081830303815290604052905060008282604051602001612676929190613e43565b60408051601f1981840301815291905295945050505050565b6008546001600160a01b031633146126b95760405162461bcd60e51b8152600401610db590613c08565b6001600160a01b03811661271e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610db5565b612727816130df565b50565b60606000826001600160401b03811115612746576127466137ed565b60405190808252806020026020018201604052801561279857816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816127645790505b50905060005b8381101561284d57601e6127b28683613d17565b815481106127c2576127c2613d7a565b600091825260209182902060408051608081018252929091015463ffffffff80821684526401000000008204811694840194909452600160401b810490931690820152600160601b9091046001600160a01b03166060820152825183908390811061282f5761282f613d7a565b6020026020010181905250808061284590613cc5565b91505061279e565b509392505050565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61160a82826040518060200160405280600081525061334a565b33321461178057600080fd5b60006128e282612f36565b80519091506000906001600160a01b0316336001600160a01b0316148061291957503361290e84610e55565b6001600160a01b0316145b8061292b5750815161292b9033610c5c565b9050806129955760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610db5565b846001600160a01b031682600001516001600160a01b031614612a095760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610db5565b6001600160a01b038416612a6d5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610db5565b612a7d6000848460000151612855565b6001600160a01b0385166000908152600460205260408120805460019290612aaf9084906001600160801b03166140fa565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526004602052604081208054600194509092612afb91859116614122565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055612b82846001613d17565b6000818152600360205260409020549091506001600160a01b0316612c1357612bac816000541190565b15612c135760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600080612c6a838561415a565b90508015612caf5760405162461bcd60e51b8152602060048201526012602482015271084c2c840c2dadadeeadce840decc408aa8960731b6044820152606401610db5565b6000612cbb848661416e565b905060008111612cfe5760405162461bcd60e51b815260206004820152600e60248201526d0496e70757420616d6f756e743d360941b6044820152606401610db5565b601454601354612d0e9190613d90565b81612d1860005490565b612d229190613d17565b1115612d5c5760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610db5565b949350505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612db1576040519150601f19603f3d011682016040523d82523d6000602084013e612db6565b606091505b5050905080610ff35760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610db5565b6001600160a01b0382166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612e5790600190614122565b6001600160801b0316815260200160018360200151612e769190614122565b6001600160801b039081169091526001600160a01b0380861660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186528281526001600160401b034281168287019081528984526003909652868320915182549651909116600160a01b026001600160e01b031990961690851617949094179093559251859392918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46123dd565b6040805180820190915260008082526020820152612f55826000541190565b612fb45760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610db5565b60007f00000000000000000000000000000000000000000000000000000000000000008310613015576130077f000000000000000000000000000000000000000000000000000000000000000084613d90565b613012906001613d17565b90505b825b81811061307e576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561306b57949350505050565b508061307681613dbd565b915050613017565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610db5565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561323357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613175903390899088908890600401614182565b602060405180830381600087803b15801561318f57600080fd5b505af19250505080156131bf575060408051601f3d908101601f191682019092526131bc918101906141bf565b60015b613219573d8080156131ed576040519150601f19603f3d011682016040523d82523d6000602084013e6131f2565b606091505b5080516132115760405162461bcd60e51b8152600401610db590613dd4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612d5c565b506001949350505050565b6060600c8054610dd290613c3d565b6060816132715750506040805180820190915260018152600360fc1b602082015290565b8160005b811561329b578061328581613cc5565b91506132949050600a8361416e565b9150613275565b6000816001600160401b038111156132b5576132b56137ed565b6040519080825280601f01601f1916602001820160405280156132df576020820181803683370190505b5090505b8415612d5c576132f4600183613d90565b9150613301600a8661415a565b61330c906030613d17565b60f81b81838151811061332157613321613d7a565b60200101906001600160f81b031916908160001a905350613343600a8661416e565b94506132e3565b6000546001600160a01b0384166133ad5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610db5565b6133b8816000541190565b156134055760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610db5565b7f00000000000000000000000000000000000000000000000000000000000000008311156134805760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610db5565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906134dc908790614122565b6001600160801b031681526020018583602001516134fa9190614122565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156136195760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46135dd6000888488613131565b6135f95760405162461bcd60e51b8152600401610db590613dd4565b8161360381613cc5565b925050808061361190613cc5565b915050613590565b506000819055612c55565b82805461363090613c3d565b90600052602060002090601f0160209004810192826136525760008555613698565b82601f1061366b57805160ff1916838001178555613698565b82800160010185558215613698579182015b8281111561369857825182559160200191906001019061367d565b5061193b9291505b8082111561193b57600081556001016136a0565b6001600160e01b03198116811461272757600080fd5b6000602082840312156136dc57600080fd5b813561243a816136b4565b6001600160a01b038116811461272757600080fd5b6000806040838503121561370f57600080fd5b823561371a816136e7565b946020939093013593505050565b60006020828403121561373a57600080fd5b5035919050565b60005b8381101561375c578181015183820152602001613744565b838111156123dd5750506000910152565b60008151808452613785816020860160208601613741565b601f01601f19169290920160200192915050565b60208152600061243a602083018461376d565b6000806000606084860312156137c157600080fd5b83356137cc816136e7565b925060208401356137dc816136e7565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561382b5761382b6137ed565b604052919050565b60006001600160401b0383111561384c5761384c6137ed565b61385f601f8401601f1916602001613803565b905082815283838301111561387357600080fd5b828260208301376000602084830101529392505050565b60006020828403121561389c57600080fd5b81356001600160401b038111156138b257600080fd5b8201601f810184136138c357600080fd5b612d5c84823560208401613833565b600080604083850312156138e557600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b82811015613945578151805163ffffffff1685528601516001600160a01b0316868501529284019290850190600101613911565b5091979650505050505050565b6000602080838503121561396557600080fd5b82356001600160401b038082111561397c57600080fd5b818501915085601f83011261399057600080fd5b8135818111156139a2576139a26137ed565b8060051b91506139b3848301613803565b81815291830184019184810190888411156139cd57600080fd5b938501935b838510156139eb578435825293850193908501906139d2565b98975050505050505050565b60008060408385031215613a0a57600080fd5b823591506020830135613a1c816136e7565b809150509250929050565b600060208284031215613a3957600080fd5b813561243a816136e7565b6020808252825182820181905260009190848201906040850190845b81811015613a7c57835183529284019291840191600101613a60565b50909695505050505050565b60008060408385031215613a9b57600080fd5b8235613aa6816136e7565b915060208301358015158114613a1c57600080fd5b600080600060608486031215613ad057600080fd5b8335613adb816136e7565b95602085013595506040909401359392505050565b60008060008060808587031215613b0657600080fd5b8435613b11816136e7565b93506020850135613b21816136e7565b92506040850135915060608501356001600160401b03811115613b4357600080fd5b8501601f81018713613b5457600080fd5b613b6387823560208401613833565b91505092959194509250565b60008060408385031215613b8257600080fd5b8235613b8d816136e7565b91506020830135613a1c816136e7565b602080825282518282018190526000919060409081850190868401855b82811015613945578151805163ffffffff9081168652878201518116888701528682015116868601526060908101516001600160a01b03169085015260809093019290850190600101613bba565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680613c5157607f821691505b60208210811415613c7257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415613cd957613cd9613caf565b5060010190565b60208082526018908201527f4d696e74696e67206973206e6f74206c69766520796574210000000000000000604082015260600190565b60008219821115613d2a57613d2a613caf565b500190565b6020808252602b908201527f5468697320776f756c642065786365656420746865206d6178696d756d204e4660408201526a54732f616464726573732160a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600082821015613da257613da2613caf565b500390565b634e487b7160e01b600052603160045260246000fd5b600081613dcc57613dcc613caf565b506000190190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60008151613e39818560208601613741565b9290920192915050565b60008351613e55818460208801613741565b835190830190613e69818360208801613741565b01949350505050565b6936b4b73a3830bab9b29d60b11b815260008951613e9781600a850160208e01613741565b6a1db0b63637bbb634b9ba1d60a91b600a918401918201528951613ec2816015840160208e01613741565b691dbbb0b4ba3634b9ba1d60b11b601592909101918201528851613eed81601f840160208d01613741565b671db83ab13634b19d60c11b601f92909101918201528751613f16816027840160208c01613741565b681db9ba30b5b4b7339d60b91b60279290910191820152613fb1613fab613f92613f8c613f6e613f68613f4c603088018e613e27565b6f1db0b63637bbb634b9ba383934b1b29d60811b815260100190565b8b613e27565b711db0b63637bbb634b9ba36b0bc36b4b73a1d60711b815260120190565b88613e27565b6c1db9ba30b5b2b23a37b5b2b71d60991b8152600d0190565b85613e27565b9b9a5050505050505050505050565b6e1dbbb0b4ba3634b9ba383934b1b29d60891b8152600089516020613feb82600f8601838f01613741565b701dbbb0b4ba3634b9ba36b0bc36b4b73a1d60791b600f928501928301528a5161401a81838501848f01613741565b6c1db83ab13634b1b83934b1b29d60991b920181810192909252895161404681602d85018d8501613741565b6e1db83ab13634b1b6b0bc36b4b73a1d60891b602d9390910192830152885161407581603c8501848d01613741565b6c1dba37ba30b639bab838363c9d60991b603c939091019283015250613fb1613fab6140e6613f8c6140ca613f686140b0604988018e613e27565b6d1db932b9b2b93b32b239b4bd329d60911b8152600e0190565b6f1db1b7b63632b1ba34b7b739b4bd329d60811b815260100190565b671db6b4b73a32b21d60c11b815260080190565b60006001600160801b038381169083168181101561411a5761411a613caf565b039392505050565b60006001600160801b03808316818516808303821115613e6957613e69613caf565b634e487b7160e01b600052601260045260246000fd5b60008261416957614169614144565b500690565b60008261417d5761417d614144565b500490565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906141b59083018461376d565b9695505050505050565b6000602082840312156141d157600080fd5b815161243a816136b456fea2646970667358221220c712e8bd93275db9cf10cbe065512a7dacf0a375c44acb87e26e8e115b12a98c64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106104265760003560e01c80636b5eb5c011610229578063b5c95f181161012e578063d7224ba0116100b6578063e985e9c51161007a578063e985e9c514610c41578063ede2e40c14610c8a578063f2fde38b14610ca0578063f54112ab14610cc0578063fffcfdbd14610a5257600080fd5b8063d7224ba014610bbf578063d844260014610bd5578063d9e023b714610bf5578063db5ec00414610c0b578063e598212014610c2b57600080fd5b8063c87b56dd116100fd578063c87b56dd14610b27578063ca19d84e14610b47578063cab2bab514610b67578063cc7a262e14610b94578063d547cfb714610baa57600080fd5b8063b5c95f1814610ac6578063b5e5d4e414610adc578063b88d4fde14610af2578063c637669214610b1257600080fd5b806395d89b41116101b1578063a619d2fc11610180578063a619d2fc14610a52578063aeab458a14610a72578063aebb096c14610a88578063b00c357514610a90578063b14f316b14610ab057600080fd5b806395d89b41146109dd578063a1a77234146109f2578063a22cb46514610a12578063a60c840114610a3257600080fd5b8063834846a4116101f8578063834846a414610928578063873fd089146109735780638da5cb5b146109935780638f58913a146109b1578063925430d2146109c757600080fd5b80636b5eb5c0146108bd57806370a08231146108dd578063715018a6146108fd57806379eef03c1461091257600080fd5b806337840cae1161032f5780634f6ccce7116102b75780635af3963a116102865780635af3963a146107f15780635d3eea91146108475780636352211e1461085a57806363c28db11461087a578063658db7ec146108a757600080fd5b80634f6ccce714610788578063537924ef146107a8578063571cce17146107bb5780635a5d096c146107d157600080fd5b806342c20bdd116102fe57806342c20bdd146106f257806342f51a6214610712578063433ee791146107325780634396d43b1461075257806348787ca31461077257600080fd5b806337840cae146106705780633ccfd60b1461069d578063411410cc146106b257806342842e0e146106d257600080fd5b806318160ddd116103b2578063253f654111610381578063253f6541146105e857806326092b83146106085780632f745c591461061057806330176e131461063057806332710d571461065057600080fd5b806318160ddd146105805780631bf6ddae1461059557806323b872dd146105a8578063246f7b30146105c857600080fd5b8063081812fc116103f9578063081812fc146104d2578063090cdeaa1461050a578063095ea7b3146105205780630b28105c146105405780630cf9ef011461056057600080fd5b806301ffc9a71461042b578063061886cd1461046057806306b0f5ca1461048e57806306fdde03146104b0575b600080fd5b34801561043757600080fd5b5061044b6104463660046136ca565b610ced565b60405190151581526020015b60405180910390f35b34801561046c57600080fd5b5061048061047b3660046136fc565b610d5a565b604051908152602001610457565b34801561049a57600080fd5b506104ae6104a9366004613728565b610d8b565b005b3480156104bc57600080fd5b506104c5610dc3565b6040516104579190613799565b3480156104de57600080fd5b506104f26104ed366004613728565b610e55565b6040516001600160a01b039091168152602001610457565b34801561051657600080fd5b5061048060145481565b34801561052c57600080fd5b506104ae61053b3660046136fc565b610ee0565b34801561054c57600080fd5b5061048061055b3660046136fc565b610ff8565b34801561056c57600080fd5b506104ae61057b366004613728565b611038565b34801561058c57600080fd5b50600054610480565b6104ae6105a3366004613728565b611067565b3480156105b457600080fd5b506104ae6105c33660046137ac565b6112d2565b3480156105d457600080fd5b506104ae6105e3366004613728565b6112dd565b3480156105f457600080fd5b506104ae610603366004613728565b61130c565b6104ae61133b565b34801561061c57600080fd5b5061048061062b3660046136fc565b611460565b34801561063c57600080fd5b506104ae61064b36600461388a565b6115cd565b34801561065c57600080fd5b506104ae61066b366004613728565b61160e565b34801561067c57600080fd5b5061069061068b3660046138d2565b61163d565b60405161045791906138f4565b3480156106a957600080fd5b506104ae61173b565b3480156106be57600080fd5b506104ae6106cd366004613728565b611782565b3480156106de57600080fd5b506104ae6106ed3660046137ac565b6117b1565b3480156106fe57600080fd5b506104ae61070d366004613728565b6117cc565b34801561071e57600080fd5b506104ae61072d366004613728565b6117fb565b34801561073e57600080fd5b506104ae61074d3660046136fc565b61182a565b34801561075e57600080fd5b506104ae61076d366004613728565b6118ae565b34801561077e57600080fd5b5061048060115481565b34801561079457600080fd5b506104806107a3366004613728565b6118dd565b6104ae6107b6366004613952565b61193f565b3480156107c757600080fd5b50610480601a5481565b3480156107dd57600080fd5b5061044b6107ec3660046139f7565b611ba3565b3480156107fd57600080fd5b5061081161080c366004613728565b611bc9565b6040805163ffffffff9586168152938516602085015291909316908201526001600160a01b039091166060820152608001610457565b6104ae610855366004613728565b611c18565b34801561086657600080fd5b506104f2610875366004613728565b611eaf565b34801561088657600080fd5b5061089a610895366004613a27565b611ec1565b6040516104579190613a44565b3480156108b357600080fd5b50610480600d5481565b3480156108c957600080fd5b506104ae6108d8366004613728565b611f64565b3480156108e957600080fd5b506104806108f8366004613a27565b611f93565b34801561090957600080fd5b506104ae612024565b34801561091e57600080fd5b5061048060165481565b34801561093457600080fd5b5061095e610943366004613a27565b6001600160a01b03166000908152601c602052604090205490565b60405163ffffffff9091168152602001610457565b34801561097f57600080fd5b5061044b61098e3660046139f7565b612058565b34801561099f57600080fd5b506008546001600160a01b03166104f2565b3480156109bd57600080fd5b5061048060155481565b3480156109d357600080fd5b5061048060195481565b3480156109e957600080fd5b506104c56120e9565b3480156109fe57600080fd5b506104ae610a0d366004613728565b6120f8565b348015610a1e57600080fd5b506104ae610a2d366004613a88565b612127565b348015610a3e57600080fd5b5061089a610a4d366004613abb565b6121ec565b348015610a5e57600080fd5b506104ae610a6d366004613728565b61227c565b348015610a7e57600080fd5b5061048060125481565b6104ae6122ab565b348015610a9c57600080fd5b506104ae610aab366004613728565b61237b565b348015610abc57600080fd5b5061048060175481565b348015610ad257600080fd5b50610480600e5481565b348015610ae857600080fd5b5061048060105481565b348015610afe57600080fd5b506104ae610b0d366004613af0565b6123aa565b348015610b1e57600080fd5b50601e5461095e565b348015610b3357600080fd5b506104c5610b42366004613728565b6123e3565b348015610b5357600080fd5b50610480610b62366004613a27565b612441565b348015610b7357600080fd5b50610480610b82366004613a27565b601b6020526000908152604090205481565b348015610ba057600080fd5b50610480601d5481565b348015610bb657600080fd5b506104c5612481565b348015610bcb57600080fd5b5061048060075481565b348015610be157600080fd5b506104ae610bf0366004613728565b61250f565b348015610c0157600080fd5b5061048060135481565b348015610c1757600080fd5b506104c5610c26366004613a27565b61253e565b348015610c3757600080fd5b50610480600f5481565b348015610c4d57600080fd5b5061044b610c5c366004613b6f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610c9657600080fd5b5061048060185481565b348015610cac57600080fd5b506104ae610cbb366004613a27565b61268f565b348015610ccc57600080fd5b50610ce0610cdb3660046138d2565b61272a565b6040516104579190613b9d565b60006001600160e01b031982166380ac58cd60e01b1480610d1e57506001600160e01b03198216635b5e139f60e01b145b80610d3957506001600160e01b0319821663780e9d6360e01b145b80610d5457506301ffc9a760e01b6001600160e01b03198316145b92915050565b601c6020528160005260406000208181548110610d7657600080fd5b90600052602060002001600091509150505481565b6008546001600160a01b03163314610dbe5760405162461bcd60e51b8152600401610db590613c08565b60405180910390fd5b601755565b606060018054610dd290613c3d565b80601f0160208091040260200160405190810160405280929190818152602001828054610dfe90613c3d565b8015610e4b5780601f10610e2057610100808354040283529160200191610e4b565b820191906000526020600020905b815481529060010190602001808311610e2e57829003601f168201915b5050505050905090565b6000610e62826000541190565b610ec45760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201526c3c34b9ba32b73a103a37b5b2b760991b6064820152608401610db5565b506000908152600560205260409020546001600160a01b031690565b6000610eeb82611eaf565b9050806001600160a01b0316836001600160a01b03161415610f5a5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201526132b960f11b6064820152608401610db5565b336001600160a01b0382161480610f765750610f768133610c5c565b610fe85760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610db5565b610ff3838383612855565b505050565b6008546000906001600160a01b031633146110255760405162461bcd60e51b8152600401610db590613c08565b61102f83836128b1565b50600192915050565b6008546001600160a01b031633146110625760405162461bcd60e51b8152600401610db590613c08565b601955565b61106f6128cb565b600260095414156110925760405162461bcd60e51b8152600401610db590613c78565b6002600955601a546110e65760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e6720506f6f6c206973206e6f74206f70656e20796574210000006044820152606401610db5565b336110f082611eaf565b6001600160a01b0316146111465760405162461bcd60e51b815260206004820152601e60248201527f596f7520617265206e6f742061206f776e6572206f6620746865204e465400006044820152606401610db5565b601554336000908152601c6020526040902054106111c15760405162461bcd60e51b815260206004820152603260248201527f5468697320776f756c642065786365656420746865206d6178696d756d207374604482015271616b6564204e4654732f616464726573732160701b6064820152608401610db5565b6111cc3330836112d2565b336000908152601c602090815260408220805460018101825590835290822001829055601d8054916111fd83613cc5565b90915550506040805160808101825263ffffffff42811682526001602083018181529482169383019384523360608401908152601e8054808401825560009190915293517f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e35090940180549651955191516001600160a01b0316600160601b026bffffffffffffffffffffffff928516600160401b02929092166001600160401b039685166401000000000267ffffffffffffffff19909816959094169490941795909517939093161792909217909155600955565b610ff38383836128d7565b6008546001600160a01b031633146113075760405162461bcd60e51b8152600401610db590613c08565b601255565b6008546001600160a01b031633146113365760405162461bcd60e51b8152600401610db590613c08565b600e55565b6113436128cb565b600260095414156113665760405162461bcd60e51b8152600401610db590613c78565b60026009556016546000901561138e5760405162461bcd60e51b8152600401610db590613ce0565b6019546113dd5760405162461bcd60e51b815260206004820152601b60248201527f5075626c6963206d696e74696e67206973206e6f74206f70656e2100000000006044820152606401610db5565b6113e934601154612c5d565b601254336000908152601b60205260409020549192509061140b908390613d17565b11156114295760405162461bcd60e51b8152600401610db590613d2f565b336000908152601b602052604081208054839290611448908490613d17565b90915550611458905033826128b1565b506001600955565b600061146b83611f93565b82106114c45760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610db5565b600080549080805b8381101561156d576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561151e57805192505b876001600160a01b0316836001600160a01b0316141561155a578684141561154c57509350610d5492505050565b8361155681613cc5565b9450505b508061156581613cc5565b9150506114cc565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201526d0deeedccae440c4f240d2dcc8caf60931b6064820152608401610db5565b6008546001600160a01b031633146115f75760405162461bcd60e51b8152600401610db590613c08565b805161160a90600c906020840190613624565b5050565b6008546001600160a01b031633146116385760405162461bcd60e51b8152600401610db590613c08565b601555565b6060600080836001600160401b0381111561165a5761165a6137ed565b60405190808252806020026020018201604052801561169f57816020015b60408051808201909152600080825260208201528152602001906001900390816116785790505b50905060005b84811015611732576116b78682613d17565b92506116c283611eaf565b8282815181106116d4576116d4613d7a565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250508282828151811061170b5761170b613d7a565b602090810291909101015163ffffffff90911690528061172a81613cc5565b9150506116a5565b50949350505050565b6008546001600160a01b031633146117655760405162461bcd60e51b8152600401610db590613c08565b61178061177a6008546001600160a01b031690565b47612d64565b565b6008546001600160a01b031633146117ac5760405162461bcd60e51b8152600401610db590613c08565b600d55565b610ff3838383604051806020016040528060008152506123aa565b6008546001600160a01b031633146117f65760405162461bcd60e51b8152600401610db590613c08565b600a55565b6008546001600160a01b031633146118255760405162461bcd60e51b8152600401610db590613c08565b601455565b6008546001600160a01b031633146118545760405162461bcd60e51b8152600401610db590613c08565b804710156118a45760405162461bcd60e51b815260206004820181905260248201527f496e73756666696369656e742062616c616e636520746f2077697468647261776044820152606401610db5565b61160a8282612d64565b6008546001600160a01b031633146118d85760405162461bcd60e51b8152600401610db590613c08565b601a55565b60008054821061193b5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b6064820152608401610db5565b5090565b6119476128cb565b6002600954141561196a5760405162461bcd60e51b8152600401610db590613c78565b60026009556016546000908190156119945760405162461bcd60e51b8152600401610db590613ce0565b6017546119e35760405162461bcd60e51b815260206004820152601e60248201527f416c6c6f776c697374206d696e74696e67206973206e6f74206f70656e2100006044820152606401610db5565b6040516bffffffffffffffffffffffff193360601b16602082015260340160405160208183030381529060405280519060200120905060005b8351811015611abb576000848281518110611a3957611a39613d7a565b60200260200101519050808311611a7b576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611aa8565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080611ab381613cc5565b915050611a1c565b50600a548114611b1e5760405162461bcd60e51b815260206004820152602860248201527f596f7520617265206e6f7420656c696769626c6520666f7220416c6c6f776c696044820152677374206d696e742160c01b6064820152608401610db5565b611b2a34600d54612c5d565b600e54336000908152601b602052604090205491935090611b4c908490613d17565b1115611b6a5760405162461bcd60e51b8152600401610db590613d2f565b336000908152601b602052604081208054849290611b89908490613d17565b90915550611b99905033836128b1565b5050600160095550565b6000816001600160a01b0316611bb884611eaf565b6001600160a01b0316149392505050565b601e8181548110611bd957600080fd5b60009182526020909120015463ffffffff80821692506401000000008204811691600160401b810490911690600160601b90046001600160a01b031684565b611c206128cb565b60026009541415611c435760405162461bcd60e51b8152600401610db590613c78565b6002600955336000908152601c60205260409020546201869f908015611cbf5760005b81811015611cbd57336000908152601c60205260409020805485919083908110611c9257611c92613d7a565b90600052602060002001541415611cab57809250611cbd565b80611cb581613cc5565b915050611c66565b505b816201869f1415611d205760405162461bcd60e51b815260206004820152602560248201527f596f7520617265206e6f742061206f776e6572206f6620746865207374616b65604482015264190813919560da1b6064820152608401610db5565b611d2b303385612dfa565b336000908152601c60205260409020611d45600183613d90565b81548110611d5557611d55613d7a565b6000918252602080832090910154338352601c9091526040909120805484908110611d8257611d82613d7a565b6000918252602080832090910192909255338152601c90915260409020805480611dae57611dae613da7565b60019003818190600052602060002001600090559055601d6000815480929190611dd790613dbd565b90915550506040805160808101825263ffffffff42811682526002602083019081529581169282019283523360608301908152601e80546001818101835560009290925293517f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e35090940180549851955192516001600160a01b0316600160601b026bffffffffffffffffffffffff938516600160401b02939093166001600160401b039685166401000000000267ffffffffffffffff19909a1695909416949094179790971793909316179190911790555050600955565b6000611eba82612f36565b5192915050565b60606000611ece60005490565b11611ed857600080fd5b6001600160a01b0382166000908152601c6020526040902054611efa57600080fd5b6001600160a01b0382166000908152601c602090815260409182902080548351818402810184019094528084529091830182828015611f5857602002820191906000526020600020905b815481526020019060010190808311611f44575b50505050509050919050565b6008546001600160a01b03163314611f8e5760405162461bcd60e51b8152600401610db590613c08565b601055565b60006001600160a01b038216611fff5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b6064820152608401610db5565b506001600160a01b03166000908152600460205260409020546001600160801b031690565b6008546001600160a01b0316331461204e5760405162461bcd60e51b8152600401610db590613c08565b61178060006130df565b6001600160a01b0381166000908152601c602052604081205480156120df5760005b818110156120dd576001600160a01b0384166000908152601c602052604090208054869190839081106120af576120af613d7a565b906000526020600020015414156120cb57600192505050610d54565b806120d581613cc5565b91505061207a565b505b5060009392505050565b606060028054610dd290613c3d565b6008546001600160a01b031633146121225760405162461bcd60e51b8152600401610db590613c08565b601355565b6001600160a01b0382163314156121805760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610db5565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60606000826001600160401b03811115612208576122086137ed565b604051908082528060200260200182016040528015612231578160200160208202803683370190505b50905060005b838110156117325761224d8661062b8784613d17565b82828151811061225f5761225f613d7a565b60209081029190910101528061227481613cc5565b915050612237565b6008546001600160a01b031633146122a65760405162461bcd60e51b8152600401610db590613c08565b600f55565b6122b36128cb565b600260095414156122d65760405162461bcd60e51b8152600401610db590613c78565b6002600955601654600090156122fe5760405162461bcd60e51b8152600401610db590613ce0565b60185461234d5760405162461bcd60e51b815260206004820152601d60248201527f576169746c697374206d696e74696e67206973206e6f74206f70656e210000006044820152606401610db5565b61235934600f54612c5d565b601054336000908152601b60205260409020549192509061140b908390613d17565b6008546001600160a01b031633146123a55760405162461bcd60e51b8152600401610db590613c08565b601655565b6123b58484846128d7565b6123c184848484613131565b6123dd5760405162461bcd60e51b8152600401610db590613dd4565b50505050565b606060006123ef61323e565b9050600081511161240f576040518060200160405280600081525061243a565b806124198461324d565b60405160200161242a929190613e43565b6040516020818303038152906040525b9392505050565b6008546000906001600160a01b0316331461246e5760405162461bcd60e51b8152600401610db590613c08565b6124798260016128b1565b506001919050565b600c805461248e90613c3d565b80601f01602080910402602001604051908101604052809291908181526020018280546124ba90613c3d565b80156125075780601f106124dc57610100808354040283529160200191612507565b820191906000526020600020905b8154815290600101906020018083116124ea57829003601f168201915b505050505081565b6008546001600160a01b031633146125395760405162461bcd60e51b8152600401610db590613c08565b601855565b6060600061254d60165461324d565b61255860175461324d565b61256360185461324d565b61256e60195461324d565b612579601a5461324d565b612584600d5461324d565b61258f600e5461324d565b61259a601d5461324d565b6040516020016125b1989796959493929190613e72565b604051602081830303815290604052905060006125cf600f5461324d565b6125da60105461324d565b6125e560115461324d565b6125f060125461324d565b6126016125fc60005490565b61324d565b61260c60145461324d565b61261760135461324d565b6001600160a01b038b166000908152601b60205260409020546126399061324d565b604051602001612650989796959493929190613fc0565b604051602081830303815290604052905060008282604051602001612676929190613e43565b60408051601f1981840301815291905295945050505050565b6008546001600160a01b031633146126b95760405162461bcd60e51b8152600401610db590613c08565b6001600160a01b03811661271e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610db5565b612727816130df565b50565b60606000826001600160401b03811115612746576127466137ed565b60405190808252806020026020018201604052801561279857816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816127645790505b50905060005b8381101561284d57601e6127b28683613d17565b815481106127c2576127c2613d7a565b600091825260209182902060408051608081018252929091015463ffffffff80821684526401000000008204811694840194909452600160401b810490931690820152600160601b9091046001600160a01b03166060820152825183908390811061282f5761282f613d7a565b6020026020010181905250808061284590613cc5565b91505061279e565b509392505050565b60008281526005602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61160a82826040518060200160405280600081525061334a565b33321461178057600080fd5b60006128e282612f36565b80519091506000906001600160a01b0316336001600160a01b0316148061291957503361290e84610e55565b6001600160a01b0316145b8061292b5750815161292b9033610c5c565b9050806129955760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610db5565b846001600160a01b031682600001516001600160a01b031614612a095760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f72726563746044820152651037bbb732b960d11b6064820152608401610db5565b6001600160a01b038416612a6d5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610db5565b612a7d6000848460000151612855565b6001600160a01b0385166000908152600460205260408120805460019290612aaf9084906001600160801b03166140fa565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b03861660009081526004602052604081208054600194509092612afb91859116614122565b82546001600160801b039182166101009390930a9283029190920219909116179055506040805180820182526001600160a01b0380871682526001600160401b03428116602080850191825260008981526003909152948520935184549151909216600160a01b026001600160e01b03199091169190921617179055612b82846001613d17565b6000818152600360205260409020549091506001600160a01b0316612c1357612bac816000541190565b15612c135760408051808201825284516001600160a01b0390811682526020808701516001600160401b039081168285019081526000878152600390935294909120925183549451909116600160a01b026001600160e01b03199094169116179190911790555b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600080612c6a838561415a565b90508015612caf5760405162461bcd60e51b8152602060048201526012602482015271084c2c840c2dadadeeadce840decc408aa8960731b6044820152606401610db5565b6000612cbb848661416e565b905060008111612cfe5760405162461bcd60e51b815260206004820152600e60248201526d0496e70757420616d6f756e743d360941b6044820152606401610db5565b601454601354612d0e9190613d90565b81612d1860005490565b612d229190613d17565b1115612d5c5760405162461bcd60e51b8152602060048201526009602482015268536f6c64206f75742160b81b6044820152606401610db5565b949350505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612db1576040519150601f19603f3d011682016040523d82523d6000602084013e612db6565b606091505b5050905080610ff35760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610db5565b6001600160a01b0382166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b9091041691810191909152815180830190925280519091908190612e5790600190614122565b6001600160801b0316815260200160018360200151612e769190614122565b6001600160801b039081169091526001600160a01b0380861660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186528281526001600160401b034281168287019081528984526003909652868320915182549651909116600160a01b026001600160e01b031990961690851617949094179093559251859392918816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a46123dd565b6040805180820190915260008082526020820152612f55826000541190565b612fb45760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e657869736044820152693a32b73a103a37b5b2b760b11b6064820152608401610db5565b60007f00000000000000000000000000000000000000000000000000000000000000648310613015576130077f000000000000000000000000000000000000000000000000000000000000006484613d90565b613012906001613d17565b90505b825b81811061307e576000818152600360209081526040918290208251808401909352546001600160a01b038116808452600160a01b9091046001600160401b0316918301919091521561306b57949350505050565b508061307681613dbd565b915050613017565b5060405162461bcd60e51b815260206004820152602f60248201527f455243373231413a20756e61626c6520746f2064657465726d696e652074686560448201526e1037bbb732b91037b3103a37b5b2b760891b6064820152608401610db5565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0384163b1561323357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613175903390899088908890600401614182565b602060405180830381600087803b15801561318f57600080fd5b505af19250505080156131bf575060408051601f3d908101601f191682019092526131bc918101906141bf565b60015b613219573d8080156131ed576040519150601f19603f3d011682016040523d82523d6000602084013e6131f2565b606091505b5080516132115760405162461bcd60e51b8152600401610db590613dd4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612d5c565b506001949350505050565b6060600c8054610dd290613c3d565b6060816132715750506040805180820190915260018152600360fc1b602082015290565b8160005b811561329b578061328581613cc5565b91506132949050600a8361416e565b9150613275565b6000816001600160401b038111156132b5576132b56137ed565b6040519080825280601f01601f1916602001820160405280156132df576020820181803683370190505b5090505b8415612d5c576132f4600183613d90565b9150613301600a8661415a565b61330c906030613d17565b60f81b81838151811061332157613321613d7a565b60200101906001600160f81b031916908160001a905350613343600a8661416e565b94506132e3565b6000546001600160a01b0384166133ad5760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610db5565b6133b8816000541190565b156134055760405162461bcd60e51b815260206004820152601d60248201527f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006044820152606401610db5565b7f00000000000000000000000000000000000000000000000000000000000000648311156134805760405162461bcd60e51b815260206004820152602260248201527f455243373231413a207175616e7469747920746f206d696e7420746f6f2068696044820152610ced60f31b6064820152608401610db5565b6001600160a01b0384166000908152600460209081526040918290208251808401845290546001600160801b038082168352600160801b90910416918101919091528151808301909252805190919081906134dc908790614122565b6001600160801b031681526020018583602001516134fa9190614122565b6001600160801b039081169091526001600160a01b0380881660008181526004602090815260408083208751978301518716600160801b029790961696909617909455845180860186529182526001600160401b034281168386019081528883526003909552948120915182549451909516600160a01b026001600160e01b031990941694909216939093179190911790915582905b858110156136195760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46135dd6000888488613131565b6135f95760405162461bcd60e51b8152600401610db590613dd4565b8161360381613cc5565b925050808061361190613cc5565b915050613590565b506000819055612c55565b82805461363090613c3d565b90600052602060002090601f0160209004810192826136525760008555613698565b82601f1061366b57805160ff1916838001178555613698565b82800160010185558215613698579182015b8281111561369857825182559160200191906001019061367d565b5061193b9291505b8082111561193b57600081556001016136a0565b6001600160e01b03198116811461272757600080fd5b6000602082840312156136dc57600080fd5b813561243a816136b4565b6001600160a01b038116811461272757600080fd5b6000806040838503121561370f57600080fd5b823561371a816136e7565b946020939093013593505050565b60006020828403121561373a57600080fd5b5035919050565b60005b8381101561375c578181015183820152602001613744565b838111156123dd5750506000910152565b60008151808452613785816020860160208601613741565b601f01601f19169290920160200192915050565b60208152600061243a602083018461376d565b6000806000606084860312156137c157600080fd5b83356137cc816136e7565b925060208401356137dc816136e7565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561382b5761382b6137ed565b604052919050565b60006001600160401b0383111561384c5761384c6137ed565b61385f601f8401601f1916602001613803565b905082815283838301111561387357600080fd5b828260208301376000602084830101529392505050565b60006020828403121561389c57600080fd5b81356001600160401b038111156138b257600080fd5b8201601f810184136138c357600080fd5b612d5c84823560208401613833565b600080604083850312156138e557600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b82811015613945578151805163ffffffff1685528601516001600160a01b0316868501529284019290850190600101613911565b5091979650505050505050565b6000602080838503121561396557600080fd5b82356001600160401b038082111561397c57600080fd5b818501915085601f83011261399057600080fd5b8135818111156139a2576139a26137ed565b8060051b91506139b3848301613803565b81815291830184019184810190888411156139cd57600080fd5b938501935b838510156139eb578435825293850193908501906139d2565b98975050505050505050565b60008060408385031215613a0a57600080fd5b823591506020830135613a1c816136e7565b809150509250929050565b600060208284031215613a3957600080fd5b813561243a816136e7565b6020808252825182820181905260009190848201906040850190845b81811015613a7c57835183529284019291840191600101613a60565b50909695505050505050565b60008060408385031215613a9b57600080fd5b8235613aa6816136e7565b915060208301358015158114613a1c57600080fd5b600080600060608486031215613ad057600080fd5b8335613adb816136e7565b95602085013595506040909401359392505050565b60008060008060808587031215613b0657600080fd5b8435613b11816136e7565b93506020850135613b21816136e7565b92506040850135915060608501356001600160401b03811115613b4357600080fd5b8501601f81018713613b5457600080fd5b613b6387823560208401613833565b91505092959194509250565b60008060408385031215613b8257600080fd5b8235613b8d816136e7565b91506020830135613a1c816136e7565b602080825282518282018190526000919060409081850190868401855b82811015613945578151805163ffffffff9081168652878201518116888701528682015116868601526060908101516001600160a01b03169085015260809093019290850190600101613bba565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680613c5157607f821691505b60208210811415613c7257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415613cd957613cd9613caf565b5060010190565b60208082526018908201527f4d696e74696e67206973206e6f74206c69766520796574210000000000000000604082015260600190565b60008219821115613d2a57613d2a613caf565b500190565b6020808252602b908201527f5468697320776f756c642065786365656420746865206d6178696d756d204e4660408201526a54732f616464726573732160a81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600082821015613da257613da2613caf565b500390565b634e487b7160e01b600052603160045260246000fd5b600081613dcc57613dcc613caf565b506000190190565b60208082526033908201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260408201527232b1b2b4bb32b91034b6b83632b6b2b73a32b960691b606082015260800190565b60008151613e39818560208601613741565b9290920192915050565b60008351613e55818460208801613741565b835190830190613e69818360208801613741565b01949350505050565b6936b4b73a3830bab9b29d60b11b815260008951613e9781600a850160208e01613741565b6a1db0b63637bbb634b9ba1d60a91b600a918401918201528951613ec2816015840160208e01613741565b691dbbb0b4ba3634b9ba1d60b11b601592909101918201528851613eed81601f840160208d01613741565b671db83ab13634b19d60c11b601f92909101918201528751613f16816027840160208c01613741565b681db9ba30b5b4b7339d60b91b60279290910191820152613fb1613fab613f92613f8c613f6e613f68613f4c603088018e613e27565b6f1db0b63637bbb634b9ba383934b1b29d60811b815260100190565b8b613e27565b711db0b63637bbb634b9ba36b0bc36b4b73a1d60711b815260120190565b88613e27565b6c1db9ba30b5b2b23a37b5b2b71d60991b8152600d0190565b85613e27565b9b9a5050505050505050505050565b6e1dbbb0b4ba3634b9ba383934b1b29d60891b8152600089516020613feb82600f8601838f01613741565b701dbbb0b4ba3634b9ba36b0bc36b4b73a1d60791b600f928501928301528a5161401a81838501848f01613741565b6c1db83ab13634b1b83934b1b29d60991b920181810192909252895161404681602d85018d8501613741565b6e1db83ab13634b1b6b0bc36b4b73a1d60891b602d9390910192830152885161407581603c8501848d01613741565b6c1dba37ba30b639bab838363c9d60991b603c939091019283015250613fb1613fab6140e6613f8c6140ca613f686140b0604988018e613e27565b6d1db932b9b2b93b32b239b4bd329d60911b8152600e0190565b6f1db1b7b63632b1ba34b7b739b4bd329d60811b815260100190565b671db6b4b73a32b21d60c11b815260080190565b60006001600160801b038381169083168181101561411a5761411a613caf565b039392505050565b60006001600160801b03808316818516808303821115613e6957613e69613caf565b634e487b7160e01b600052601260045260246000fd5b60008261416957614169614144565b500690565b60008261417d5761417d614144565b500490565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906141b59083018461376d565b9695505050505050565b6000602082840312156141d157600080fd5b815161243a816136b456fea2646970667358221220c712e8bd93275db9cf10cbe065512a7dacf0a375c44acb87e26e8e115b12a98c64736f6c63430008090033

Deployed Bytecode Sourcemap

20918:10642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11958:370;;;;;;;;;;-1:-1:-1;11958:370:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;11958:370:0;;;;;;;;21667:53;;;;;;;;;;-1:-1:-1;21667:53:0;;;;;:::i;:::-;;:::i;:::-;;;1194:25:1;;;1182:2;1167:18;21667:53:0;1048:177:1;29159:109:0;;;;;;;;;;-1:-1:-1;29159:109:0;;;;;:::i;:::-;;:::i;:::-;;13517:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14584:202::-;;;;;;;;;;-1:-1:-1;14584:202:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2352:32:1;;;2334:51;;2322:2;2307:18;14584:202:0;2188:203:1;21359:33:0;;;;;;;;;;;;;;;;14205:375;;;;;;;;;;-1:-1:-1;14205:375:0;;;;;:::i;:::-;;:::i;22299:149::-;;;;;;;;;;-1:-1:-1;22299:149:0;;;;;:::i;:::-;;:::i;29387:103::-;;;;;;;;;;-1:-1:-1;29387:103:0;;;;;:::i;:::-;;:::i;10931:94::-;;;;;;;;;;-1:-1:-1;10984:7:0;11007:12;10931:94;;22940:639;;;;;;:::i;:::-;;:::i;15256:142::-;;;;;;;;;;-1:-1:-1;15256:142:0;;;;;:::i;:::-;;:::i;28680:91::-;;;;;;;;;;-1:-1:-1;28680:91:0;;;;;:::i;:::-;;:::i;28284:97::-;;;;;;;;;;-1:-1:-1;28284:97:0;;;;;:::i;:::-;;:::i;26783:416::-;;;:::i;11210:744::-;;;;;;;;;;-1:-1:-1;11210:744:0;;;;;:::i;:::-;;:::i;27323:95::-;;;;;;;;;;-1:-1:-1;27323:95:0;;;;;:::i;:::-;;:::i;28971:83::-;;;;;;;;;;-1:-1:-1;28971:83:0;;;;;:::i;:::-;;:::i;31090:374::-;;;;;;;;;;-1:-1:-1;31090:374:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27884:96::-;;;;;;;;;;;;;:::i;28185:93::-;;;;;;;;;;-1:-1:-1;28185:93:0;;;;;:::i;:::-;;:::i;15402:157::-;;;;;;;;;;-1:-1:-1;15402:157:0;;;;;:::i;:::-;;:::i;31470:87::-;;;;;;;;;;-1:-1:-1;31470:87:0;;;;;:::i;:::-;;:::i;28777:89::-;;;;;;;;;;-1:-1:-1;28777:89:0;;;;;:::i;:::-;;:::i;27986:193::-;;;;;;;;;;-1:-1:-1;27986:193:0;;;;;:::i;:::-;;:::i;29496:105::-;;;;;;;;;;-1:-1:-1;29496:105:0;;;;;:::i;:::-;;:::i;21230:39::-;;;;;;;;;;;;;;;;11029:177;;;;;;;;;;-1:-1:-1;11029:177:0;;;;;:::i;:::-;;:::i;25483:862::-;;;;;;:::i;:::-;;:::i;21581:30::-;;;;;;;;;;;;;;;;22802:132;;;;;;;;;;-1:-1:-1;22802:132:0;;;;;:::i;:::-;;:::i;21859:27::-;;;;;;;;;;-1:-1:-1;21859:27:0;;;;;:::i;:::-;;:::i;:::-;;;;7251:10:1;7288:15;;;7270:34;;7340:15;;;7335:2;7320:18;;7313:43;7392:15;;;;7372:18;;;7365:43;-1:-1:-1;;;;;7444:32:1;;;7439:2;7424:18;;7417:60;7228:3;7213:19;21859:27:0;7016:467:1;23585:759:0;;;;;;:::i;:::-;;:::i;13395:118::-;;;;;;;;;;-1:-1:-1;13395:118:0;;;;;:::i;:::-;;:::i;24911:226::-;;;;;;;;;;-1:-1:-1;24911:226:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21050:42::-;;;;;;;;;;;;;;;;28484:95;;;;;;;;;;-1:-1:-1;28484:95:0;;;;;:::i;:::-;;:::i;12332:211::-;;;;;;;;;;-1:-1:-1;12332:211:0;;;;;:::i;:::-;;:::i;974:103::-;;;;;;;;;;;;;:::i;21435:26::-;;;;;;;;;;;;;;;;24350:142;;;;;;;;;;-1:-1:-1;24350:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;24450:26:0;24418:6;24450:26;;;:16;:26;;;;;:33;;24350:142;;;;8551:10:1;8539:23;;;8521:42;;8509:2;8494:18;24350:142:0;8377:192:1;25143:334:0;;;;;;;;;;-1:-1:-1;25143:334:0;;;;;:::i;:::-;;:::i;755:87::-;;;;;;;;;;-1:-1:-1;828:6:0;;-1:-1:-1;;;;;828:6:0;755:87;;21399:29;;;;;;;;;;;;;;;;21545;;;;;;;;;;;;;;;;13615:98;;;;;;;;;;;;;:::i;28872:93::-;;;;;;;;;;-1:-1:-1;28872:93:0;;;;;:::i;:::-;;:::i;14790:272::-;;;;;;;;;;-1:-1:-1;14790:272:0;;;;;:::i;:::-;;:::i;30731:353::-;;;;;;;;;;-1:-1:-1;30731:353:0;;;;;:::i;:::-;;:::i;28585:89::-;;;;;;;;;;-1:-1:-1;28585:89:0;;;;;:::i;:::-;;:::i;21276:33::-;;;;;;;;;;;;;;;;26351:426;;;:::i;29060:93::-;;;;;;;;;;-1:-1:-1;29060:93:0;;;;;:::i;:::-;;:::i;21468:32::-;;;;;;;;;;;;;;;;21099:35;;;;;;;;;;;;;;;;21189:34;;;;;;;;;;;;;;;;15563:311;;;;;;;;;;-1:-1:-1;15563:311:0;;;;;:::i;:::-;;:::i;24796:109::-;;;;;;;;;;-1:-1:-1;24881:8:0;:15;24796:109;;27424:268;;;;;;;;;;-1:-1:-1;27424:268:0;;;;;:::i;:::-;;:::i;22164:129::-;;;;;;;;;;-1:-1:-1;22164:129:0;;;;;:::i;:::-;;:::i;21618:42::-;;;;;;;;;;-1:-1:-1;21618:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;21727:26;;;;;;;;;;;;;;;;21017;;;;;;;;;;;;;:::i;19137:43::-;;;;;;;;;;;;;;;;29274:107;;;;;;;;;;-1:-1:-1;29274:107:0;;;;;:::i;:::-;;:::i;21316:36::-;;;;;;;;;;;;;;;;29607:1118;;;;;;;;;;-1:-1:-1;29607:1118:0;;;;;:::i;:::-;;:::i;21141:41::-;;;;;;;;;;;;;;;;15066:186;;;;;;;;;;-1:-1:-1;15066:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;15211:25:0;;;15188:4;15211:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;15066:186;21507:31;;;;;;;;;;;;;;;;1083:201;;;;;;;;;;-1:-1:-1;1083:201:0;;;;;:::i;:::-;;:::i;24498:292::-;;;;;;;;;;-1:-1:-1;24498:292:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11958:370::-;12085:4;-1:-1:-1;;;;;;12115:40:0;;-1:-1:-1;;;12115:40:0;;:99;;-1:-1:-1;;;;;;;12166:48:0;;-1:-1:-1;;;12166:48:0;12115:99;:160;;;-1:-1:-1;;;;;;;12225:50:0;;-1:-1:-1;;;12225:50:0;12115:160;:207;;;-1:-1:-1;;;;;;;;;;9693:40:0;;;12286:36;12101:221;11958:370;-1:-1:-1;;11958:370:0:o;21667:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29159:109::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;;;;;;;;;29237:17:::1;:23:::0;29159:109::o;13517:94::-;13571:13;13600:5;13593:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13517:94;:::o;14584:202::-;14652:7;14676:16;14684:7;15935:4;15965:12;-1:-1:-1;15955:22:0;15878:105;14676:16;14668:74;;;;-1:-1:-1;;;14668:74:0;;12542:2:1;14668:74:0;;;12524:21:1;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;-1:-1:-1;;;12671:18:1;;;12664:43;12724:19;;14668:74:0;12340:409:1;14668:74:0;-1:-1:-1;14756:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;14756:24:0;;14584:202::o;14205:375::-;14274:13;14290:24;14306:7;14290:15;:24::i;:::-;14274:40;;14335:5;-1:-1:-1;;;;;14329:11:0;:2;-1:-1:-1;;;;;14329:11:0;;;14321:58;;;;-1:-1:-1;;;14321:58:0;;12956:2:1;14321:58:0;;;12938:21:1;12995:2;12975:18;;;12968:30;13034:34;13014:18;;;13007:62;-1:-1:-1;;;13085:18:1;;;13078:32;13127:19;;14321:58:0;12754:398:1;14321:58:0;391:10;-1:-1:-1;;;;;14402:21:0;;;;:62;;-1:-1:-1;14427:37:0;14444:5;391:10;15066:186;:::i;14427:37::-;14386:153;;;;-1:-1:-1;;;14386:153:0;;13359:2:1;14386:153:0;;;13341:21:1;13398:2;13378:18;;;13371:30;13437:34;13417:18;;;13410:62;13508:27;13488:18;;;13481:55;13553:19;;14386:153:0;13157:421:1;14386:153:0;14546:28;14555:2;14559:7;14568:5;14546:8;:28::i;:::-;14267:313;14205:375;;:::o;22299:149::-;828:6;;22382:7;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;22401:27:::1;22411:9;22422:5;22401:9;:27::i;:::-;-1:-1:-1::0;22439:1:0::1;22299:149:::0;;;;:::o;29387:103::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;29462:14:::1;:20:::0;29387:103::o;22940:639::-;22132:13;:11;:13::i;:::-;1611:1:::1;1753:7;;:19;;1745:63;;;;-1:-1:-1::0;;;1745:63:0::1;;;;;;;:::i;:::-;1611:1;1819:7;:18:::0;23032:15:::2;::::0;23024:60:::2;;;::::0;-1:-1:-1;;;23024:60:0;;14145:2:1;23024:60:0::2;::::0;::::2;14127:21:1::0;14184:2;14164:18;;;14157:30;14223:31;14203:18;;;14196:59;14272:18;;23024:60:0::2;13943:353:1::0;23024:60:0::2;23119:10;23103:12;23111:3:::0;23103:7:::2;:12::i;:::-;-1:-1:-1::0;;;;;23103:26:0::2;;23095:92;;;::::0;-1:-1:-1;;;23095:92:0;;14503:2:1;23095:92:0::2;::::0;::::2;14485:21:1::0;14542:2;14522:18;;;14515:30;14581:32;14561:18;;;14554:60;14631:18;;23095:92:0::2;14301:354:1::0;23095:92:0::2;23242:9;::::0;23223:10:::2;23206:28;::::0;;;:16:::2;:28;::::0;;;;:35;:45:::2;23198:107;;;::::0;-1:-1:-1;;;23198:107:0;;14862:2:1;23198:107:0::2;::::0;::::2;14844:21:1::0;14901:2;14881:18;;;14874:30;14940:34;14920:18;;;14913:62;-1:-1:-1;;;14991:18:1;;;14984:48;15049:19;;23198:107:0::2;14660:414:1::0;23198:107:0::2;23309:44;23322:10;23342:4;23349:3;23309:12;:44::i;:::-;23374:10;23357:28;::::0;;;:16:::2;:28;::::0;;;;;;:38;;::::2;::::0;::::2;::::0;;;;;;;;::::2;::::0;;;23399:11:::2;:13:::0;;;::::2;::::0;::::2;:::i;:::-;::::0;;;-1:-1:-1;;23430:140:0::2;::::0;;::::2;::::0;::::2;::::0;;::::2;23462:15;23430:140:::0;::::2;::::0;;23501:1:::2;23430:140;::::0;::::2;::::0;;;;;::::2;::::0;;;;;;23554:10:::2;23430:140:::0;;;;;;23416:8:::2;:155:::0;;;;::::2;::::0;;-1:-1:-1;23416:155:0;;;;;;;;;::::2;::::0;;;;;;;;-1:-1:-1;;;;;23416:155:0::2;-1:-1:-1::0;;;23416:155:0::2;::::0;;;::::2;-1:-1:-1::0;;;23416:155:0::2;::::0;;;;-1:-1:-1;;;;;23416:155:0;;::::2;::::0;::::2;-1:-1:-1::0;;23416:155:0;;;;;;::::2;::::0;;;;;;;::::2;::::0;;;;;;;;::::2;::::0;;;1860:7:::1;:22:::0;22940:639::o;15256:142::-;15364:28;15374:4;15380:2;15384:7;15364:9;:28::i;28680:91::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28747:13:::1;:16:::0;28680:91::o;28284:97::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28354:16:::1;:19:::0;28284:97::o;26783:416::-;22132:13;:11;:13::i;:::-;1611:1:::1;1753:7;;:19;;1745:63;;;;-1:-1:-1::0;;;1745:63:0::1;;;;;;;:::i;:::-;1611:1;1819:7;:18:::0;26877:9:::2;::::0;26855:10:::2;::::0;26877:12;26869:49:::2;;;;-1:-1:-1::0;;;26869:49:0::2;;;;;;;:::i;:::-;26930:14;::::0;26922:57:::2;;;::::0;-1:-1:-1;;;26922:57:0;;15906:2:1;26922:57:0::2;::::0;::::2;15888:21:1::0;15945:2;15925:18;;;15918:30;15984:29;15964:18;;;15957:57;16031:18;;26922:57:0::2;15704:351:1::0;26922:57:0::2;26993:33;27004:9;27014:11;;26993:10;:33::i;:::-;27069:13;::::0;27053:10:::2;27045:19;::::0;;;:7:::2;:19;::::0;;;;;26990:36;;-1:-1:-1;27069:13:0;27045:22:::2;::::0;26990:36;;27045:22:::2;:::i;:::-;:37;;27037:92;;;;-1:-1:-1::0;;;27037:92:0::2;;;;;;;:::i;:::-;27148:10;27140:19;::::0;;;:7:::2;:19;::::0;;;;:23;;27161:2;;27140:19;:23:::2;::::0;27161:2;;27140:23:::2;:::i;:::-;::::0;;;-1:-1:-1;27167:24:0::2;::::0;-1:-1:-1;27177:10:0::2;27188:2:::0;27167:9:::2;:24::i;:::-;-1:-1:-1::0;1567:1:0::1;1860:7;:22:::0;26783:416::o;11210:744::-;11319:7;11354:16;11364:5;11354:9;:16::i;:::-;11346:5;:24;11338:71;;;;-1:-1:-1;;;11338:71:0;;16807:2:1;11338:71:0;;;16789:21:1;16846:2;16826:18;;;16819:30;16885:34;16865:18;;;16858:62;-1:-1:-1;;;16936:18:1;;;16929:32;16978:19;;11338:71:0;16605:398:1;11338:71:0;11416:22;11007:12;;;11416:22;;11536:350;11560:14;11556:1;:18;11536:350;;;11590:31;11624:14;;;:11;:14;;;;;;;;;11590:48;;;;;;;;;-1:-1:-1;;;;;11590:48:0;;;;;-1:-1:-1;;;11590:48:0;;;-1:-1:-1;;;;;11590:48:0;;;;;;;;11651:28;11647:89;;11712:14;;;-1:-1:-1;11647:89:0;11769:5;-1:-1:-1;;;;;11748:26:0;:17;-1:-1:-1;;;;;11748:26:0;;11744:135;;;11806:5;11791:11;:20;11787:59;;;-1:-1:-1;11833:1:0;-1:-1:-1;11826:8:0;;-1:-1:-1;;;11826:8:0;11787:59;11856:13;;;;:::i;:::-;;;;11744:135;-1:-1:-1;11576:3:0;;;;:::i;:::-;;;;11536:350;;;-1:-1:-1;11892:56:0;;-1:-1:-1;;;11892:56:0;;17210:2:1;11892:56:0;;;17192:21:1;17249:2;17229:18;;;17222:30;17288:34;17268:18;;;17261:62;-1:-1:-1;;;17339:18:1;;;17332:44;17393:19;;11892:56:0;17008:410:1;27323:95:0;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;27393:17;;::::1;::::0;:12:::1;::::0;:17:::1;::::0;::::1;::::0;::::1;:::i;:::-;;27323:95:::0;:::o;28971:83::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;29034:9:::1;:12:::0;28971:83::o;31090:374::-;31170:19;31202:13;31226:28;31274:5;-1:-1:-1;;;;;31257:23:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;31257:23:0;;;;;;;;;;;;;;;;31226:54;;31296:9;31291:147;31315:5;31311:1;:9;31291:147;;;31346:6;31348:4;31346:1;:6;:::i;:::-;31338:14;;31378;31386:5;31378:7;:14::i;:::-;31360:8;31369:1;31360:11;;;;;;;;:::i;:::-;;;;;;;:17;;:32;-1:-1:-1;;;;;31360:32:0;;;-1:-1:-1;;;;;31360:32:0;;;;;31427:5;31400:8;31409:1;31400:11;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;;;;31322:3;;;;:::i;:::-;;;;31291:147;;;-1:-1:-1;31448:8:0;31090:374;-1:-1:-1;;;;31090:374:0:o;27884:96::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;27931:41:::1;27942:7;828:6:::0;;-1:-1:-1;;;;;828:6:0;;755:87;27942:7:::1;27950:21;27931:10;:41::i;:::-;27884:96::o:0;28185:93::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28253:14:::1;:17:::0;28185:93::o;15402:157::-;15514:39;15531:4;15537:2;15541:7;15514:39;;;;;;;;;;;;:16;:39::i;31470:87::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;31537:6:::1;:12:::0;31470:87::o;28777:89::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28843:12:::1;:15:::0;28777:89::o;27986:193::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28103:6:::1;28078:21;:31;;28069:77;;;::::0;-1:-1:-1;;;28069:77:0;;17757:2:1;28069:77:0::1;::::0;::::1;17739:21:1::0;;;17776:18;;;17769:30;17835:34;17815:18;;;17808:62;17887:18;;28069:77:0::1;17555:356:1::0;28069:77:0::1;28150:21;28161:2;28164:6;28150:10;:21::i;29496:105::-:0;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;29572:15:::1;:21:::0;29496:105::o;11029:177::-;11096:7;11007:12;;11120:5;:21;11112:69;;;;-1:-1:-1;;;11112:69:0;;18118:2:1;11112:69:0;;;18100:21:1;18157:2;18137:18;;;18130:30;18196:34;18176:18;;;18169:62;-1:-1:-1;;;18247:18:1;;;18240:33;18290:19;;11112:69:0;17916:399:1;11112:69:0;-1:-1:-1;11195:5:0;11029:177::o;25483:862::-;22132:13;:11;:13::i;:::-;1611:1:::1;1753:7;;:19;;1745:63;;;;-1:-1:-1::0;;;1745:63:0::1;;;;;;;:::i;:::-;1611:1;1819:7;:18:::0;25617:9:::2;::::0;25580:10:::2;::::0;;;25617:12;25609:49:::2;;;;-1:-1:-1::0;;;25609:49:0::2;;;;;;;:::i;:::-;25670:17;::::0;25662:63:::2;;;::::0;-1:-1:-1;;;25662:63:0;;18522:2:1;25662:63:0::2;::::0;::::2;18504:21:1::0;18561:2;18541:18;;;18534:30;18600:32;18580:18;;;18573:60;18650:18;;25662:63:0::2;18320:354:1::0;25662:63:0::2;25745:28;::::0;-1:-1:-1;;25762:10:0::2;18828:2:1::0;18824:15;18820:53;25745:28:0::2;::::0;::::2;18808:66:1::0;18890:12;;25745:28:0::2;;;;;;;;;;;;25735:39;;;;;;25729:45;;25787:9;25782:268;25806:5;:12;25802:1;:16;25782:268;;;25836:11;25850:5;25856:1;25850:8;;;;;;;;:::i;:::-;;;;;;;25836:22;;25881:3;25874;:10;25870:172;;25921:26;::::0;;::::2;::::0;::::2;19070:19:1::0;;;19105:12;;;19098:28;;;19142:12;;25921:26:0::2;;;;;;;;;;;;25911:37;;;;;;25905:43;;25870:172;;;26002:26;::::0;;::::2;::::0;::::2;19070:19:1::0;;;19105:12;;;19098:28;;;19142:12;;26002:26:0::2;;;;;;;;;;;;25992:37;;;;;;25986:43;;25870:172;-1:-1:-1::0;25820:3:0;::::2;::::0;::::2;:::i;:::-;;;;25782:268;;;;26067:6;;26062:3;:11;26053:66;;;::::0;-1:-1:-1;;;26053:66:0;;19367:2:1;26053:66:0::2;::::0;::::2;19349:21:1::0;19406:2;19386:18;;;19379:30;19445:34;19425:18;;;19418:62;-1:-1:-1;;;19496:18:1;;;19489:38;19544:19;;26053:66:0::2;19165:404:1::0;26053:66:0::2;26133:36;26144:9;26154:14;;26133:10;:36::i;:::-;26212:16;::::0;26196:10:::2;26188:19;::::0;;;:7:::2;:19;::::0;;;;;26130:39;;-1:-1:-1;26212:16:0;26188:22:::2;::::0;26130:39;;26188:22:::2;:::i;:::-;:40;;26180:95;;;;-1:-1:-1::0;;;26180:95:0::2;;;;;;;:::i;:::-;26294:10;26286:19;::::0;;;:7:::2;:19;::::0;;;;:23;;26307:2;;26286:19;:23:::2;::::0;26307:2;;26286:23:::2;:::i;:::-;::::0;;;-1:-1:-1;26313:24:0::2;::::0;-1:-1:-1;26323:10:0::2;26334:2:::0;26313:9:::2;:24::i;:::-;-1:-1:-1::0;;1567:1:0::1;1860:7;:22:::0;-1:-1:-1;25483:862:0:o;22802:132::-;22879:4;22918:8;-1:-1:-1;;;;;22902:24:0;:12;22910:3;22902:7;:12::i;:::-;-1:-1:-1;;;;;22902:24:0;;;22802:132;-1:-1:-1;;;22802:132:0:o;21859:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21859:27:0;;;;;;-1:-1:-1;;;21859:27:0;;;;;;-1:-1:-1;;;21859:27:0;;-1:-1:-1;;;;;21859:27:0;;:::o;23585:759::-;22132:13;:11;:13::i;:::-;1611:1:::1;1753:7;;:19;;1745:63;;;;-1:-1:-1::0;;;1745:63:0::1;;;;;;;:::i;:::-;1611:1;1819:7;:18:::0;23718:10:::2;23665;23701:28:::0;;;:16:::2;:28;::::0;;;;:35;23676:5:::2;::::0;23745:9;;23740:173:::2;;23776:9;23771:138;23795:5;23791:1;:9;23771:138;;;23841:10;23824:28;::::0;;;:16:::2;:28;::::0;;;;:31;;23859:3;;23824:28;23853:1;;23824:31;::::2;;;;;:::i;:::-;;;;;;;;;:38;23819:82;;;23880:1;23877:4;;23890:5;;23819:82;23802:3:::0;::::2;::::0;::::2;:::i;:::-;;;;23771:138;;;;23740:173;23932:2;23938:5;23932:11;;23923:63;;;::::0;-1:-1:-1;;;23923:63:0;;19776:2:1;23923:63:0::2;::::0;::::2;19758:21:1::0;19815:2;19795:18;;;19788:30;19854:34;19834:18;;;19827:62;-1:-1:-1;;;19905:18:1;;;19898:35;19950:19;;23923:63:0::2;19574:401:1::0;23923:63:0::2;23990:49;24006:4;24021:10;24034:3;23990:7;:49::i;:::-;24102:10;24085:28;::::0;;;:16:::2;:28;::::0;;;;24114:7:::2;24120:1;24114:5:::0;:7:::2;:::i;:::-;24085:37;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;;::::2;::::0;24067:10:::2;24050:28:::0;;:16:::2;:28:::0;;;;;;;:32;;24079:2;;24050:32;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;;::::2;:72:::0;;;;24143:10:::2;24126:28:::0;;:16:::2;:28:::0;;;;;;:34;;;::::2;;;;:::i;:::-;;;;;;;;;;;;;;;;;;24164:11;;:13;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24195:140:0::2;::::0;;::::2;::::0;::::2;::::0;;::::2;24227:15;24195:140:::0;::::2;::::0;;24266:1:::2;24195:140;::::0;::::2;::::0;;;;;::::2;::::0;;;;;;24319:10:::2;24195:140:::0;;;;;;24181:8:::2;:155:::0;;::::2;::::0;;::::2;::::0;;-1:-1:-1;24181:155:0;;;;;;;;;::::2;::::0;;;;;;;;-1:-1:-1;;;;;24181:155:0::2;-1:-1:-1::0;;;24181:155:0::2;::::0;;;::::2;-1:-1:-1::0;;;24181:155:0::2;::::0;;;;-1:-1:-1;;;;;24181:155:0;;::::2;::::0;::::2;-1:-1:-1::0;;24181:155:0;;;;;;::::2;::::0;;;;;;;::::2;::::0;;;;;;;;::::2;::::0;;-1:-1:-1;;1860:7:0::1;:22:::0;23585:759::o;13395:118::-;13459:7;13482:20;13494:7;13482:11;:20::i;:::-;:25;;13395:118;-1:-1:-1;;13395:118:0:o;24911:226::-;24984:16;25036:1;25020:13;10984:7;11007:12;;10931:94;25020:13;:17;25012:26;;;;;;-1:-1:-1;;;;;25050:28:0;;25088:1;25050:28;;;:16;:28;;;;;:35;25042:48;;;;;;-1:-1:-1;;;;;25101:28:0;;;;;;:16;:28;;;;;;;;;25094:35;;;;;;;;;;;;;;;;;25101:28;;25094:35;;25101:28;25094:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24911:226;;;:::o;28484:95::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28553:15:::1;:18:::0;28484:95::o;12332:211::-;12396:7;-1:-1:-1;;;;;12420:19:0;;12412:75;;;;-1:-1:-1;;;12412:75:0;;20585:2:1;12412:75:0;;;20567:21:1;20624:2;20604:18;;;20597:30;20663:34;20643:18;;;20636:62;-1:-1:-1;;;20714:18:1;;;20707:41;20765:19;;12412:75:0;20383:407:1;12412:75:0;-1:-1:-1;;;;;;12509:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;12509:27:0;;12332:211::o;974:103::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;1039:30:::1;1066:1;1039:18;:30::i;25143:334::-:0;-1:-1:-1;;;;;25253:26:0;;25221:4;25253:26;;;:16;:26;;;;;:33;25295:9;;25290:164;;25326:9;25321:129;25345:5;25341:1;:9;25321:129;;;-1:-1:-1;;;;;25374:26:0;;;;;;:16;:26;;;;;:29;;25407:3;;25374:26;25401:1;;25374:29;;;;;;:::i;:::-;;;;;;;;;:36;25369:73;;;25432:4;25425:11;;;;;;25369:73;25352:3;;;;:::i;:::-;;;;25321:129;;;;25290:164;-1:-1:-1;25464:5:0;;25143:334;-1:-1:-1;;;25143:334:0:o;13615:98::-;13671:13;13700:7;13693:14;;;;;:::i;28872:93::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28940:14:::1;:17:::0;28872:93::o;14790:272::-;-1:-1:-1;;;;;14881:24:0;;391:10;14881:24;;14873:63;;;;-1:-1:-1;;;14873:63:0;;20997:2:1;14873:63:0;;;20979:21:1;21036:2;21016:18;;;21009:30;21075:28;21055:18;;;21048:56;21121:18;;14873:63:0;20795:350:1;14873:63:0;391:10;14943:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;14943:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;14943:53:0;;;;;;;;;;15008:48;;540:41:1;;;14943:42:0;;391:10;15008:48;;513:18:1;15008:48:0;;;;;;;14790:272;;:::o;30731:353::-;30821:13;30853:28;30895:5;-1:-1:-1;;;;;30884:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30884:17:0;;30853:48;;30912:6;30929:114;30940:5;30938:1;:7;30929:114;;;30988:43;31016:6;31024;31026:4;31024:1;:6;:::i;30988:43::-;30968:14;30983:1;30968:17;;;;;;;;:::i;:::-;;;;;;;;;;:63;30946:3;;;;:::i;:::-;;;;30929:114;;28585:89;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;28650:13:::1;:16:::0;28585:89::o;26351:426::-;22132:13;:11;:13::i;:::-;1611:1:::1;1753:7;;:19;;1745:63;;;;-1:-1:-1::0;;;1745:63:0::1;;;;;;;:::i;:::-;1611:1;1819:7;:18:::0;26447:9:::2;::::0;26425:10:::2;::::0;26447:12;26439:49:::2;;;;-1:-1:-1::0;;;26439:49:0::2;;;;;;;:::i;:::-;26500:16;::::0;26492:61:::2;;;::::0;-1:-1:-1;;;26492:61:0;;21352:2:1;26492:61:0::2;::::0;::::2;21334:21:1::0;21391:2;21371:18;;;21364:30;21430:31;21410:18;;;21403:59;21479:18;;26492:61:0::2;21150:353:1::0;26492:61:0::2;26567:35;26578:9;26588:13;;26567:10;:35::i;:::-;26645:15;::::0;26629:10:::2;26621:19;::::0;;;:7:::2;:19;::::0;;;;;26564:38;;-1:-1:-1;26645:15:0;26621:22:::2;::::0;26564:38;;26621:22:::2;:::i;29060:93::-:0;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;29130:9:::1;:15:::0;29060:93::o;15563:311::-;15700:28;15710:4;15716:2;15720:7;15700:9;:28::i;:::-;15751:48;15774:4;15780:2;15784:7;15793:5;15751:22;:48::i;:::-;15735:133;;;;-1:-1:-1;;;15735:133:0;;;;;;;:::i;:::-;15563:311;;;;:::o;27424:268::-;27497:13;27521:28;27552:10;:8;:10::i;:::-;27521:41;;27604:1;27579:14;27573:28;:32;:111;;;;;;;;;;;;;;;;;27632:14;27648:25;27665:7;27648:16;:25::i;:::-;27615:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27573:111;27566:118;27424:268;-1:-1:-1;;;27424:268:0:o;22164:129::-;828:6;;22231:7;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;22250:23:::1;22260:9;22271:1;22250:9;:23::i;:::-;-1:-1:-1::0;22284:1:0::1;22164:129:::0;;;:::o;21017:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29274:107::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;29351:16:::1;:22:::0;29274:107::o;29607:1118::-;29675:13;29700:16;29759:27;29776:9;;29759:16;:27::i;:::-;29804:35;29821:17;;29804:16;:35::i;:::-;29857:34;29874:16;;29857;:34::i;:::-;29907:32;29924:14;;29907:16;:32::i;:::-;29956:33;29973:15;;29956:16;:33::i;:::-;30013:32;30030:14;;30013:16;:32::i;:::-;30071:34;30088:16;;30071;:34::i;:::-;30125:29;30142:11;;30125:16;:29::i;:::-;29726:432;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29700:459;;30163:16;30227:31;30244:13;;30227:16;:31::i;:::-;30283:33;30300:15;;30283:16;:33::i;:::-;30336:29;30353:11;;30336:16;:29::i;:::-;30388:31;30405:13;;30388:16;:31::i;:::-;30440;30457:13;10984:7;11007:12;;10931:94;30457:13;30440:16;:31::i;:::-;30494:30;30511:12;;30494:16;:30::i;:::-;30549:32;30566:14;;30549:16;:32::i;:::-;-1:-1:-1;;;;;30614:15:0;;;;;;:7;:15;;;;;;30597:33;;:16;:33::i;:::-;30189:446;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30163:473;;30640:23;30690:2;30693;30673:23;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;30673:23:0;;;;;;;;;;29607:1118;-1:-1:-1;;;;;29607:1118:0:o;1083:201::-;828:6;;-1:-1:-1;;;;;828:6:0;391:10;888:23;880:68;;;;-1:-1:-1;;;880:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1172:22:0;::::1;1164:73;;;::::0;-1:-1:-1;;;1164:73:0;;28805:2:1;1164:73:0::1;::::0;::::1;28787:21:1::0;28844:2;28824:18;;;28817:30;28883:34;28863:18;;;28856:62;-1:-1:-1;;;28934:18:1;;;28927:36;28980:19;;1164:73:0::1;28603:402:1::0;1164:73:0::1;1248:28;1267:8;1248:18;:28::i;:::-;1083:201:::0;:::o;24498:292::-;24577:18;24615:29;24663:5;-1:-1:-1;;;;;24647:22:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24647:22:0;;-1:-1:-1;;24647:22:0;;;;;;;;;;;;24615:54;;24685:9;24680:82;24704:5;24700:1;:9;24680:82;;;24741:8;24750:6;24752:4;24750:1;:6;:::i;:::-;24741:16;;;;;;;;:::i;:::-;;;;;;;;;;24727:30;;;;;;;;24741:16;;;;24727:30;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24727:30:0;;;;;;;;;-1:-1:-1;;;24727:30:0;;;-1:-1:-1;;;;;24727:30:0;;;;;:13;;;;24738:1;;24727:13;;;;;;:::i;:::-;;;;;;:30;;;;24711:3;;;;;:::i;:::-;;;;24680:82;;;-1:-1:-1;24772:10:0;24498:292;-1:-1:-1;;;24498:292:0:o;18961:172::-;19058:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;19058:29:0;-1:-1:-1;;;;;19058:29:0;;;;;;;;;19099:28;;19058:24;;19099:28;;;;;;;18961:172;;;:::o;15987:98::-;16052:27;16062:2;16066:8;16052:27;;;;;;;;;;;;:9;:27::i;22009:87::-;22064:10;22078:9;22064:23;22056:32;;;;;17711:1246;17808:35;17846:20;17858:7;17846:11;:20::i;:::-;17915:18;;17808:58;;-1:-1:-1;17873:22:0;;-1:-1:-1;;;;;17899:34:0;391:10;-1:-1:-1;;;;;17899:34:0;;:81;;;-1:-1:-1;391:10:0;17944:20;17956:7;17944:11;:20::i;:::-;-1:-1:-1;;;;;17944:36:0;;17899:81;:142;;;-1:-1:-1;18008:18:0;;17991:50;;391:10;15066:186;:::i;17991:50::-;17873:169;;18065:17;18049:101;;;;-1:-1:-1;;;18049:101:0;;29212:2:1;18049:101:0;;;29194:21:1;29251:2;29231:18;;;29224:30;29290:34;29270:18;;;29263:62;-1:-1:-1;;;29341:18:1;;;29334:48;29399:19;;18049:101:0;29010:414:1;18049:101:0;18195:4;-1:-1:-1;;;;;18173:26:0;:13;:18;;;-1:-1:-1;;;;;18173:26:0;;18157:98;;;;-1:-1:-1;;;18157:98:0;;29631:2:1;18157:98:0;;;29613:21:1;29670:2;29650:18;;;29643:30;29709:34;29689:18;;;29682:62;-1:-1:-1;;;29760:18:1;;;29753:36;29806:19;;18157:98:0;29429:402:1;18157:98:0;-1:-1:-1;;;;;18270:16:0;;18262:66;;;;-1:-1:-1;;;18262:66:0;;30038:2:1;18262:66:0;;;30020:21:1;30077:2;30057:18;;;30050:30;30116:34;30096:18;;;30089:62;-1:-1:-1;;;30167:18:1;;;30160:35;30212:19;;18262:66:0;29836:401:1;18262:66:0;18385:49;18402:1;18406:7;18415:13;:18;;;18385:8;:49::i;:::-;-1:-1:-1;;;;;18441:18:0;;;;;;:12;:18;;;;;:31;;18471:1;;18441:18;:31;;18471:1;;-1:-1:-1;;;;;18441:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;18441:31:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18479:16:0;;-1:-1:-1;18479:16:0;;;:12;:16;;;;;:29;;-1:-1:-1;;;18479:16:0;;:29;;-1:-1:-1;;18479:29:0;;:::i;:::-;;;-1:-1:-1;;;;;18479:29:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18538:43:0;;;;;;;;-1:-1:-1;;;;;18538:43:0;;;;;-1:-1:-1;;;;;18564:15:0;18538:43;;;;;;;;;-1:-1:-1;18515:20:0;;;:11;:20;;;;;;:66;;;;;;;;;-1:-1:-1;;;18515:66:0;-1:-1:-1;;;;;;18515:66:0;;;;;;;;;;;18610:11;18527:7;-1:-1:-1;18610:11:0;:::i;:::-;18673:1;18632:24;;;:11;:24;;;;;:29;18588:33;;-1:-1:-1;;;;;;18632:29:0;18628:236;;18690:20;18698:11;15935:4;15965:12;-1:-1:-1;15955:22:0;15878:105;18690:20;18686:171;;;18750:97;;;;;;;;18777:18;;-1:-1:-1;;;;;18750:97:0;;;;;;18808:28;;;;-1:-1:-1;;;;;18750:97:0;;;;;;;;;-1:-1:-1;18723:24:0;;;:11;:24;;;;;;;:124;;;;;;;;;-1:-1:-1;;;18723:124:0;-1:-1:-1;;;;;;18723:124:0;;;;;;;;;;;;18686:171;18894:7;18890:2;-1:-1:-1;;;;;18875:27:0;18884:4;-1:-1:-1;;;;;18875:27:0;;;;;;;;;;;18909:42;17801:1156;;;17711:1246;;;:::o;22454:342::-;22525:7;;22561:9;22564:6;22561:2;:9;:::i;:::-;22551:19;-1:-1:-1;22589:4:0;;22581:34;;;;-1:-1:-1;;;22581:34:0;;31202:2:1;22581:34:0;;;31184:21:1;31241:2;31221:18;;;31214:30;-1:-1:-1;;;31260:18:1;;;31253:48;31318:18;;22581:34:0;31000:342:1;22581:34:0;22626:9;22636;22639:6;22636:2;:9;:::i;:::-;22626:19;;22666:1;22664;:3;22656:29;;;;-1:-1:-1;;;22656:29:0;;31674:2:1;22656:29:0;;;31656:21:1;31713:2;31693:18;;;31686:30;-1:-1:-1;;;31732:18:1;;;31725:44;31786:18;;22656:29:0;31472:338:1;22656:29:0;22742:12;;22725:14;;:29;;;;:::i;:::-;22720:1;22704:13;10984:7;11007:12;;10931:94;22704:13;:17;;;;:::i;:::-;:50;;22696:73;;;;-1:-1:-1;;;22696:73:0;;32017:2:1;22696:73:0;;;31999:21:1;32056:1;32036:18;;;32029:29;-1:-1:-1;;;32074:18:1;;;32067:39;32123:18;;22696:73:0;31815:332:1;22696:73:0;22787:1;22454:342;-1:-1:-1;;;;22454:342:0:o;27698:180::-;27779:12;27797:8;-1:-1:-1;;;;;27797:13:0;27818:7;27797:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27778:52;;;27842:7;27834:36;;;;-1:-1:-1;;;27834:36:0;;32564:2:1;27834:36:0;;;32546:21:1;32603:2;32583:18;;;32576:30;-1:-1:-1;;;32622:18:1;;;32615:46;32678:18;;27834:36:0;32362:340:1;17234:473:0;-1:-1:-1;;;;;17405:16:0;;17372:30;17405:16;;;:12;:16;;;;;;;;;17372:49;;;;;;;;;-1:-1:-1;;;;;17372:49:0;;;;;-1:-1:-1;;;17372:49:0;;;;;;;;;;;17447:105;;;;;;;;17467:19;;17372:49;;17447:105;;;17467:32;;17372:49;;17467:32;:::i;:::-;-1:-1:-1;;;;;17447:105:0;;;;;17543:1;17508:11;:24;;;:37;;;;:::i;:::-;-1:-1:-1;;;;;17447:105:0;;;;;;-1:-1:-1;;;;;17428:16:0;;;;;;;:12;:16;;;;;;;;:124;;;;;;;;-1:-1:-1;;;17428:124:0;;;;;;;;;;;;17578:43;;;;;;;;;;-1:-1:-1;;;;;17604:15:0;17578:43;;;;;;;;17559:16;;;:11;:16;;;;;;:62;;;;;;;;;-1:-1:-1;;;17559:62:0;-1:-1:-1;;;;;;17559:62:0;;;;;;;;;;;;;;17633:23;;17571:3;;17428:16;17633:23;;;;;;;17663:38;15563:311;12791:600;-1:-1:-1;;;;;;;;;;;;;;;;;12908:16:0;12916:7;15935:4;15965:12;-1:-1:-1;15955:22:0;15878:105;12908:16;12900:71;;;;-1:-1:-1;;;12900:71:0;;32909:2:1;12900:71:0;;;32891:21:1;32948:2;32928:18;;;32921:30;32987:34;32967:18;;;32960:62;-1:-1:-1;;;33038:18:1;;;33031:40;33088:19;;12900:71:0;32707:406:1;12900:71:0;12978:26;13026:12;13015:7;:23;13011:93;;13070:22;13080:12;13070:7;:22;:::i;:::-;:26;;13095:1;13070:26;:::i;:::-;13049:47;;13011:93;13130:7;13110:212;13147:18;13139:4;:26;13110:212;;13184:31;13218:17;;;:11;:17;;;;;;;;;13184:51;;;;;;;;;-1:-1:-1;;;;;13184:51:0;;;;;-1:-1:-1;;;13184:51:0;;;-1:-1:-1;;;;;13184:51:0;;;;;;;;13248:28;13244:71;;13296:9;12791:600;-1:-1:-1;;;;12791:600:0:o;13244:71::-;-1:-1:-1;13167:6:0;;;;:::i;:::-;;;;13110:212;;;-1:-1:-1;13328:57:0;;-1:-1:-1;;;13328:57:0;;33320:2:1;13328:57:0;;;33302:21:1;33359:2;33339:18;;;33332:30;33398:34;33378:18;;;33371:62;-1:-1:-1;;;33449:18:1;;;33442:45;33504:19;;13328:57:0;33118:411:1;1290:191:0;1383:6;;;-1:-1:-1;;;;;1400:17:0;;;-1:-1:-1;;;;;;1400:17:0;;;;;;;1433:40;;1383:6;;;1400:17;1383:6;;1433:40;;1364:16;;1433:40;1353:128;1290:191;:::o;19934:690::-;20071:4;-1:-1:-1;;;;;20088:13:0;;4761:20;4809:8;20084:535;;20127:72;;-1:-1:-1;;;20127:72:0;;-1:-1:-1;;;;;20127:36:0;;;;;:72;;391:10;;20178:4;;20184:7;;20193:5;;20127:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20127:72:0;;;;;;;;-1:-1:-1;;20127:72:0;;;;;;;;;;;;:::i;:::-;;;20114:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20358:13:0;;20354:215;;20391:61;;-1:-1:-1;;;20391:61:0;;;;;;;:::i;20354:215::-;20537:6;20531:13;20522:6;20518:2;20514:15;20507:38;20114:464;-1:-1:-1;;;;;;20249:55:0;-1:-1:-1;;;20249:55:0;;-1:-1:-1;20242:62:0;;20084:535;-1:-1:-1;20607:4:0;19934:690;;;;;;:::o;27205:112::-;27265:13;27297:12;27290:19;;;;;:::i;8201:532::-;8257:13;8287:10;8283:53;;-1:-1:-1;;8314:10:0;;;;;;;;;;;;-1:-1:-1;;;8314:10:0;;;;;8201:532::o;8283:53::-;8361:5;8346:12;8402:78;8409:9;;8402:78;;8435:8;;;;:::i;:::-;;-1:-1:-1;8458:10:0;;-1:-1:-1;8466:2:0;8458:10;;:::i;:::-;;;8402:78;;;8490:19;8522:6;-1:-1:-1;;;;;8512:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8512:17:0;;8490:39;;8540:154;8547:10;;8540:154;;8574:11;8584:1;8574:11;;:::i;:::-;;-1:-1:-1;8643:10:0;8651:2;8643:5;:10;:::i;:::-;8630:24;;:2;:24;:::i;:::-;8617:39;;8600:6;8607;8600:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;8600:56:0;;;;;;;;-1:-1:-1;8671:11:0;8680:2;8671:11;;:::i;:::-;;;8540:154;;16089:1141;16194:20;16217:12;-1:-1:-1;;;;;16244:16:0;;16236:62;;;;-1:-1:-1;;;16236:62:0;;34495:2:1;16236:62:0;;;34477:21:1;34534:2;34514:18;;;34507:30;34573:34;34553:18;;;34546:62;-1:-1:-1;;;34624:18:1;;;34617:31;34665:19;;16236:62:0;34293:397:1;16236:62:0;16314:21;16322:12;15935:4;15965:12;-1:-1:-1;15955:22:0;15878:105;16314:21;16313:22;16305:64;;;;-1:-1:-1;;;16305:64:0;;34897:2:1;16305:64:0;;;34879:21:1;34936:2;34916:18;;;34909:30;34975:31;34955:18;;;34948:59;35024:18;;16305:64:0;34695:353:1;16305:64:0;16396:12;16384:8;:24;;16376:71;;;;-1:-1:-1;;;16376:71:0;;35255:2:1;16376:71:0;;;35237:21:1;35294:2;35274:18;;;35267:30;35333:34;35313:18;;;35306:62;-1:-1:-1;;;35384:18:1;;;35377:32;35426:19;;16376:71:0;35053:398:1;16376:71:0;-1:-1:-1;;;;;16555:16:0;;16522:30;16555:16;;;:12;:16;;;;;;;;;16522:49;;;;;;;;;-1:-1:-1;;;;;16522:49:0;;;;;-1:-1:-1;;;16522:49:0;;;;;;;;;;;16597:119;;;;;;;;16617:19;;16522:49;;16597:119;;;16617:39;;16647:8;;16617:39;:::i;:::-;-1:-1:-1;;;;;16597:119:0;;;;;16700:8;16665:11;:24;;;:44;;;;:::i;:::-;-1:-1:-1;;;;;16597:119:0;;;;;;-1:-1:-1;;;;;16578:16:0;;;;;;;:12;:16;;;;;;;;:138;;;;;;;;-1:-1:-1;;;16578:138:0;;;;;;;;;;;;16751:43;;;;;;;;;;-1:-1:-1;;;;;16777:15:0;16751:43;;;;;;;;16723:25;;;:11;:25;;;;;;:71;;;;;;;;;-1:-1:-1;;;16723:71:0;-1:-1:-1;;;;;;16723:71:0;;;;;;;;;;;;;;;;;;16735:12;;16843:281;16867:8;16863:1;:12;16843:281;;;16896:38;;16921:12;;-1:-1:-1;;;;;16896:38:0;;;16913:1;;16896:38;;16913:1;;16896:38;16961:59;16992:1;16996:2;17000:12;17014:5;16961:22;:59::i;:::-;16943:150;;;;-1:-1:-1;;;16943:150:0;;;;;;;:::i;:::-;17102:14;;;;:::i;:::-;;;;16877:3;;;;;:::i;:::-;;;;16843:281;;;-1:-1:-1;17130:12:0;:27;;;17164:60;15563:311;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:131::-;-1:-1:-1;;;;;667:31:1;;657:42;;647:70;;713:1;710;703:12;728:315;796:6;804;857:2;845:9;836:7;832:23;828:32;825:52;;;873:1;870;863:12;825:52;912:9;899:23;931:31;956:5;931:31;:::i;:::-;981:5;1033:2;1018:18;;;;1005:32;;-1:-1:-1;;;728:315:1:o;1230:180::-;1289:6;1342:2;1330:9;1321:7;1317:23;1313:32;1310:52;;;1358:1;1355;1348:12;1310:52;-1:-1:-1;1381:23:1;;1230:180;-1:-1:-1;1230:180:1:o;1415:258::-;1487:1;1497:113;1511:6;1508:1;1505:13;1497:113;;;1587:11;;;1581:18;1568:11;;;1561:39;1533:2;1526:10;1497:113;;;1628:6;1625:1;1622:13;1619:48;;;-1:-1:-1;;1663:1:1;1645:16;;1638:27;1415:258::o;1678:269::-;1731:3;1769:5;1763:12;1796:6;1791:3;1784:19;1812:63;1868:6;1861:4;1856:3;1852:14;1845:4;1838:5;1834:16;1812:63;:::i;:::-;1929:2;1908:15;-1:-1:-1;;1904:29:1;1895:39;;;;1936:4;1891:50;;1678:269;-1:-1:-1;;1678:269:1:o;1952:231::-;2101:2;2090:9;2083:21;2064:4;2121:56;2173:2;2162:9;2158:18;2150:6;2121:56;:::i;2396:456::-;2473:6;2481;2489;2542:2;2530:9;2521:7;2517:23;2513:32;2510:52;;;2558:1;2555;2548:12;2510:52;2597:9;2584:23;2616:31;2641:5;2616:31;:::i;:::-;2666:5;-1:-1:-1;2723:2:1;2708:18;;2695:32;2736:33;2695:32;2736:33;:::i;:::-;2396:456;;2788:7;;-1:-1:-1;;;2842:2:1;2827:18;;;;2814:32;;2396:456::o;2857:127::-;2918:10;2913:3;2909:20;2906:1;2899:31;2949:4;2946:1;2939:15;2973:4;2970:1;2963:15;2989:275;3060:2;3054:9;3125:2;3106:13;;-1:-1:-1;;3102:27:1;3090:40;;-1:-1:-1;;;;;3145:34:1;;3181:22;;;3142:62;3139:88;;;3207:18;;:::i;:::-;3243:2;3236:22;2989:275;;-1:-1:-1;2989:275:1:o;3269:407::-;3334:5;-1:-1:-1;;;;;3360:6:1;3357:30;3354:56;;;3390:18;;:::i;:::-;3428:57;3473:2;3452:15;;-1:-1:-1;;3448:29:1;3479:4;3444:40;3428:57;:::i;:::-;3419:66;;3508:6;3501:5;3494:21;3548:3;3539:6;3534:3;3530:16;3527:25;3524:45;;;3565:1;3562;3555:12;3524:45;3614:6;3609:3;3602:4;3595:5;3591:16;3578:43;3668:1;3661:4;3652:6;3645:5;3641:18;3637:29;3630:40;3269:407;;;;;:::o;3681:451::-;3750:6;3803:2;3791:9;3782:7;3778:23;3774:32;3771:52;;;3819:1;3816;3809:12;3771:52;3859:9;3846:23;-1:-1:-1;;;;;3884:6:1;3881:30;3878:50;;;3924:1;3921;3914:12;3878:50;3947:22;;4000:4;3992:13;;3988:27;-1:-1:-1;3978:55:1;;4029:1;4026;4019:12;3978:55;4052:74;4118:7;4113:2;4100:16;4095:2;4091;4087:11;4052:74;:::i;4137:248::-;4205:6;4213;4266:2;4254:9;4245:7;4241:23;4237:32;4234:52;;;4282:1;4279;4272:12;4234:52;-1:-1:-1;;4305:23:1;;;4375:2;4360:18;;;4347:32;;-1:-1:-1;4137:248:1:o;4390:837::-;4617:2;4669:21;;;4739:13;;4642:18;;;4761:22;;;4588:4;;4617:2;4802;;4820:18;;;;4861:15;;;4588:4;4904:297;4918:6;4915:1;4912:13;4904:297;;;4977:13;;5019:9;;5030:10;5015:26;5003:39;;5086:11;;5080:18;-1:-1:-1;;;;;5076:44:1;5062:12;;;5055:66;5141:12;;;;5176:15;;;;5117:1;4933:9;4904:297;;;-1:-1:-1;5218:3:1;;4390:837;-1:-1:-1;;;;;;;4390:837:1:o;5745:946::-;5829:6;5860:2;5903;5891:9;5882:7;5878:23;5874:32;5871:52;;;5919:1;5916;5909:12;5871:52;5959:9;5946:23;-1:-1:-1;;;;;6029:2:1;6021:6;6018:14;6015:34;;;6045:1;6042;6035:12;6015:34;6083:6;6072:9;6068:22;6058:32;;6128:7;6121:4;6117:2;6113:13;6109:27;6099:55;;6150:1;6147;6140:12;6099:55;6186:2;6173:16;6208:2;6204;6201:10;6198:36;;;6214:18;;:::i;:::-;6260:2;6257:1;6253:10;6243:20;;6283:28;6307:2;6303;6299:11;6283:28;:::i;:::-;6345:15;;;6415:11;;;6411:20;;;6376:12;;;;6443:19;;;6440:39;;;6475:1;6472;6465:12;6440:39;6499:11;;;;6519:142;6535:6;6530:3;6527:15;6519:142;;;6601:17;;6589:30;;6552:12;;;;6639;;;;6519:142;;;6680:5;5745:946;-1:-1:-1;;;;;;;;5745:946:1:o;6696:315::-;6764:6;6772;6825:2;6813:9;6804:7;6800:23;6796:32;6793:52;;;6841:1;6838;6831:12;6793:52;6877:9;6864:23;6854:33;;6937:2;6926:9;6922:18;6909:32;6950:31;6975:5;6950:31;:::i;:::-;7000:5;6990:15;;;6696:315;;;;;:::o;7488:247::-;7547:6;7600:2;7588:9;7579:7;7575:23;7571:32;7568:52;;;7616:1;7613;7606:12;7568:52;7655:9;7642:23;7674:31;7699:5;7674:31;:::i;7740:632::-;7911:2;7963:21;;;8033:13;;7936:18;;;8055:22;;;7882:4;;7911:2;8134:15;;;;8108:2;8093:18;;;7882:4;8177:169;8191:6;8188:1;8185:13;8177:169;;;8252:13;;8240:26;;8321:15;;;;8286:12;;;;8213:1;8206:9;8177:169;;;-1:-1:-1;8363:3:1;;7740:632;-1:-1:-1;;;;;;7740:632:1:o;8574:416::-;8639:6;8647;8700:2;8688:9;8679:7;8675:23;8671:32;8668:52;;;8716:1;8713;8706:12;8668:52;8755:9;8742:23;8774:31;8799:5;8774:31;:::i;:::-;8824:5;-1:-1:-1;8881:2:1;8866:18;;8853:32;8923:15;;8916:23;8904:36;;8894:64;;8954:1;8951;8944:12;8995:383;9072:6;9080;9088;9141:2;9129:9;9120:7;9116:23;9112:32;9109:52;;;9157:1;9154;9147:12;9109:52;9196:9;9183:23;9215:31;9240:5;9215:31;:::i;:::-;9265:5;9317:2;9302:18;;9289:32;;-1:-1:-1;9368:2:1;9353:18;;;9340:32;;8995:383;-1:-1:-1;;;8995:383:1:o;9383:795::-;9478:6;9486;9494;9502;9555:3;9543:9;9534:7;9530:23;9526:33;9523:53;;;9572:1;9569;9562:12;9523:53;9611:9;9598:23;9630:31;9655:5;9630:31;:::i;:::-;9680:5;-1:-1:-1;9737:2:1;9722:18;;9709:32;9750:33;9709:32;9750:33;:::i;:::-;9802:7;-1:-1:-1;9856:2:1;9841:18;;9828:32;;-1:-1:-1;9911:2:1;9896:18;;9883:32;-1:-1:-1;;;;;9927:30:1;;9924:50;;;9970:1;9967;9960:12;9924:50;9993:22;;10046:4;10038:13;;10034:27;-1:-1:-1;10024:55:1;;10075:1;10072;10065:12;10024:55;10098:74;10164:7;10159:2;10146:16;10141:2;10137;10133:11;10098:74;:::i;:::-;10088:84;;;9383:795;;;;;;;:::o;10183:388::-;10251:6;10259;10312:2;10300:9;10291:7;10287:23;10283:32;10280:52;;;10328:1;10325;10318:12;10280:52;10367:9;10354:23;10386:31;10411:5;10386:31;:::i;:::-;10436:5;-1:-1:-1;10493:2:1;10478:18;;10465:32;10506:33;10465:32;10506:33;:::i;10576:1013::-;10801:2;10853:21;;;10923:13;;10826:18;;;10945:22;;;10772:4;;10801:2;10986;;11004:18;;;;11045:15;;;10772:4;11088:475;11102:6;11099:1;11096:13;11088:475;;;11161:13;;11236:9;;11197:10;11232:18;;;11220:31;;11295:11;;;11289:18;11285:27;;11271:12;;;11264:49;11357:11;;;11351:18;11347:27;11333:12;;;11326:49;11398:4;11446:11;;;11440:18;-1:-1:-1;;;;;11436:44:1;11422:12;;;11415:66;11510:4;11501:14;;;;11538:15;;;;11477:1;11117:9;11088:475;;11594:356;11796:2;11778:21;;;11815:18;;;11808:30;11874:34;11869:2;11854:18;;11847:62;11941:2;11926:18;;11594:356::o;11955:380::-;12034:1;12030:12;;;;12077;;;12098:61;;12152:4;12144:6;12140:17;12130:27;;12098:61;12205:2;12197:6;12194:14;12174:18;12171:38;12168:161;;;12251:10;12246:3;12242:20;12239:1;12232:31;12286:4;12283:1;12276:15;12314:4;12311:1;12304:15;12168:161;;11955:380;;;:::o;13583:355::-;13785:2;13767:21;;;13824:2;13804:18;;;13797:30;13863:33;13858:2;13843:18;;13836:61;13929:2;13914:18;;13583:355::o;15079:127::-;15140:10;15135:3;15131:20;15128:1;15121:31;15171:4;15168:1;15161:15;15195:4;15192:1;15185:15;15211:135;15250:3;-1:-1:-1;;15271:17:1;;15268:43;;;15291:18;;:::i;:::-;-1:-1:-1;15338:1:1;15327:13;;15211:135::o;15351:348::-;15553:2;15535:21;;;15592:2;15572:18;;;15565:30;15631:26;15626:2;15611:18;;15604:54;15690:2;15675:18;;15351:348::o;16060:128::-;16100:3;16131:1;16127:6;16124:1;16121:13;16118:39;;;16137:18;;:::i;:::-;-1:-1:-1;16173:9:1;;16060:128::o;16193:407::-;16395:2;16377:21;;;16434:2;16414:18;;;16407:30;16473:34;16468:2;16453:18;;16446:62;-1:-1:-1;;;16539:2:1;16524:18;;16517:41;16590:3;16575:19;;16193:407::o;17423:127::-;17484:10;17479:3;17475:20;17472:1;17465:31;17515:4;17512:1;17505:15;17539:4;17536:1;17529:15;19980:125;20020:4;20048:1;20045;20042:8;20039:34;;;20053:18;;:::i;:::-;-1:-1:-1;20090:9:1;;19980:125::o;20110:127::-;20171:10;20166:3;20162:20;20159:1;20152:31;20202:4;20199:1;20192:15;20226:4;20223:1;20216:15;20242:136;20281:3;20309:5;20299:39;;20318:18;;:::i;:::-;-1:-1:-1;;;20354:18:1;;20242:136::o;21508:415::-;21710:2;21692:21;;;21749:2;21729:18;;;21722:30;21788:34;21783:2;21768:18;;21761:62;-1:-1:-1;;;21854:2:1;21839:18;;21832:49;21913:3;21898:19;;21508:415::o;21928:185::-;21970:3;22008:5;22002:12;22023:52;22068:6;22063:3;22056:4;22049:5;22045:16;22023:52;:::i;:::-;22091:16;;;;;21928:185;-1:-1:-1;;21928:185:1:o;22118:571::-;22398:3;22436:6;22430:13;22452:53;22498:6;22493:3;22486:4;22478:6;22474:17;22452:53;:::i;:::-;22568:13;;22527:16;;;;22590:57;22568:13;22527:16;22624:4;22612:17;;22590:57;:::i;:::-;22663:20;;22118:571;-1:-1:-1;;;;22118:571:1:o;23098:2298::-;-1:-1:-1;;;24398:3:1;24391:25;24373:3;24445:6;24439:13;24461:62;24516:6;24511:2;24506:3;24502:12;24495:4;24487:6;24483:17;24461:62;:::i;:::-;-1:-1:-1;;;24582:2:1;24542:16;;;24574:11;;;24567:34;24626:13;;24648:63;24626:13;24697:2;24689:11;;24682:4;24670:17;;24648:63;:::i;:::-;-1:-1:-1;;;24771:2:1;24730:17;;;;24763:11;;;24756:33;24814:13;;24836:63;24814:13;24885:2;24877:11;;24870:4;24858:17;;24836:63;:::i;:::-;-1:-1:-1;;;24959:2:1;24918:17;;;;24951:11;;;24944:31;25000:13;;25022:63;25000:13;25071:2;25063:11;;25056:4;25044:17;;25022:63;:::i;:::-;-1:-1:-1;;;25145:2:1;25104:17;;;;25137:11;;;25130:32;25178:212;25204:185;25234:154;25260:127;25290:96;25316:69;25346:38;25380:2;25372:11;;25364:6;25346:38;:::i;:::-;-1:-1:-1;;;22759:31:1;;22815:2;22806:12;;22694:130;25316:69;25308:6;25290:96;:::i;:::-;-1:-1:-1;;;22894:33:1;;22952:2;22943:12;;22829:132;25260:127;25252:6;25234:154;:::i;:::-;-1:-1:-1;;;23031:28:1;;23084:2;23075:12;;22966:127;25204:185;25196:6;25178:212;:::i;:::-;25171:219;23098:2298;-1:-1:-1;;;;;;;;;;;23098:2298:1:o;25790:2333::-;-1:-1:-1;;;27090:3:1;27083:30;27065:3;27142:6;27136:13;27168:4;27181:60;27234:6;27229:2;27224:3;27220:12;27215:2;27207:6;27203:15;27181:60;:::i;:::-;-1:-1:-1;;;27300:2:1;27260:16;;;27292:11;;;27285:40;27350:13;;27372:61;27350:13;27411:11;;;27394:15;;;27372:61;:::i;:::-;-1:-1:-1;;;27452:17:1;;27485:11;;;27478:36;;;;27539:13;;27561:61;27539:13;27608:2;27600:11;;27583:15;;;27561:61;:::i;:::-;-1:-1:-1;;;27682:2:1;27641:17;;;;27674:11;;;27667:38;27730:13;;27752:61;27730:13;27799:2;27791:11;;27774:15;;;27752:61;:::i;:::-;-1:-1:-1;;;27873:2:1;27832:17;;;;27865:11;;;27858:36;-1:-1:-1;27910:207:1;27936:180;27966:149;27992:122;28022:91;28048:64;28073:38;28107:2;28099:11;;28091:6;28073:38;:::i;:::-;-1:-1:-1;;;25461:29:1;;25515:2;25506:12;;25401:123;28022:91;-1:-1:-1;;;25594:31:1;;25650:2;25641:12;;25529:130;27966:149;-1:-1:-1;;;25729:23:1;;25777:1;25768:11;;25664:121;30242:246;30282:4;-1:-1:-1;;;;;30395:10:1;;;;30365;;30417:12;;;30414:38;;;30432:18;;:::i;:::-;30469:13;;30242:246;-1:-1:-1;;;30242:246:1:o;30493:253::-;30533:3;-1:-1:-1;;;;;30622:2:1;30619:1;30615:10;30652:2;30649:1;30645:10;30683:3;30679:2;30675:12;30670:3;30667:21;30664:47;;;30691:18;;:::i;30751:127::-;30812:10;30807:3;30803:20;30800:1;30793:31;30843:4;30840:1;30833:15;30867:4;30864:1;30857:15;30883:112;30915:1;30941;30931:35;;30946:18;;:::i;:::-;-1:-1:-1;30980:9:1;;30883:112::o;31347:120::-;31387:1;31413;31403:35;;31418:18;;:::i;:::-;-1:-1:-1;31452:9:1;;31347:120::o;33534:500::-;-1:-1:-1;;;;;33803:15:1;;;33785:34;;33855:15;;33850:2;33835:18;;33828:43;33902:2;33887:18;;33880:34;;;33950:3;33945:2;33930:18;;33923:31;;;33728:4;;33971:57;;34008:19;;34000:6;33971:57;:::i;:::-;33963:65;33534:500;-1:-1:-1;;;;;;33534:500:1:o;34039:249::-;34108:6;34161:2;34149:9;34140:7;34136:23;34132:32;34129:52;;;34177:1;34174;34167:12;34129:52;34209:9;34203:16;34228:30;34252:5;34228:30;:::i

Swarm Source

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