ETH Price: $3,387.52 (-1.58%)
Gas: 2 Gwei

Token

BlockchainCuties (CUTIE)
 

Overview

Max Total Supply

125,367 CUTIE

Holders

0 (0.00%)

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Blockchain Cuties Universe is a collectible NFT game that's based around adorable little pets called Cuties that explore the world of Cutieland and fight each other in adventures.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BlockchainCutiesToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 8: BlockchainCutiesToken.sol
pragma solidity ^0.4.23;

import "./CutieERC721Metadata.sol";
import "./ERC721TokenReceiver.sol";
import "./TokenRecipientInterface.sol";

contract BlockchainCutiesToken is CutieERC721Metadata {

    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    // @dev This struct represents a blockchain Cutie. It was ensured that struct fits well into
    // exactly two 256-bit words. The order of the members in this structure
    // matters because of the Ethereum byte-packing rules.CutieERC721Metadata
    // Reference: http://solidity.readthedocs.io/en/develop/miscellaneous.html
    struct Cutie {
        // The Cutie's genetic code is in these 256-bits. Cutie's genes never change.
        uint256 genes;

        // The timestamp from the block when this cutie was created.
        uint40 birthTime;

        // The minimum timestamp after which the cutie can start breeding
        // again.
        uint40 cooldownEndTime;

        // The cutie's parents ID is set to 0 for gen0 cuties.
        uint40 momId;
        uint40 dadId;

        // Set the index in the cooldown array (see below) that means
        // the current cooldown duration for this Cutie. Starts at 0
        // for gen0 cats, and is initialized to floor(generation/2) for others.
        // Incremented by one for each successful breeding, regardless
        // of being cutie mom or cutie dad.
        uint16 cooldownIndex;

        // The "generation number" of the cutie. Cuties minted by the contract
        // for sale are called "gen0" with generation number of 0. All other cuties'
        // generation number is the larger of their parents' two generation
        // numbers, plus one (i.e. max(mom.generation, dad.generation) + 1)
        uint16 generation;

        // Some optional data used by external contracts
        // Cutie struct is 2x256 bits long.
        uint64 optional;
    }

    bytes4 internal constant INTERFACE_SIGNATURE_ERC721Metadata =
        bytes4(keccak256('name()')) ^
        bytes4(keccak256('symbol()')) ^
        bytes4(keccak256('tokenURI(uint256)'));

    bytes4 internal constant INTERFACE_SIGNATURE_ERC721Enumerable =
        bytes4(keccak256('totalSupply()')) ^
        bytes4(keccak256('tokenByIndex(uint256)')) ^
        bytes4(keccak256('tokenOfOwnerByIndex(address, uint256)'));

    // @dev An mapping containing the Cutie struct for all Cuties in existence.
    // The ID of each cutie is actually an index into this mapping.
    //  ID 0 is the parent of all generation 0 cats, and both parents to itself. It is an invalid genetic code.
    mapping (uint40 => Cutie) public cuties;

    // @dev Total cuties count
    uint256 total;

    // @dev Core game contract address
    address public gameAddress;

    // @dev A mapping from cutie IDs to the address that owns them. All cuties have
    // some valid owner address, even gen0 cuties are created with a non-zero owner.
    mapping (uint40 => address) public cutieIndexToOwner;

    // @dev A mapping from owner address to count of tokens that address owns.
    // Used internally inside balanceOf() to resolve ownership count.
    mapping (address => uint256) ownershipTokenCount;

    // @dev A mapping from CutieIDs to an address that has been approved to call
    // transferFrom(). A Cutie can have one approved address for transfer
    // at any time. A zero value means that there is no outstanding approval.
    mapping (uint40 => address) public cutieIndexToApproved;

    // @dev A mapping from Cuties owner (account) to an address that has been approved to call
    // transferFrom() for all cuties, owned by owner.
    // Only one approved address is permitted for each account for transfer
    // at any time. A zero value means there is no outstanding approval.
    mapping (address => mapping (address => bool)) public addressToApprovedAll;

    // Modifiers to check that inputs can be safely stored with a certain number of bits
    modifier canBeStoredIn40Bits(uint256 _value) {
        require(_value <= 0xFFFFFFFFFF, "Value can't be stored in 40 bits");
        _;
    }

    modifier onlyGame {
        require(msg.sender == gameAddress || msg.sender == ownerAddress, "Access denied");
        _;
    }

    constructor() public {
        // Starts paused.
        paused = true;
    }

    // @dev Accept all Ether
    function() external payable {}

    function setup(uint256 _total) external onlyGame whenPaused {
        require(total == 0, "Contract already initialized");
        total = _total;
        paused = false;
    }

    function setGame(address _gameAddress) external onlyOwner {
        gameAddress = _gameAddress;
    }

    // @notice Query if a contract implements an interface
    // @param interfaceID The interface identifier, as specified in ERC-165
    // @dev Interface identification is specified in ERC-165. This function
    //  uses less than 30,000 gas.
    // @return `true` if the contract implements `interfaceID` and
    //  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external pure returns (bool) {
        return
        interfaceID == 0x6466353c ||
        interfaceID == 0x80ac58cd || // ERC721
        interfaceID == INTERFACE_SIGNATURE_ERC721Metadata ||
        interfaceID == INTERFACE_SIGNATURE_ERC721Enumerable ||
        interfaceID == bytes4(keccak256('supportsInterface(bytes4)'));
    }

    // @notice Returns the total number of Cuties in existence.
    // @dev Required for ERC-721 compliance.
    function totalSupply() public view returns (uint256) {
        return total;
    }

    // @notice Returns the number of Cuties owned by a specific address.
    // @param _owner The owner address to check.
    // @dev Required for ERC-721 compliance
    function balanceOf(address _owner) external view returns (uint256) {
        require(_owner != 0x0, "Owner can't be zero address");
        return ownershipTokenCount[_owner];
    }

    // @notice Returns the address currently assigned ownership of a given Cutie.
    // @dev Required for ERC-721 compliance.
    function ownerOf(uint256 _cutieId) external view canBeStoredIn40Bits(_cutieId) returns (address owner) {
        owner = cutieIndexToOwner[uint40(_cutieId)];
        require(owner != address(0), "Owner query for nonexistent token");
    }

    // @notice Returns the address currently assigned ownership of a given Cutie.
    // @dev do not revert when cutie has no owner
    function ownerOfCutie(uint256 _cutieId) external view canBeStoredIn40Bits(_cutieId) returns (address) {
        return cutieIndexToOwner[uint40(_cutieId)];
    }

    // @notice Enumerate valid NFTs
    // @dev Throws if `_index` >= `totalSupply()`.
    // @param _index A counter less than `totalSupply()`
    // @return The token identifier for the `_index`th NFT,
    //  (sort order not specified)
    function tokenByIndex(uint256 _index) external view returns (uint256) {
        require(_index < total);
        return _index - 1;
    }

    // @notice Returns the nth Cutie assigned to an address, with n specified by the
    //  _index argument.
    // @param _owner The owner of the Cuties we are interested in.
    // @param _index The zero-based index of the cutie within the owner's list of cuties.
    //  Must be less than balanceOf(_owner).
    // @dev This method must not be called by smart contract code. It will almost
    //  certainly blow past the block gas limit once there are a large number of
    //  Cuties in existence. Exists only to allow off-chain queries of ownership.
    //  Optional method for ERC-721.
    function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256 cutieId) {
        require(_owner != 0x0, "Owner can't be 0x0");
        uint40 count = 0;
        for (uint40 i = 1; i <= totalSupply(); ++i) {
            if (_isOwner(_owner, i)) {
                if (count == _index) {
                    return i;
                } else {
                    count++;
                }
            }
        }
        revert();
    }

    // @notice Transfers the ownership of an NFT from one address to another address.
    // @dev Throws unless `msg.sender` is the current owner, an authorized
    //  operator, or the approved address for this NFT. Throws if `_from` is
    //  not the current owner. Throws if `_to` is the zero address. Throws if
    //  `_tokenId` is not a valid NFT. When transfer is complete, this function
    //  checks if `_to` is a smart contract (code size > 0). If so, it calls
    //  `onERC721Received` on `_to` and throws if the return value is not
    //  `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`.
    // @param _from The current owner of the NFT
    // @param _to The new owner
    // @param _tokenId The NFT to transfer
    // @param data Additional data with no specified format, sent in call to `_to`
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) public whenNotPaused canBeStoredIn40Bits(_tokenId) {
        transferFrom(_from, _to, uint40(_tokenId));

        if (_isContract(_to)) {
            ERC721TokenReceiver(_to).onERC721Received(_from, _tokenId, data);
        }
    }

    // @notice Transfers the ownership of an NFT from one address to another address
    // @dev This works identically to the other function with an extra data parameter,
    // except this function just sets data to ""
    // @param _from The current owner of the NFT
    // @param _to The new owner
    // @param _tokenId The NFT to transfer
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external whenNotPaused {
        safeTransferFrom(_from, _to, _tokenId, "");
    }

    // @notice Transfer a Cutie owned by another address, for which the calling address
    //  has been granted transfer approval by the owner.
    // @param _from The address that owns the Cutie to be transferred.
    // @param _to Any address, including the caller address, can take ownership of the Cutie.
    // @param _tokenId The ID of the Cutie to be transferred.
    // @dev Required for ERC-721 compliance.
    function transferFrom(address _from, address _to, uint256 _tokenId) public whenNotPaused canBeStoredIn40Bits(_tokenId) {
        require(_to != address(0), "Wrong cutie destination");
        require(_to != address(this), "Wrong cutie destination");

        // Check for approval and valid ownership
        require(_isApprovedOrOwner(msg.sender, uint40(_tokenId)), "Caller is not owner nor approved");
        require(_isOwner(_from, uint40(_tokenId)), "Wrong cutie owner");

        // Reassign ownership, clearing pending approvals and emitting Transfer event.
        _transfer(_from, _to, uint40(_tokenId));
    }

    // @notice Transfers a Cutie to another address. When transferring to a smart
    // contract, ensure that it is aware of ERC-721 (or BlockchainCuties specifically),
    // otherwise the Cutie may be lost forever.
    // @param _to The address of the recipient, can be a user or contract.
    // @param _cutieId The ID of the Cutie to transfer.
    // @dev Required for ERC-721 compliance.
    function transfer(address _to, uint256 _cutieId) public whenNotPaused canBeStoredIn40Bits(_cutieId) {
        require(_to != address(0), "Wrong cutie destination");

        // You can only send your own cutie.
        require(_isOwner(msg.sender, uint40(_cutieId)), "Caller is not a cutie owner");

        // Reassign ownership, clear pending approvals, emit Transfer event.
        _transfer(msg.sender, _to, uint40(_cutieId));
    }

    function transferBulk(address[] to, uint[] tokens) public whenNotPaused {
        require(to.length == tokens.length);
        for (uint i = 0; i < to.length; i++) {
            transfer(to[i], tokens[i]);
        }
    }

    function transferMany(address to, uint[] tokens) public whenNotPaused {
        for (uint i = 0; i < tokens.length; i++) {
            transfer(to, tokens[i]);
        }
    }

    // @notice Grant another address the right to transfer a particular Cutie via transferFrom().
    // This flow is preferred for transferring NFTs to contracts.
    // @param _to The address to be granted transfer approval. Pass address(0) to clear all approvals.
    // @param _cutieId The ID of the Cutie that can be transferred if this call succeeds.
    // @dev Required for ERC-721 compliance.
    function approve(address _to, uint256 _cutieId) public whenNotPaused canBeStoredIn40Bits(_cutieId) {
        // Only cutie's owner can grant transfer approval.
        require(_isOwner(msg.sender, uint40(_cutieId)), "Caller is not a cutie owner");
        require(msg.sender != _to, "Approval to current owner");

        // Registering approval replaces any previous approval.
        _approve(uint40(_cutieId), _to);

        // Emit approval event.
        emit Approval(msg.sender, _to, _cutieId);
    }

    function delegatedApprove(address _from, address _to, uint40 _cutieId) external whenNotPaused onlyGame {
        require(_isOwner(_from, _cutieId), "Wrong cutie owner");
        _approve(_cutieId, _to);
    }

    function approveAndCall(address _spender, uint _tokenId, bytes data) external whenNotPaused returns (bool) {
        approve(_spender, _tokenId);
        TokenRecipientInterface(_spender).receiveApproval(msg.sender, _tokenId, this, data);
        return true;
    }

    // @notice Enable or disable approval for a third party ("operator") to manage
    //  all your asset.
    // @dev Emits the ApprovalForAll event
    // @param _operator Address to add to the set of authorized operators.
    // @param _approved True if the operators is approved, false to revoke approval
    function setApprovalForAll(address _operator, bool _approved) external {
        require(_operator != msg.sender, "Approve to caller");

        if (_approved) {
            addressToApprovedAll[msg.sender][_operator] = true;
        } else {
            delete addressToApprovedAll[msg.sender][_operator];
        }
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    // @notice Get the approved address for a single NFT
    // @dev Throws if `_tokenId` is not a valid NFT
    // @param _tokenId The NFT to find the approved address for
    // @return The approved address for this NFT, or the zero address if there is none
    function getApproved(uint256 _tokenId) external view canBeStoredIn40Bits(_tokenId) returns (address) {
        require(_tokenId <= total, "Cutie not exists");
        return cutieIndexToApproved[uint40(_tokenId)];
    }

    // @notice Query if an address is an authorized operator for another address
    // @param _owner The address that owns the NFTs
    // @param _operator The address that acts on behalf of the owner
    // @return True if `_operator` is an approved operator for `_owner`, false otherwise
    function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
        return addressToApprovedAll[_owner][_operator];
    }

    // @dev Returns whether `spender` is allowed to manage `cutieId`.
    function _isApprovedOrOwner(address spender, uint40 cutieId) internal view returns (bool) {
        require(_exists(cutieId), "Cutie not exists");
        address owner = cutieIndexToOwner[cutieId];
        return (spender == owner || _approvedFor(spender, cutieId) || isApprovedForAll(owner, spender));
    }

    // @dev Checks if a given address is the current owner of a certain Cutie.
    // @param _claimant the address we are validating against.
    // @param _cutieId cutie id, only valid when > 0
    function _isOwner(address _claimant, uint40 _cutieId) internal view returns (bool) {
        return cutieIndexToOwner[_cutieId] == _claimant;
    }

    function _exists(uint40 _cutieId) internal view returns (bool) {
        return cutieIndexToOwner[_cutieId] != address(0);
    }

    // @dev Marks an address as being approved for transferFrom(), overwriting any previous
    //  approval. Setting _approved to address(0) clears all transfer approval.
    //  NOTE: _approve() does NOT send the Approval event. This is done on purpose:
    //  _approve() and transferFrom() are used together for putting Cuties on auction.
    //  There is no value in spamming the log with Approval events in that case.
    function _approve(uint40 _cutieId, address _approved) internal {
        cutieIndexToApproved[_cutieId] = _approved;
    }

    // @dev Checks if a given address currently has transferApproval for a certain Cutie.
    // @param _claimant the address we are confirming the cutie is approved for.
    // @param _cutieId cutie id, only valid when > 0
    function _approvedFor(address _claimant, uint40 _cutieId) internal view returns (bool) {
        return cutieIndexToApproved[_cutieId] == _claimant;
    }

    // @dev Assigns ownership of a particular Cutie to an address.
    function _transfer(address _from, address _to, uint40 _cutieId) internal {

        // since the number of cuties is capped to 2^40
        // there is no way to overflow this
        ownershipTokenCount[_to]++;
        // transfer ownership
        cutieIndexToOwner[_cutieId] = _to;
        // When creating new cuties _from is 0x0, but we cannot account that address.
        if (_from != address(0)) {
            ownershipTokenCount[_from]--;
            // clear any previously approved ownership exchange
            delete cutieIndexToApproved[_cutieId];
        }
        // Emit the transfer event.
        emit Transfer(_from, _to, _cutieId);
    }

    // This method relies on extcodesize, which returns 0 for contracts in
    // construction, since the code is only stored at the end of the
    // constructor execution.
    function _isContract(address _account) internal view returns (bool) {
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(_account) }
        return size > 0;
    }

    // @dev For transferring a cutie owned by this contract to the specified address.
    //  Used to rescue lost cuties. (There is no "proper" flow where this contract
    //  should be the owner of any Cutie. This function exists for us to reassign
    //  the ownership of Cuties that users may have accidentally sent to our address.)
    // @param _cutieId - ID of cutie
    // @param _recipient - Address to send the cutie to
    function restoreCutieToAddress(uint40 _cutieId, address _recipient) external whenNotPaused onlyOperator {
        require(_isOwner(this, _cutieId));
        _transfer(this, _recipient, _cutieId);
    }

    // @dev An method that creates a new cutie and stores it. This
    //  method does not check anything and should only be called when the
    //  input data is valid for sure. Will generate both a Birth event
    //  and a Transfer event.
    // @param _momId The cutie ID of the mom of this cutie (zero for gen0)
    // @param _dadId The cutie ID of the dad of this cutie (zero for gen0)
    // @param _generation The generation number of this cutie, must be computed by caller.
    // @param _genes The cutie's genetic code.
    // @param _owner The initial owner of this cutie, must be non-zero (except for the unCutie, ID 0)
    function createCutie(
        address _owner,
        uint40 _momId,
        uint40 _dadId,
        uint16 _generation,
        uint16 _cooldownIndex,
        uint256 _genes,
        uint40 _birthTime
    ) external whenNotPaused onlyGame returns (uint40) {
        Cutie memory _cutie = Cutie({
            genes : _genes,
            birthTime : _birthTime,
            cooldownEndTime : 0,
            momId : _momId,
            dadId : _dadId,
            cooldownIndex : _cooldownIndex,
            generation : _generation,
            optional : 0
        });

        total++;
        uint256 newCutieId256 = total;

        // Check if id can fit into 40 bits
        require(newCutieId256 <= 0xFFFFFFFFFF);

        uint40 newCutieId = uint40(newCutieId256);
        cuties[newCutieId] = _cutie;

        // This will assign ownership, as well as emit the Transfer event as per ERC721 draft
        _transfer(0, _owner, newCutieId);

        return newCutieId;
    }

    // @dev Recreate the cutie if it stuck on old contracts and cannot be migrated smoothly
    function restoreCutie(
        address owner,
        uint40 id,
        uint256 _genes,
        uint40 _momId,
        uint40 _dadId,
        uint16 _generation,
        uint40 _cooldownEndTime,
        uint16 _cooldownIndex,
        uint40 _birthTime
    ) external whenNotPaused onlyGame {
        require(owner != address(0), "Restore to zero address");
        require(total >= id, "Cutie restore is not allowed");
        require(cuties[id].birthTime == 0, "Cutie overwrite is forbidden");

        Cutie memory cutie = Cutie({
            genes: _genes,
            momId: _momId,
            dadId: _dadId,
            generation: _generation,
            cooldownEndTime: _cooldownEndTime,
            cooldownIndex: _cooldownIndex,
            birthTime: _birthTime,
            optional: 0
        });

        cuties[id] = cutie;
        cutieIndexToOwner[id] = owner;
        ownershipTokenCount[owner]++;
    }

    // @notice Returns all the relevant information about a certain cutie.
    // @param _id The ID of the cutie of interest.
    function getCutie(uint40 _id) external view returns (
        uint256 genes,
        uint40 birthTime,
        uint40 cooldownEndTime,
        uint40 momId,
        uint40 dadId,
        uint16 cooldownIndex,
        uint16 generation
    ) {
        require(_exists(_id), "Cutie not exists");

        Cutie storage cutie = cuties[_id];

        genes = cutie.genes;
        birthTime = cutie.birthTime;
        cooldownEndTime = cutie.cooldownEndTime;
        momId = cutie.momId;
        dadId = cutie.dadId;
        cooldownIndex = cutie.cooldownIndex;
        generation = cutie.generation;
    }

    function getGenes(uint40 _id) external view returns (uint256) {
        return cuties[_id].genes;
    }

    function setGenes(uint40 _id, uint256 _genes) external whenNotPaused onlyGame {
        cuties[_id].genes = _genes;
    }

    function getCooldownEndTime(uint40 _id) external view returns (uint40) {
        return cuties[_id].cooldownEndTime;
    }

    function setCooldownEndTime(uint40 _id, uint40 _cooldownEndTime) external whenNotPaused onlyGame {
        cuties[_id].cooldownEndTime = _cooldownEndTime;
    }

    function getCooldownIndex(uint40 _id) external view returns (uint16) {
        return cuties[_id].cooldownIndex;
    }

    function setCooldownIndex(uint40 _id, uint16 _cooldownIndex) external whenNotPaused onlyGame {
        cuties[_id].cooldownIndex = _cooldownIndex;
    }

    function getGeneration(uint40 _id) external view returns (uint16) {
        return cuties[_id].generation;
    }

    function setGeneration(uint40 _id, uint16 _generation) external whenNotPaused onlyGame {
        cuties[_id].generation = _generation;
    }

    function getOptional(uint40 _id) external view returns (uint64) {
        return cuties[_id].optional;
    }

    function setOptional(uint40 _id, uint64 _optional) external whenNotPaused onlyGame {
        cuties[_id].optional = _optional;
    }
}

File 2 of 8: CutieAccessControl.sol
pragma solidity ^0.4.23;

import "./IERC20Withdraw.sol";
import "./IERC721Withdraw.sol";

contract CutieAccessControl {

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    // @dev Address with full contract privileges
    address ownerAddress;

    // @dev Next owner address
    address pendingOwnerAddress;

    // @dev Addresses with configuration privileges
    mapping (address => bool) operatorAddress;

    modifier onlyOwner() {
        require(msg.sender == ownerAddress, "Access denied");
        _;
    }

    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwnerAddress, "Access denied");
        _;
    }

    modifier onlyOperator() {
        require(operatorAddress[msg.sender] || msg.sender == ownerAddress, "Access denied");
        _;
    }

    constructor () internal {
        ownerAddress = msg.sender;
    }

    function getOwner() external view returns (address) {
        return ownerAddress;
    }

    function setOwner(address _newOwner) external onlyOwner {
        require(_newOwner != address(0));
        pendingOwnerAddress = _newOwner;
    }

    function getPendingOwner() external view returns (address) {
        return pendingOwnerAddress;
    }

    function claimOwnership() external onlyPendingOwner {
        emit OwnershipTransferred(ownerAddress, pendingOwnerAddress);
        ownerAddress = pendingOwnerAddress;
        pendingOwnerAddress = address(0);
    }

    function isOperator(address _addr) public view returns (bool) {
        return operatorAddress[_addr];
    }

    function setOperator(address _newOperator) public onlyOwner {
        require(_newOperator != address(0));
        operatorAddress[_newOperator] = true;
    }

    function removeOperator(address _operator) public onlyOwner {
        delete(operatorAddress[_operator]);
    }

    // @dev The balance transfer from CutieCore contract to project owners
    function withdraw(address _receiver) external onlyOwner {
        if (address(this).balance > 0) {
            _receiver.transfer(address(this).balance);
        }
    }

    // @dev Allow to withdraw ERC20 tokens from contract itself
    function withdrawERC20(IERC20Withdraw _tokenContract) external onlyOwner {
        uint256 balance = _tokenContract.balanceOf(address(this));
        if (balance > 0) {
            _tokenContract.transfer(msg.sender, balance);
        }
    }

    // @dev Allow to withdraw ERC721 tokens from contract itself
    function approveERC721(IERC721Withdraw _tokenContract) external onlyOwner {
        _tokenContract.setApprovalForAll(msg.sender, true);
    }

}

File 3 of 8: CutieERC721Metadata.sol
pragma solidity ^0.4.23;

import "./CutiePausable.sol";

contract CutieERC721Metadata is CutiePausable /* is IERC721Metadata */ {
    string public metadataUrlPrefix = "https://blockchaincuties.com/cutie/";
    string public metadataUrlSuffix = ".svg";

    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external pure returns (string) {
        return "BlockchainCuties";
    }

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external pure returns (string) {
        return "CUTIE";
    }

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    function tokenURI(uint256 _tokenId) external view returns (string infoUrl) {
        return
        concat(toSlice(metadataUrlPrefix),
            toSlice(concat(toSlice(uintToString(_tokenId)), toSlice(metadataUrlSuffix))));
    }

    function setMetadataUrl(string _metadataUrlPrefix, string _metadataUrlSuffix) public onlyOwner {
        metadataUrlPrefix = _metadataUrlPrefix;
        metadataUrlSuffix = _metadataUrlSuffix;
    }

    /*
     * @title String & slice utility library for Solidity contracts.
     * @author Nick Johnson <[email protected]>
     *
     * @dev Functionality in this library is largely implemented using an
     *      abstraction called a 'slice'. A slice represents a part of a string -
     *      anything from the entire string to a single character, or even no
     *      characters at all (a 0-length slice). Since a slice only has to specify
     *      an offset and a length, copying and manipulating slices is a lot less
     *      expensive than copying and manipulating the strings they reference.
     *
     *      To further reduce gas costs, most functions on slice that need to return
     *      a slice modify the original one instead of allocating a new one; for
     *      instance, `s.split(".")` will return the text up to the first '.',
     *      modifying s to only contain the remainder of the string after the '.'.
     *      In situations where you do not want to modify the original slice, you
     *      can make a copy first with `.copy()`, for example:
     *      `s.copy().split(".")`. Try and avoid using this idiom in loops; since
     *      Solidity has no memory management, it will result in allocating many
     *      short-lived slices that are later discarded.
     *
     *      Functions that return two slices come in two versions: a non-allocating
     *      version that takes the second slice as an argument, modifying it in
     *      place, and an allocating version that allocates and returns the second
     *      slice; see `nextRune` for example.
     *
     *      Functions that have to copy string data will return strings rather than
     *      slices; these can be cast back to slices for further processing if
     *      required.
     *
     *      For convenience, some functions are provided with non-modifying
     *      variants that create a new slice and return both; for instance,
     *      `s.splitNew('.')` leaves s unmodified, and returns two values
     *      corresponding to the left and right parts of the string.
     */

    struct slice {
        uint _len;
        uint _ptr;
    }

    /*
     * @dev Returns a slice containing the entire string.
     * @param self The string to make a slice from.
     * @return A newly allocated slice containing the entire string.
     */
    function toSlice(string self) internal pure returns (slice) {
        uint ptr;
        assembly {
            ptr := add(self, 0x20)
        }
        return slice(bytes(self).length, ptr);
    }

    function memcpy(uint dest, uint src, uint len) private pure {
        // Copy word-length chunks while possible
        for(; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }

    /*
     * @dev Returns a newly allocated string containing the concatenation of
     *      `self` and `other`.
     * @param self The first slice to concatenate.
     * @param other The second slice to concatenate.
     * @return The concatenation of the two strings.
     */
    function concat(slice self, slice other) internal pure returns (string) {
        string memory ret = new string(self._len + other._len);
        uint retptr;
        assembly { retptr := add(ret, 32) }
        memcpy(retptr, self._ptr, self._len);
        memcpy(retptr + self._len, other._ptr, other._len);
        return ret;
    }


    function uintToString(uint256 a) internal pure returns (string result) {
        string memory r = "";
        do {
            uint b = a % 10;
            a /= 10;

            string memory c = "";

            if (b == 0) c = "0";
            else if (b == 1) c = "1";
            else if (b == 2) c = "2";
            else if (b == 3) c = "3";
            else if (b == 4) c = "4";
            else if (b == 5) c = "5";
            else if (b == 6) c = "6";
            else if (b == 7) c = "7";
            else if (b == 8) c = "8";
            else if (b == 9) c = "9";

            r = concat(toSlice(c), toSlice(r));
        } while (a > 0);
        result = r;
    }
}

File 4 of 8: CutiePausable.sol
pragma solidity ^0.4.23;

import "./CutieAccessControl.sol";

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract CutiePausable is CutieAccessControl {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    emit Unpause();
  }
}

File 5 of 8: ERC721TokenReceiver.sol
pragma solidity ^0.4.23;

/// @dev Note: the ERC-165 identifier for this interface is 0xf0b9e5ba
interface ERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. This function MUST use 50,000 gas or less. Return of other
    ///  than the magic value MUST result in the transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _from The sending address 
    /// @param _tokenId The NFT identifier which is being transfered
    /// @param data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(address _from, uint256 _tokenId, bytes data) external returns(bytes4);
}

File 6 of 8: IERC20Withdraw.sol
pragma solidity ^0.4.23;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Withdraw {
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
}

File 7 of 8: IERC721Withdraw.sol
pragma solidity ^0.4.23;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC721Withdraw {
    /**
    * @dev Approve or remove `operator` as an operator for the caller.
    * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
    *
    * Requirements:
    *
    * - The `operator` cannot be the caller.
    *
    * Emits an {ApprovalForAll} event.
    */
    function setApprovalForAll(address operator, bool _approved) external;
}

File 8 of 8: TokenRecipientInterface.sol
pragma solidity ^0.4.23;

// ----------------------------------------------------------------------------
// Contract function to receive approval and execute function in one call
//
// Borrowed from MiniMeToken

interface TokenRecipientInterface {
    function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external;
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint40"}],"name":"cuties","outputs":[{"name":"genes","type":"uint256"},{"name":"birthTime","type":"uint40"},{"name":"cooldownEndTime","type":"uint40"},{"name":"momId","type":"uint40"},{"name":"dadId","type":"uint40"},{"name":"cooldownIndex","type":"uint16"},{"name":"generation","type":"uint16"},{"name":"optional","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_cutieId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint40"}],"name":"cutieIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint40"}],"name":"getCooldownIndex","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"cutieId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint40"}],"name":"getOptional","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_total","type":"uint256"}],"name":"setup","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"approveERC721","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_momId","type":"uint40"},{"name":"_dadId","type":"uint40"},{"name":"_generation","type":"uint16"},{"name":"_cooldownIndex","type":"uint16"},{"name":"_genes","type":"uint256"},{"name":"_birthTime","type":"uint40"}],"name":"createCutie","outputs":[{"name":"","type":"uint40"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint40"},{"name":"_cooldownIndex","type":"uint16"}],"name":"setCooldownIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cutieId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_addr","type":"address"}],"name":"isOperator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_metadataUrlPrefix","type":"string"},{"name":"_metadataUrlSuffix","type":"string"}],"name":"setMetadataUrl","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_gameAddress","type":"address"}],"name":"setGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint40"},{"name":"_generation","type":"uint16"}],"name":"setGeneration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address[]"},{"name":"tokens","type":"uint256[]"}],"name":"transferBulk","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getPendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint40"}],"name":"getGenes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint40"}],"name":"getGeneration","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"},{"name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cutieId","type":"uint40"},{"name":"_recipient","type":"address"}],"name":"restoreCutieToAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_cutieId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cutieId","type":"uint256"}],"name":"ownerOfCutie","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint40"},{"name":"_cooldownEndTime","type":"uint40"}],"name":"setCooldownEndTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"addressToApprovedAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_operator","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint40"}],"name":"cutieIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOperator","type":"address"}],"name":"setOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"metadataUrlPrefix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"infoUrl","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"metadataUrlSuffix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokens","type":"uint256[]"}],"name":"transferMany","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint40"}],"name":"getCutie","outputs":[{"name":"genes","type":"uint256"},{"name":"birthTime","type":"uint40"},{"name":"cooldownEndTime","type":"uint40"},{"name":"momId","type":"uint40"},{"name":"dadId","type":"uint40"},{"name":"cooldownIndex","type":"uint16"},{"name":"generation","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"id","type":"uint40"},{"name":"_genes","type":"uint256"},{"name":"_momId","type":"uint40"},{"name":"_dadId","type":"uint40"},{"name":"_generation","type":"uint16"},{"name":"_cooldownEndTime","type":"uint40"},{"name":"_cooldownIndex","type":"uint16"},{"name":"_birthTime","type":"uint40"}],"name":"restoreCutie","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint40"},{"name":"_genes","type":"uint256"}],"name":"setGenes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"withdrawERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint40"}],"name":"getCooldownEndTime","outputs":[{"name":"","type":"uint40"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_cutieId","type":"uint40"}],"name":"delegatedApprove","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint40"},{"name":"_optional","type":"uint64"}],"name":"setOptional","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_operator","type":"address"},{"indexed":false,"name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6003805460ff1916905560e0604052602360808190527f68747470733a2f2f626c6f636b636861696e6375746965732e636f6d2f63757460a09081527f69652f000000000000000000000000000000000000000000000000000000000060c0526200006e9160049190620000e9565b506040805180820190915260048082527f2e737667000000000000000000000000000000000000000000000000000000006020909201918252620000b591600591620000e9565b50348015620000c357600080fd5b5060008054600160a060020a031916331790556003805460ff191660011790556200018e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b6200018b91905b808211156200016a576000815560010162000175565b90565b613cb1806200019e6000396000f3006080604052600436106102be5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102c057806302101162146102f657806306fdde0314610372578063081812fc146103fc578063095ea7b31461043057806310e9678b1461045457806313af40351461047357806318160ddd1461049457806323b872dd146104bb5780632917f162146104e55780632f745c591461051b5780633e6d4e121461053f5780633f4ba83a1461057b57806342842e0e146105905780634313b9e5146105ba57806346195c12146105d25780634a4b31e7146105f35780634e71e0c8146106585780634f6ccce71461066d57806351cff8d9146106855780635c975abb146106a657806362081c87146106bb5780636352211e146106e15780636d70f7ae146106f957806370a082311461071a57806379edfa7d1461073b578063819912a2146107d25780638456cb59146107f3578063893d20e81461080857806392255b5b1461081d5780639316c3e71461084357806393596c7b146108d157806395d89b41146108e6578063999d3947146108fb5780639c91ae201461091a578063a168d87314610939578063a22cb4651461094e578063a86ee74614610974578063a9059cbb1461099f578063a9de9e3a146109c3578063aa364eea146109db578063aad8e43114610a00578063ac8a584a14610a27578063b1d9549714610a48578063b3ab15fb14610a67578063b88d4fde14610a88578063c7047fa714610af7578063c87b56dd14610b0c578063cae9ca5114610b24578063d4d6d36614610b55578063e1f9d83b14610b6a578063e39bdfab14610bcd578063e6ef712b14610c35578063e7c973a514610c8b578063e985e9c514610cad578063f4f3b20014610cd4578063f6dfcff714610cf5578063fea4cfd514610d14578063ffc96ca414610d45575b005b3480156102cc57600080fd5b506102e2600160e060020a031960043516610d71565b604080519115158252519081900360200190f35b34801561030257600080fd5b5061031564ffffffffff60043516610fa4565b6040805198895264ffffffffff97881660208a015295871688870152938616606088015291909416608086015261ffff93841660a086015290921660c084015267ffffffffffffffff90911660e083015251908190036101000190f35b34801561037e57600080fd5b50610387611025565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103c15781810151838201526020016103a9565b50505050905090810190601f1680156103ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040857600080fd5b5061041460043561105d565b60408051600160a060020a039092168252519081900360200190f35b34801561043c57600080fd5b506102be600160a060020a036004351660243561112e565b34801561046057600080fd5b5061041464ffffffffff6004351661129a565b34801561047f57600080fd5b506102be600160a060020a03600435166112b5565b3480156104a057600080fd5b506104a9611349565b60408051918252519081900360200190f35b3480156104c757600080fd5b506102be600160a060020a036004358116906024351660443561134f565b3480156104f157600080fd5b5061050464ffffffffff6004351661153d565b6040805161ffff9092168252519081900360200190f35b34801561052757600080fd5b506104a9600160a060020a0360043516602435611564565b34801561054b57600080fd5b5061055e64ffffffffff6004351661162e565b6040805167ffffffffffffffff9092168252519081900360200190f35b34801561058757600080fd5b506102be61165b565b34801561059c57600080fd5b506102be600160a060020a03600435811690602435166044356116f1565b3480156105c657600080fd5b506102be600435611722565b3480156105de57600080fd5b506102be600160a060020a0360043516611801565b3480156105ff57600080fd5b5061063e600160a060020a036004351664ffffffffff60243581169060443581169061ffff6064358116916084359091169060a4359060c435166118d3565b6040805164ffffffffff9092168252519081900360200190f35b34801561066457600080fd5b506102be611b34565b34801561067957600080fd5b506104a9600435611bf5565b34801561069157600080fd5b506102be600160a060020a0360043516611c0e565b3480156106b257600080fd5b506102e2611ca3565b3480156106c757600080fd5b506102be64ffffffffff6004351661ffff60243516611cac565b3480156106ed57600080fd5b50610414600435611d6e565b34801561070557600080fd5b506102e2600160a060020a0360043516611e5b565b34801561072657600080fd5b506104a9600160a060020a0360043516611e79565b34801561074757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102be94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611ef79650505050505050565b3480156107de57600080fd5b506102be600160a060020a0360043516611f6e565b3480156107ff57600080fd5b506102be611fed565b34801561081457600080fd5b50610414612085565b34801561082957600080fd5b506102be64ffffffffff6004351661ffff60243516612094565b34801561084f57600080fd5b50604080516020600480358082013583810280860185019096528085526102be95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506121589650505050505050565b3480156108dd57600080fd5b506104146121c6565b3480156108f257600080fd5b506103876121d5565b34801561090757600080fd5b506104a964ffffffffff6004351661220c565b34801561092657600080fd5b5061050464ffffffffff60043516612225565b34801561094557600080fd5b5061041461224c565b34801561095a57600080fd5b506102be600160a060020a0360043516602435151561225b565b34801561098057600080fd5b506102be64ffffffffff60043516600160a060020a0360243516612367565b3480156109ab57600080fd5b506102be600160a060020a0360043516602435612403565b3480156109cf57600080fd5b5061041460043561252a565b3480156109e757600080fd5b506102be64ffffffffff6004358116906024351661259c565b348015610a0c57600080fd5b506102e2600160a060020a0360043581169060243516612652565b348015610a3357600080fd5b506102be600160a060020a0360043516612672565b348015610a5457600080fd5b5061041464ffffffffff600435166126e3565b348015610a7357600080fd5b506102be600160a060020a03600435166126fe565b348015610a9457600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526102be94600160a060020a0381358116956024803590921695604435953695608494019181908401838280828437509497506127879650505050505050565b348015610b0357600080fd5b5061038761291c565b348015610b1857600080fd5b506103876004356129aa565b348015610b3057600080fd5b506102e260048035600160a060020a0316906024803591604435918201910135612ac2565b348015610b6157600080fd5b50610387612b9a565b348015610b7657600080fd5b506040805160206004602480358281013584810280870186019097528086526102be968435600160a060020a031696369660449591949091019291829185019084908082843750949750612bf59650505050505050565b348015610bd957600080fd5b50610bec64ffffffffff60043516612c2f565b6040805197885264ffffffffff96871660208901529486168786015292851660608701529316608085015261ffff92831660a085015290911660c0830152519081900360e00190f35b348015610c4157600080fd5b506102be600160a060020a036004351664ffffffffff6024358116906044359060643581169060843581169061ffff60a43581169160c43581169160e43516906101043516612d14565b348015610c9757600080fd5b506102be64ffffffffff60043516602435613100565b348015610cb957600080fd5b506102e2600160a060020a0360043581169060243516613191565b348015610ce057600080fd5b506102be600160a060020a03600435166131bf565b348015610d0157600080fd5b5061063e64ffffffffff6004351661333a565b348015610d2057600080fd5b506102be600160a060020a036004358116906024351664ffffffffff60443516613362565b348015610d5157600080fd5b506102be64ffffffffff6004351667ffffffffffffffff60243516613443565b60007f6466353c00000000000000000000000000000000000000000000000000000000600160e060020a031983161480610dd457507f80ac58cd00000000000000000000000000000000000000000000000000000000600160e060020a03198316145b80610e825750604080517f746f6b656e5552492875696e7432353629000000000000000000000000000000815281519081900360110181207f73796d626f6c2829000000000000000000000000000000000000000000000000825282519182900360080182207f6e616d65282900000000000000000000000000000000000000000000000000008352925191829003600601909120600160e060020a03198581169190931890911891909116145b80610f565750604080517f746f6b656e4f664f776e65724279496e64657828616464726573732c2075696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015281519081900360250181207f746f6b656e4279496e6465782875696e74323536290000000000000000000000825282519182900360150182207f746f74616c537570706c792829000000000000000000000000000000000000008352925191829003600d01909120600160e060020a03198581169190931890911891909116145b80610f9e5750604080517f737570706f727473496e7465726661636528627974657334290000000000000081529051908190036019019020600160e060020a03198381169116145b92915050565b6006602052600090815260409020805460019091015464ffffffffff808216916501000000000081048216916a010000000000000000000082048116916f0100000000000000000000000000000081049091169061ffff60a060020a820481169160b060020a81049091169067ffffffffffffffff60c060020a9091041688565b60408051808201909152601081527f426c6f636b636861696e4375746965730000000000000000000000000000000060208201525b90565b60008164ffffffffff8111156110ab576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b600754831115611105576040805160e560020a62461bcd02815260206004820152601060248201527f4375746965206e6f742065786973747300000000000000000000000000000000604482015290519081900360640190fd5b64ffffffffff83166000908152600b6020526040902054600160a060020a031691505b50919050565b60035460ff161561113e57600080fd5b8064ffffffffff81111561118a576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b611194338361350c565b15156111ea576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c6572206973206e6f742061206375746965206f776e65720000000000604482015290519081900360640190fd5b33600160a060020a038416141561124b576040805160e560020a62461bcd02815260206004820152601960248201527f417070726f76616c20746f2063757272656e74206f776e657200000000000000604482015290519081900360640190fd5b6112558284613533565b604080518381529051600160a060020a0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3505050565b600b60205260009081526040902054600160a060020a031681565b600054600160a060020a03163314611305576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a038116151561131a57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60075490565b60035460ff161561135f57600080fd5b8064ffffffffff8111156113ab576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b600160a060020a038316151561140b576040805160e560020a62461bcd02815260206004820152601760248201527f57726f6e672063757469652064657374696e6174696f6e000000000000000000604482015290519081900360640190fd5b600160a060020a03831630141561146c576040805160e560020a62461bcd02815260206004820152601760248201527f57726f6e672063757469652064657374696e6174696f6e000000000000000000604482015290519081900360640190fd5b6114763383613577565b15156114cc576040805160e560020a62461bcd02815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604482015290519081900360640190fd5b6114d6848361350c565b151561152c576040805160e560020a62461bcd02815260206004820152601160248201527f57726f6e67206375746965206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b611537848484613629565b50505050565b64ffffffffff1660009081526006602052604090206001015460a060020a900461ffff1690565b60008080600160a060020a03851615156115c8576040805160e560020a62461bcd02815260206004820152601260248201527f4f776e65722063616e2774206265203078300000000000000000000000000000604482015290519081900360640190fd5b506000905060015b6115d8611349565b64ffffffffff821611611621576115ef858261350c565b1561161957838264ffffffffff161415611612578064ffffffffff169250611626565b6001909101905b6001016115d0565b600080fd5b505092915050565b64ffffffffff1660009081526006602052604090206001015460c060020a900467ffffffffffffffff1690565b600054600160a060020a031633146116ab576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60035460ff1615156116bc57600080fd5b6003805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60035460ff161561170157600080fd5b61171d8383836020604051908101604052806000815250612787565b505050565b600854600160a060020a03163314806117455750600054600160a060020a031633145b1515611789576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60035460ff16151561179a57600080fd5b600754156117f2576040805160e560020a62461bcd02815260206004820152601c60248201527f436f6e747261637420616c726561647920696e697469616c697a656400000000604482015290519081900360640190fd5b6007556003805460ff19169055565b600054600160a060020a03163314611851576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b604080517fa22cb465000000000000000000000000000000000000000000000000000000008152336004820152600160248201529051600160a060020a0383169163a22cb46591604480830192600092919082900301818387803b1580156118b857600080fd5b505af11580156118cc573d6000803e3d6000fd5b5050505050565b60006118dd613b52565b600354600090819060ff16156118f257600080fd5b600854600160a060020a03163314806119155750600054600160a060020a031633145b1515611959576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b604080516101008101825287815264ffffffffff808816602083015260009282018390528c811660608301528b8116608083015261ffff808b1660a08401528b1660c083015260e0820192909252600780546001019081905590945092508211156119c357600080fd5b5064ffffffffff8181166000908152600660209081526040808320865181559186015160019092018054918701516060880151608089015160a08a015160c08b015160e08c015164ffffffffff19909716978a169790971769ffffffffff0000000000191665010000000000948a1694909402939093176effffffffff0000000000000000000019166a0100000000000000000000928916929092029190911773ffffffffff00000000000000000000000000000019166f0100000000000000000000000000000091909716029590951775ffff0000000000000000000000000000000000000000191660a060020a61ffff968716021777ffff00000000000000000000000000000000000000000000191660b060020a95909316949094029190911777ffffffffffffffffffffffffffffffffffffffffffffffff1660c060020a67ffffffffffffffff90921691909102179091558190611b26908c83613629565b9a9950505050505050505050565b600154600160a060020a03163314611b84576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6007546000908210611c0657600080fd5b506000190190565b600054600160a060020a03163314611c5e576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600030311115611ca057604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015611c9e573d6000803e3d6000fd5b505b50565b60035460ff1681565b60035460ff1615611cbc57600080fd5b600854600160a060020a0316331480611cdf5750600054600160a060020a031633145b1515611d23576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9091166000908152600660205260409020600101805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b60008164ffffffffff811115611dbc576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b64ffffffffff8316600090815260096020526040902054600160a060020a03169150811515611128576040805160e560020a62461bcd02815260206004820152602160248201527f4f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b6560448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a031660009081526002602052604090205460ff1690565b6000600160a060020a0382161515611edb576040805160e560020a62461bcd02815260206004820152601b60248201527f4f776e65722063616e2774206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b50600160a060020a03166000908152600a602052604090205490565b600054600160a060020a03163314611f47576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b8151611f5a906004906020850190613b96565b50805161171d906005906020840190613b96565b600054600160a060020a03163314611fbe576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461203d576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60035460ff161561204d57600080fd5b6003805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600054600160a060020a031690565b60035460ff16156120a457600080fd5b600854600160a060020a03163314806120c75750600054600160a060020a031633145b151561210b576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9091166000908152600660205260409020600101805461ffff90921660b060020a0277ffff0000000000000000000000000000000000000000000019909216919091179055565b60035460009060ff161561216b57600080fd5b815183511461217957600080fd5b5060005b825181101561171d576121be838281518110151561219757fe5b9060200190602002015183838151811015156121af57fe5b90602001906020020151612403565b60010161217d565b600154600160a060020a031690565b60408051808201909152600581527f4355544945000000000000000000000000000000000000000000000000000000602082015290565b64ffffffffff1660009081526006602052604090205490565b64ffffffffff1660009081526006602052604090206001015460b060020a900461ffff1690565b600854600160a060020a031681565b600160a060020a0382163314156122bc576040805160e560020a62461bcd02815260206004820152601160248201527f417070726f766520746f2063616c6c6572000000000000000000000000000000604482015290519081900360640190fd5b80156122f557336000908152600c60209081526040808320600160a060020a03861684529091529020805460ff19166001179055612321565b336000908152600c60209081526040808320600160a060020a03861684529091529020805460ff191690555b6040805182151581529051600160a060020a0384169133917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b60035460ff161561237757600080fd5b3360009081526002602052604090205460ff168061239f5750600054600160a060020a031633145b15156123e3576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b6123ed308361350c565b15156123f857600080fd5b611c9e308284613629565b60035460ff161561241357600080fd5b8064ffffffffff81111561245f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b600160a060020a03831615156124bf576040805160e560020a62461bcd02815260206004820152601760248201527f57726f6e672063757469652064657374696e6174696f6e000000000000000000604482015290519081900360640190fd5b6124c9338361350c565b151561251f576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c6572206973206e6f742061206375746965206f776e65720000000000604482015290519081900360640190fd5b61171d338484613629565b60008164ffffffffff811115612578576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b505064ffffffffff16600090815260096020526040902054600160a060020a031690565b60035460ff16156125ac57600080fd5b600854600160a060020a03163314806125cf5750600054600160a060020a031633145b1515612613576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9182166000908152600660205260409020600101805492909116650100000000000269ffffffffff000000000019909216919091179055565b600c60209081526000928352604080842090915290825290205460ff1681565b600054600160a060020a031633146126c2576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a03166000908152600260205260409020805460ff19169055565b600960205260009081526040902054600160a060020a031681565b600054600160a060020a0316331461274e576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a038116151561276357600080fd5b600160a060020a03166000908152600260205260409020805460ff19166001179055565b60035460ff161561279757600080fd5b8164ffffffffff8111156127e3576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b6127f585858564ffffffffff1661134f565b6127fe84613729565b156118cc5783600160a060020a031663f0b9e5ba8685856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561289b578181015183820152602001612883565b50505050905090810190601f1680156128c85780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156128e957600080fd5b505af11580156128fd573d6000803e3d6000fd5b505050506040513d602081101561291357600080fd5b50505050505050565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156129a25780601f10612977576101008083540402835291602001916129a2565b820191906000526020600020905b81548152906001019060200180831161298557829003601f168201915b505050505081565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093610f9e93612a4493830182828015612a3a5780601f10612a0f57610100808354040283529160200191612a3a565b820191906000526020600020905b815481529060010190602001808311612a1d57829003601f168201915b5050505050613731565b612abd612a56612a5b612a5687613757565b613731565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152612abd9390929091830182828015612a3a5780601f10612a0f57610100808354040283529160200191612a3a565b613a4c565b60035460009060ff1615612ad557600080fd5b612adf858561112e565b6040517f8f4ffcb1000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052306044840181905260806064850190815260848501879052600160a060020a038a1694638f4ffcb194938a93928a928a92919060a40184848082843782019150509650505050505050600060405180830381600087803b158015612b7757600080fd5b505af1158015612b8b573d6000803e3d6000fd5b50600198975050505050505050565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156129a25780601f10612977576101008083540402835291602001916129a2565b60035460009060ff1615612c0857600080fd5b5060005b815181101561171d57612c278383838151811015156121af57fe5b600101612c0c565b600080600080600080600080612c4489613ac3565b1515612c9a576040805160e560020a62461bcd02815260206004820152601060248201527f4375746965206e6f742065786973747300000000000000000000000000000000604482015290519081900360640190fd5b50505064ffffffffff95861660009081526006602052604090208054600190910154909781881697650100000000008304811697506a01000000000000000000008304811696506f01000000000000000000000000000000830416945061ffff60a060020a83048116945060b060020a9092049091169150565b612d1c613b52565b60035460ff1615612d2c57600080fd5b600854600160a060020a0316331480612d4f5750600054600160a060020a031633145b1515612d93576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a038a161515612df3576040805160e560020a62461bcd02815260206004820152601760248201527f526573746f726520746f207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b60075464ffffffffff8a161115612e54576040805160e560020a62461bcd02815260206004820152601c60248201527f437574696520726573746f7265206973206e6f7420616c6c6f77656400000000604482015290519081900360640190fd5b64ffffffffff808a166000908152600660205260409020600101541615612ec5576040805160e560020a62461bcd02815260206004820152601c60248201527f4375746965206f766572777269746520697320666f7262696464656e00000000604482015290519081900360640190fd5b610100604051908101604052808981526020018364ffffffffff1681526020018564ffffffffff1681526020018864ffffffffff1681526020018764ffffffffff1681526020018461ffff1681526020018661ffff168152602001600067ffffffffffffffff16815250905080600660008b64ffffffffff1664ffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548164ffffffffff021916908364ffffffffff16021790555060408201518160010160056101000a81548164ffffffffff021916908364ffffffffff160217905550606082015181600101600a6101000a81548164ffffffffff021916908364ffffffffff160217905550608082015181600101600f6101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160010160146101000a81548161ffff021916908361ffff16021790555060c08201518160010160166101000a81548161ffff021916908361ffff16021790555060e08201518160010160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505089600960008b64ffffffffff1664ffffffffff16815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550600a60008b600160a060020a0316600160a060020a031681526020019081526020016000206000815480929190600101919050555050505050505050505050565b60035460ff161561311057600080fd5b600854600160a060020a03163314806131335750600054600160a060020a031633145b1515613177576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff909116600090815260066020526040902055565b600160a060020a039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b60008054600160a060020a03163314613210576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561327157600080fd5b505af1158015613285573d6000803e3d6000fd5b505050506040513d602081101561329b57600080fd5b505190506000811115611c9e57604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0384169163a9059cbb9160448083019260209291908290030181600087803b15801561331057600080fd5b505af1158015613324573d6000803e3d6000fd5b505050506040513d602081101561153757600080fd5b64ffffffffff9081166000908152600660205260409020600101546501000000000090041690565b60035460ff161561337257600080fd5b600854600160a060020a03163314806133955750600054600160a060020a031633145b15156133d9576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b6133e3838261350c565b1515613439576040805160e560020a62461bcd02815260206004820152601160248201527f57726f6e67206375746965206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b61171d8183613533565b60035460ff161561345357600080fd5b600854600160a060020a03163314806134765750600054600160a060020a031633145b15156134ba576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9091166000908152600660205260409020600101805467ffffffffffffffff90921660c060020a0277ffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b64ffffffffff16600090815260096020526040902054600160a060020a0391821691161490565b64ffffffffff919091166000908152600b60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b60008061358383613ac3565b15156135d9576040805160e560020a62461bcd02815260206004820152601060248201527f4375746965206e6f742065786973747300000000000000000000000000000000604482015290519081900360640190fd5b5064ffffffffff8216600090815260096020526040902054600160a060020a0390811690841681148061361157506136118484613ae7565b8061362157506136218185613191565b949350505050565b600160a060020a038083166000818152600a602090815260408083208054600101905564ffffffffff8616835260099091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790558316156136d257600160a060020a0383166000908152600a60209081526040808320805460001901905564ffffffffff84168352600b9091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b81600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051808264ffffffffff16815260200191505060405180910390a3505050565b6000903b1190565b613739613c14565b50604080518082019091528151815260209182019181019190915290565b6040805160208101909152600080825260609190825b5050604080516020810190915260008152600a8085049406908115156137c7575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b816001141561380a575060408051808201909152600181527f31000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b816002141561384d575060408051808201909152600181527f32000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160031415613890575060408051808201909152600181527f33000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b81600414156138d3575060408051808201909152600181527f34000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160051415613916575060408051808201909152600181527f35000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160061415613959575060408051808201909152600181527f36000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b816007141561399c575060408051808201909152600181527f37000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b81600814156139df575060408051808201909152600181527f38000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160091415613a1e575060408051808201909152600181527f390000000000000000000000000000000000000000000000000000000000000060208201525b613a33613a2a82613731565b612abd85613731565b92506000851115613a435761376d565b50909392505050565b606080600083600001518560000151016040519080825280601f01601f191660200182016040528015613a89578160200160208202803883390190505b509150602082019050613aa58186602001518760000151613b0e565b845160208501518551613abb9284019190613b0e565b509392505050565b64ffffffffff16600090815260096020526040902054600160a060020a0316151590565b64ffffffffff166000908152600b6020526040902054600160a060020a0391821691161490565b60005b60208210613b33578251845260209384019390920191601f1990910190613b11565b50905182516020929092036101000a6000190180199091169116179052565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613bd757805160ff1916838001178555613c04565b82800160010185558215613c04579182015b82811115613c04578251825591602001919060010190613be9565b50613c10929150613c2b565b5090565b604080518082019091526000808252602082015290565b61105a91905b80821115613c105760008155600101613c3156004163636573732064656e6965640000000000000000000000000000000000000056616c75652063616e27742062652073746f72656420696e2034302062697473a165627a7a7230582084118b5bded503eb6ffb61d5b8aa6a61a8c9800148523b317643b0478c7378f00029

Deployed Bytecode

0x6080604052600436106102be5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102c057806302101162146102f657806306fdde0314610372578063081812fc146103fc578063095ea7b31461043057806310e9678b1461045457806313af40351461047357806318160ddd1461049457806323b872dd146104bb5780632917f162146104e55780632f745c591461051b5780633e6d4e121461053f5780633f4ba83a1461057b57806342842e0e146105905780634313b9e5146105ba57806346195c12146105d25780634a4b31e7146105f35780634e71e0c8146106585780634f6ccce71461066d57806351cff8d9146106855780635c975abb146106a657806362081c87146106bb5780636352211e146106e15780636d70f7ae146106f957806370a082311461071a57806379edfa7d1461073b578063819912a2146107d25780638456cb59146107f3578063893d20e81461080857806392255b5b1461081d5780639316c3e71461084357806393596c7b146108d157806395d89b41146108e6578063999d3947146108fb5780639c91ae201461091a578063a168d87314610939578063a22cb4651461094e578063a86ee74614610974578063a9059cbb1461099f578063a9de9e3a146109c3578063aa364eea146109db578063aad8e43114610a00578063ac8a584a14610a27578063b1d9549714610a48578063b3ab15fb14610a67578063b88d4fde14610a88578063c7047fa714610af7578063c87b56dd14610b0c578063cae9ca5114610b24578063d4d6d36614610b55578063e1f9d83b14610b6a578063e39bdfab14610bcd578063e6ef712b14610c35578063e7c973a514610c8b578063e985e9c514610cad578063f4f3b20014610cd4578063f6dfcff714610cf5578063fea4cfd514610d14578063ffc96ca414610d45575b005b3480156102cc57600080fd5b506102e2600160e060020a031960043516610d71565b604080519115158252519081900360200190f35b34801561030257600080fd5b5061031564ffffffffff60043516610fa4565b6040805198895264ffffffffff97881660208a015295871688870152938616606088015291909416608086015261ffff93841660a086015290921660c084015267ffffffffffffffff90911660e083015251908190036101000190f35b34801561037e57600080fd5b50610387611025565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103c15781810151838201526020016103a9565b50505050905090810190601f1680156103ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040857600080fd5b5061041460043561105d565b60408051600160a060020a039092168252519081900360200190f35b34801561043c57600080fd5b506102be600160a060020a036004351660243561112e565b34801561046057600080fd5b5061041464ffffffffff6004351661129a565b34801561047f57600080fd5b506102be600160a060020a03600435166112b5565b3480156104a057600080fd5b506104a9611349565b60408051918252519081900360200190f35b3480156104c757600080fd5b506102be600160a060020a036004358116906024351660443561134f565b3480156104f157600080fd5b5061050464ffffffffff6004351661153d565b6040805161ffff9092168252519081900360200190f35b34801561052757600080fd5b506104a9600160a060020a0360043516602435611564565b34801561054b57600080fd5b5061055e64ffffffffff6004351661162e565b6040805167ffffffffffffffff9092168252519081900360200190f35b34801561058757600080fd5b506102be61165b565b34801561059c57600080fd5b506102be600160a060020a03600435811690602435166044356116f1565b3480156105c657600080fd5b506102be600435611722565b3480156105de57600080fd5b506102be600160a060020a0360043516611801565b3480156105ff57600080fd5b5061063e600160a060020a036004351664ffffffffff60243581169060443581169061ffff6064358116916084359091169060a4359060c435166118d3565b6040805164ffffffffff9092168252519081900360200190f35b34801561066457600080fd5b506102be611b34565b34801561067957600080fd5b506104a9600435611bf5565b34801561069157600080fd5b506102be600160a060020a0360043516611c0e565b3480156106b257600080fd5b506102e2611ca3565b3480156106c757600080fd5b506102be64ffffffffff6004351661ffff60243516611cac565b3480156106ed57600080fd5b50610414600435611d6e565b34801561070557600080fd5b506102e2600160a060020a0360043516611e5b565b34801561072657600080fd5b506104a9600160a060020a0360043516611e79565b34801561074757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102be94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611ef79650505050505050565b3480156107de57600080fd5b506102be600160a060020a0360043516611f6e565b3480156107ff57600080fd5b506102be611fed565b34801561081457600080fd5b50610414612085565b34801561082957600080fd5b506102be64ffffffffff6004351661ffff60243516612094565b34801561084f57600080fd5b50604080516020600480358082013583810280860185019096528085526102be95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506121589650505050505050565b3480156108dd57600080fd5b506104146121c6565b3480156108f257600080fd5b506103876121d5565b34801561090757600080fd5b506104a964ffffffffff6004351661220c565b34801561092657600080fd5b5061050464ffffffffff60043516612225565b34801561094557600080fd5b5061041461224c565b34801561095a57600080fd5b506102be600160a060020a0360043516602435151561225b565b34801561098057600080fd5b506102be64ffffffffff60043516600160a060020a0360243516612367565b3480156109ab57600080fd5b506102be600160a060020a0360043516602435612403565b3480156109cf57600080fd5b5061041460043561252a565b3480156109e757600080fd5b506102be64ffffffffff6004358116906024351661259c565b348015610a0c57600080fd5b506102e2600160a060020a0360043581169060243516612652565b348015610a3357600080fd5b506102be600160a060020a0360043516612672565b348015610a5457600080fd5b5061041464ffffffffff600435166126e3565b348015610a7357600080fd5b506102be600160a060020a03600435166126fe565b348015610a9457600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526102be94600160a060020a0381358116956024803590921695604435953695608494019181908401838280828437509497506127879650505050505050565b348015610b0357600080fd5b5061038761291c565b348015610b1857600080fd5b506103876004356129aa565b348015610b3057600080fd5b506102e260048035600160a060020a0316906024803591604435918201910135612ac2565b348015610b6157600080fd5b50610387612b9a565b348015610b7657600080fd5b506040805160206004602480358281013584810280870186019097528086526102be968435600160a060020a031696369660449591949091019291829185019084908082843750949750612bf59650505050505050565b348015610bd957600080fd5b50610bec64ffffffffff60043516612c2f565b6040805197885264ffffffffff96871660208901529486168786015292851660608701529316608085015261ffff92831660a085015290911660c0830152519081900360e00190f35b348015610c4157600080fd5b506102be600160a060020a036004351664ffffffffff6024358116906044359060643581169060843581169061ffff60a43581169160c43581169160e43516906101043516612d14565b348015610c9757600080fd5b506102be64ffffffffff60043516602435613100565b348015610cb957600080fd5b506102e2600160a060020a0360043581169060243516613191565b348015610ce057600080fd5b506102be600160a060020a03600435166131bf565b348015610d0157600080fd5b5061063e64ffffffffff6004351661333a565b348015610d2057600080fd5b506102be600160a060020a036004358116906024351664ffffffffff60443516613362565b348015610d5157600080fd5b506102be64ffffffffff6004351667ffffffffffffffff60243516613443565b60007f6466353c00000000000000000000000000000000000000000000000000000000600160e060020a031983161480610dd457507f80ac58cd00000000000000000000000000000000000000000000000000000000600160e060020a03198316145b80610e825750604080517f746f6b656e5552492875696e7432353629000000000000000000000000000000815281519081900360110181207f73796d626f6c2829000000000000000000000000000000000000000000000000825282519182900360080182207f6e616d65282900000000000000000000000000000000000000000000000000008352925191829003600601909120600160e060020a03198581169190931890911891909116145b80610f565750604080517f746f6b656e4f664f776e65724279496e64657828616464726573732c2075696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015281519081900360250181207f746f6b656e4279496e6465782875696e74323536290000000000000000000000825282519182900360150182207f746f74616c537570706c792829000000000000000000000000000000000000008352925191829003600d01909120600160e060020a03198581169190931890911891909116145b80610f9e5750604080517f737570706f727473496e7465726661636528627974657334290000000000000081529051908190036019019020600160e060020a03198381169116145b92915050565b6006602052600090815260409020805460019091015464ffffffffff808216916501000000000081048216916a010000000000000000000082048116916f0100000000000000000000000000000081049091169061ffff60a060020a820481169160b060020a81049091169067ffffffffffffffff60c060020a9091041688565b60408051808201909152601081527f426c6f636b636861696e4375746965730000000000000000000000000000000060208201525b90565b60008164ffffffffff8111156110ab576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b600754831115611105576040805160e560020a62461bcd02815260206004820152601060248201527f4375746965206e6f742065786973747300000000000000000000000000000000604482015290519081900360640190fd5b64ffffffffff83166000908152600b6020526040902054600160a060020a031691505b50919050565b60035460ff161561113e57600080fd5b8064ffffffffff81111561118a576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b611194338361350c565b15156111ea576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c6572206973206e6f742061206375746965206f776e65720000000000604482015290519081900360640190fd5b33600160a060020a038416141561124b576040805160e560020a62461bcd02815260206004820152601960248201527f417070726f76616c20746f2063757272656e74206f776e657200000000000000604482015290519081900360640190fd5b6112558284613533565b604080518381529051600160a060020a0385169133917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a3505050565b600b60205260009081526040902054600160a060020a031681565b600054600160a060020a03163314611305576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a038116151561131a57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60075490565b60035460ff161561135f57600080fd5b8064ffffffffff8111156113ab576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b600160a060020a038316151561140b576040805160e560020a62461bcd02815260206004820152601760248201527f57726f6e672063757469652064657374696e6174696f6e000000000000000000604482015290519081900360640190fd5b600160a060020a03831630141561146c576040805160e560020a62461bcd02815260206004820152601760248201527f57726f6e672063757469652064657374696e6174696f6e000000000000000000604482015290519081900360640190fd5b6114763383613577565b15156114cc576040805160e560020a62461bcd02815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604482015290519081900360640190fd5b6114d6848361350c565b151561152c576040805160e560020a62461bcd02815260206004820152601160248201527f57726f6e67206375746965206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b611537848484613629565b50505050565b64ffffffffff1660009081526006602052604090206001015460a060020a900461ffff1690565b60008080600160a060020a03851615156115c8576040805160e560020a62461bcd02815260206004820152601260248201527f4f776e65722063616e2774206265203078300000000000000000000000000000604482015290519081900360640190fd5b506000905060015b6115d8611349565b64ffffffffff821611611621576115ef858261350c565b1561161957838264ffffffffff161415611612578064ffffffffff169250611626565b6001909101905b6001016115d0565b600080fd5b505092915050565b64ffffffffff1660009081526006602052604090206001015460c060020a900467ffffffffffffffff1690565b600054600160a060020a031633146116ab576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60035460ff1615156116bc57600080fd5b6003805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60035460ff161561170157600080fd5b61171d8383836020604051908101604052806000815250612787565b505050565b600854600160a060020a03163314806117455750600054600160a060020a031633145b1515611789576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60035460ff16151561179a57600080fd5b600754156117f2576040805160e560020a62461bcd02815260206004820152601c60248201527f436f6e747261637420616c726561647920696e697469616c697a656400000000604482015290519081900360640190fd5b6007556003805460ff19169055565b600054600160a060020a03163314611851576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b604080517fa22cb465000000000000000000000000000000000000000000000000000000008152336004820152600160248201529051600160a060020a0383169163a22cb46591604480830192600092919082900301818387803b1580156118b857600080fd5b505af11580156118cc573d6000803e3d6000fd5b5050505050565b60006118dd613b52565b600354600090819060ff16156118f257600080fd5b600854600160a060020a03163314806119155750600054600160a060020a031633145b1515611959576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b604080516101008101825287815264ffffffffff808816602083015260009282018390528c811660608301528b8116608083015261ffff808b1660a08401528b1660c083015260e0820192909252600780546001019081905590945092508211156119c357600080fd5b5064ffffffffff8181166000908152600660209081526040808320865181559186015160019092018054918701516060880151608089015160a08a015160c08b015160e08c015164ffffffffff19909716978a169790971769ffffffffff0000000000191665010000000000948a1694909402939093176effffffffff0000000000000000000019166a0100000000000000000000928916929092029190911773ffffffffff00000000000000000000000000000019166f0100000000000000000000000000000091909716029590951775ffff0000000000000000000000000000000000000000191660a060020a61ffff968716021777ffff00000000000000000000000000000000000000000000191660b060020a95909316949094029190911777ffffffffffffffffffffffffffffffffffffffffffffffff1660c060020a67ffffffffffffffff90921691909102179091558190611b26908c83613629565b9a9950505050505050505050565b600154600160a060020a03163314611b84576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60015460008054604051600160a060020a0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b6007546000908210611c0657600080fd5b506000190190565b600054600160a060020a03163314611c5e576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600030311115611ca057604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015611c9e573d6000803e3d6000fd5b505b50565b60035460ff1681565b60035460ff1615611cbc57600080fd5b600854600160a060020a0316331480611cdf5750600054600160a060020a031633145b1515611d23576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9091166000908152600660205260409020600101805461ffff90921660a060020a0275ffff000000000000000000000000000000000000000019909216919091179055565b60008164ffffffffff811115611dbc576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b64ffffffffff8316600090815260096020526040902054600160a060020a03169150811515611128576040805160e560020a62461bcd02815260206004820152602160248201527f4f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b6560448201527f6e00000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a031660009081526002602052604090205460ff1690565b6000600160a060020a0382161515611edb576040805160e560020a62461bcd02815260206004820152601b60248201527f4f776e65722063616e2774206265207a65726f20616464726573730000000000604482015290519081900360640190fd5b50600160a060020a03166000908152600a602052604090205490565b600054600160a060020a03163314611f47576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b8151611f5a906004906020850190613b96565b50805161171d906005906020840190613b96565b600054600160a060020a03163314611fbe576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461203d576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b60035460ff161561204d57600080fd5b6003805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600054600160a060020a031690565b60035460ff16156120a457600080fd5b600854600160a060020a03163314806120c75750600054600160a060020a031633145b151561210b576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9091166000908152600660205260409020600101805461ffff90921660b060020a0277ffff0000000000000000000000000000000000000000000019909216919091179055565b60035460009060ff161561216b57600080fd5b815183511461217957600080fd5b5060005b825181101561171d576121be838281518110151561219757fe5b9060200190602002015183838151811015156121af57fe5b90602001906020020151612403565b60010161217d565b600154600160a060020a031690565b60408051808201909152600581527f4355544945000000000000000000000000000000000000000000000000000000602082015290565b64ffffffffff1660009081526006602052604090205490565b64ffffffffff1660009081526006602052604090206001015460b060020a900461ffff1690565b600854600160a060020a031681565b600160a060020a0382163314156122bc576040805160e560020a62461bcd02815260206004820152601160248201527f417070726f766520746f2063616c6c6572000000000000000000000000000000604482015290519081900360640190fd5b80156122f557336000908152600c60209081526040808320600160a060020a03861684529091529020805460ff19166001179055612321565b336000908152600c60209081526040808320600160a060020a03861684529091529020805460ff191690555b6040805182151581529051600160a060020a0384169133917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b60035460ff161561237757600080fd5b3360009081526002602052604090205460ff168061239f5750600054600160a060020a031633145b15156123e3576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b6123ed308361350c565b15156123f857600080fd5b611c9e308284613629565b60035460ff161561241357600080fd5b8064ffffffffff81111561245f576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b600160a060020a03831615156124bf576040805160e560020a62461bcd02815260206004820152601760248201527f57726f6e672063757469652064657374696e6174696f6e000000000000000000604482015290519081900360640190fd5b6124c9338361350c565b151561251f576040805160e560020a62461bcd02815260206004820152601b60248201527f43616c6c6572206973206e6f742061206375746965206f776e65720000000000604482015290519081900360640190fd5b61171d338484613629565b60008164ffffffffff811115612578576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b505064ffffffffff16600090815260096020526040902054600160a060020a031690565b60035460ff16156125ac57600080fd5b600854600160a060020a03163314806125cf5750600054600160a060020a031633145b1515612613576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9182166000908152600660205260409020600101805492909116650100000000000269ffffffffff000000000019909216919091179055565b600c60209081526000928352604080842090915290825290205460ff1681565b600054600160a060020a031633146126c2576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a03166000908152600260205260409020805460ff19169055565b600960205260009081526040902054600160a060020a031681565b600054600160a060020a0316331461274e576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a038116151561276357600080fd5b600160a060020a03166000908152600260205260409020805460ff19166001179055565b60035460ff161561279757600080fd5b8164ffffffffff8111156127e3576040805160e560020a62461bcd0281526020600482018190526024820152600080516020613c66833981519152604482015290519081900360640190fd5b6127f585858564ffffffffff1661134f565b6127fe84613729565b156118cc5783600160a060020a031663f0b9e5ba8685856040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561289b578181015183820152602001612883565b50505050905090810190601f1680156128c85780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1580156128e957600080fd5b505af11580156128fd573d6000803e3d6000fd5b505050506040513d602081101561291357600080fd5b50505050505050565b6004805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156129a25780601f10612977576101008083540402835291602001916129a2565b820191906000526020600020905b81548152906001019060200180831161298557829003601f168201915b505050505081565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093610f9e93612a4493830182828015612a3a5780601f10612a0f57610100808354040283529160200191612a3a565b820191906000526020600020905b815481529060010190602001808311612a1d57829003601f168201915b5050505050613731565b612abd612a56612a5b612a5687613757565b613731565b60058054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152612abd9390929091830182828015612a3a5780601f10612a0f57610100808354040283529160200191612a3a565b613a4c565b60035460009060ff1615612ad557600080fd5b612adf858561112e565b6040517f8f4ffcb1000000000000000000000000000000000000000000000000000000008152336004820181815260248301879052306044840181905260806064850190815260848501879052600160a060020a038a1694638f4ffcb194938a93928a928a92919060a40184848082843782019150509650505050505050600060405180830381600087803b158015612b7757600080fd5b505af1158015612b8b573d6000803e3d6000fd5b50600198975050505050505050565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156129a25780601f10612977576101008083540402835291602001916129a2565b60035460009060ff1615612c0857600080fd5b5060005b815181101561171d57612c278383838151811015156121af57fe5b600101612c0c565b600080600080600080600080612c4489613ac3565b1515612c9a576040805160e560020a62461bcd02815260206004820152601060248201527f4375746965206e6f742065786973747300000000000000000000000000000000604482015290519081900360640190fd5b50505064ffffffffff95861660009081526006602052604090208054600190910154909781881697650100000000008304811697506a01000000000000000000008304811696506f01000000000000000000000000000000830416945061ffff60a060020a83048116945060b060020a9092049091169150565b612d1c613b52565b60035460ff1615612d2c57600080fd5b600854600160a060020a0316331480612d4f5750600054600160a060020a031633145b1515612d93576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b600160a060020a038a161515612df3576040805160e560020a62461bcd02815260206004820152601760248201527f526573746f726520746f207a65726f2061646472657373000000000000000000604482015290519081900360640190fd5b60075464ffffffffff8a161115612e54576040805160e560020a62461bcd02815260206004820152601c60248201527f437574696520726573746f7265206973206e6f7420616c6c6f77656400000000604482015290519081900360640190fd5b64ffffffffff808a166000908152600660205260409020600101541615612ec5576040805160e560020a62461bcd02815260206004820152601c60248201527f4375746965206f766572777269746520697320666f7262696464656e00000000604482015290519081900360640190fd5b610100604051908101604052808981526020018364ffffffffff1681526020018564ffffffffff1681526020018864ffffffffff1681526020018764ffffffffff1681526020018461ffff1681526020018661ffff168152602001600067ffffffffffffffff16815250905080600660008b64ffffffffff1664ffffffffff1681526020019081526020016000206000820151816000015560208201518160010160006101000a81548164ffffffffff021916908364ffffffffff16021790555060408201518160010160056101000a81548164ffffffffff021916908364ffffffffff160217905550606082015181600101600a6101000a81548164ffffffffff021916908364ffffffffff160217905550608082015181600101600f6101000a81548164ffffffffff021916908364ffffffffff16021790555060a08201518160010160146101000a81548161ffff021916908361ffff16021790555060c08201518160010160166101000a81548161ffff021916908361ffff16021790555060e08201518160010160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505089600960008b64ffffffffff1664ffffffffff16815260200190815260200160002060006101000a815481600160a060020a030219169083600160a060020a03160217905550600a60008b600160a060020a0316600160a060020a031681526020019081526020016000206000815480929190600101919050555050505050505050505050565b60035460ff161561311057600080fd5b600854600160a060020a03163314806131335750600054600160a060020a031633145b1515613177576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff909116600090815260066020526040902055565b600160a060020a039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b60008054600160a060020a03163314613210576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561327157600080fd5b505af1158015613285573d6000803e3d6000fd5b505050506040513d602081101561329b57600080fd5b505190506000811115611c9e57604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051600160a060020a0384169163a9059cbb9160448083019260209291908290030181600087803b15801561331057600080fd5b505af1158015613324573d6000803e3d6000fd5b505050506040513d602081101561153757600080fd5b64ffffffffff9081166000908152600660205260409020600101546501000000000090041690565b60035460ff161561337257600080fd5b600854600160a060020a03163314806133955750600054600160a060020a031633145b15156133d9576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b6133e3838261350c565b1515613439576040805160e560020a62461bcd02815260206004820152601160248201527f57726f6e67206375746965206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b61171d8183613533565b60035460ff161561345357600080fd5b600854600160a060020a03163314806134765750600054600160a060020a031633145b15156134ba576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020613c46833981519152604482015290519081900360640190fd5b64ffffffffff9091166000908152600660205260409020600101805467ffffffffffffffff90921660c060020a0277ffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b64ffffffffff16600090815260096020526040902054600160a060020a0391821691161490565b64ffffffffff919091166000908152600b60205260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b60008061358383613ac3565b15156135d9576040805160e560020a62461bcd02815260206004820152601060248201527f4375746965206e6f742065786973747300000000000000000000000000000000604482015290519081900360640190fd5b5064ffffffffff8216600090815260096020526040902054600160a060020a0390811690841681148061361157506136118484613ae7565b8061362157506136218185613191565b949350505050565b600160a060020a038083166000818152600a602090815260408083208054600101905564ffffffffff8616835260099091529020805473ffffffffffffffffffffffffffffffffffffffff191690911790558316156136d257600160a060020a0383166000908152600a60209081526040808320805460001901905564ffffffffff84168352600b9091529020805473ffffffffffffffffffffffffffffffffffffffff191690555b81600160a060020a031683600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051808264ffffffffff16815260200191505060405180910390a3505050565b6000903b1190565b613739613c14565b50604080518082019091528151815260209182019181019190915290565b6040805160208101909152600080825260609190825b5050604080516020810190915260008152600a8085049406908115156137c7575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b816001141561380a575060408051808201909152600181527f31000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b816002141561384d575060408051808201909152600181527f32000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160031415613890575060408051808201909152600181527f33000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b81600414156138d3575060408051808201909152600181527f34000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160051415613916575060408051808201909152600181527f35000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160061415613959575060408051808201909152600181527f36000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b816007141561399c575060408051808201909152600181527f37000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b81600814156139df575060408051808201909152600181527f38000000000000000000000000000000000000000000000000000000000000006020820152613a1e565b8160091415613a1e575060408051808201909152600181527f390000000000000000000000000000000000000000000000000000000000000060208201525b613a33613a2a82613731565b612abd85613731565b92506000851115613a435761376d565b50909392505050565b606080600083600001518560000151016040519080825280601f01601f191660200182016040528015613a89578160200160208202803883390190505b509150602082019050613aa58186602001518760000151613b0e565b845160208501518551613abb9284019190613b0e565b509392505050565b64ffffffffff16600090815260096020526040902054600160a060020a0316151590565b64ffffffffff166000908152600b6020526040902054600160a060020a0391821691161490565b60005b60208210613b33578251845260209384019390920191601f1990910190613b11565b50905182516020929092036101000a6000190180199091169116179052565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613bd757805160ff1916838001178555613c04565b82800160010185558215613c04579182015b82811115613c04578251825591602001919060010190613be9565b50613c10929150613c2b565b5090565b604080518082019091526000808252602082015290565b61105a91905b80821115613c105760008155600101613c3156004163636573732064656e6965640000000000000000000000000000000000000056616c75652063616e27742062652073746f72656420696e2034302062697473a165627a7a7230582084118b5bded503eb6ffb61d5b8aa6a61a8c9800148523b317643b0478c7378f00029

Deployed Bytecode Sourcemap

139:23400:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5236:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5236:377:0;-1:-1:-1;;;;;;5236:377:0;;;;;;;;;;;;;;;;;;;;;;;2784:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2784:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;335:89:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;335:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;335:89:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14590:219:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14590:219:0;;;;;;;;;-1:-1:-1;;;;;14590:219:0;;;;;;;;;;;;;;12632:507;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12632:507:0;-1:-1:-1;;;;;12632:507:0;;;;;;;3618:55;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3618:55:0;;;;;;;992:146:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;992:146:1;-1:-1:-1;;;;;992:146:1;;;;;5728:82:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5728:82:0;;;;;;;;;;;;;;;;;;;;10361:619;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10361:619:0;-1:-1:-1;;;;;10361:619:0;;;;;;;;;;;;22745:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22745:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;7815:464;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7815:464:0;-1:-1:-1;;;;;7815:464:0;;;;;;;23291:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23291:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;852:92:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;852:92:3;;;;9784:154:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9784:154:0;-1:-1:-1;;;;;9784:154:0;;;;;;;;;;;;4575:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4575:176:0;;;;;2495:141:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2495:141:1;-1:-1:-1;;;;;2495:141:1;;;;;19477:977:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19477:977:0;-1:-1:-1;;;;;19477:977:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1252:215:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1252:215:1;;;;7078:137:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7078:137:0;;;;;1943:169:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1943:169:1;-1:-1:-1;;;;;1943:169:1;;;;;261:26:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;261:26:3;;;;22869:152:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22869:152:0;;;;;;;;;;;6296:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6296:238:0;;;;;1473:108:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1473:108:1;-1:-1:-1;;;;;1473:108:1;;;;;5982:181:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5982:181:0;-1:-1:-1;;;;;5982:181:0;;;;;1082:198:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1082:198:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1082:198:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1082:198:2;;;;-1:-1:-1;1082:198:2;-1:-1:-1;1082:198:2;;-1:-1:-1;1082:198:2;;;;;;;;-1:-1:-1;1082:198:2;;-1:-1:-1;1082:198:2;;-1:-1:-1;;;;;;;1082:198:2;4757:101:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4757:101:0;-1:-1:-1;;;;;4757:101:0;;;;;680:90:3;;8:9:-1;5:2;;;30:1;27;20:12;5:2;680:90:3;;;;898:88:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;898:88:1;;;;23145:140:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23145:140:0;;;;;;;;;;;11822:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11822:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11822:221:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11822:221:0;;;;-1:-1:-1;11822:221:0;-1:-1:-1;11822:221:0;;-1:-1:-1;11822:221:0;;;;;;;;;-1:-1:-1;11822:221:0;;-1:-1:-1;11822:221:0;;-1:-1:-1;;;;;;;11822:221:0;1144:102:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1144:102:1;;;;492:80:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;492:80:2;;;;22215:103:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22215:103:0;;;;;;;23027:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23027:112:0;;;;;;;2920:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2920:26:0;;;;13939:385;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13939:385:0;-1:-1:-1;;;;;13939:385:0;;;;;;;;;18638:201;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18638:201:0;;;;;-1:-1:-1;;;;;18638:201:0;;;;;11380:436;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11380:436:0;-1:-1:-1;;;;;11380:436:0;;;;;;;6672:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6672:161:0;;;;;22579:160;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22579:160:0;;;;;;;;;;;;3978:74;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3978:74:0;-1:-1:-1;;;;;3978:74:0;;;;;;;;;;1751:111:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1751:111:1;-1:-1:-1;;;;;1751:111:1;;;;;3122:52:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3122:52:0;;;;;;;1587:158:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1587:158:1;-1:-1:-1;;;;;1587:158:1;;;;;9111:322:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9111:322:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9111:322:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9111:322:0;;-1:-1:-1;9111:322:0;;-1:-1:-1;;;;;;;9111:322:0;134:71:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;134:71:2;;;;845:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;845:231:2;;;;;13359:265:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13359:265:0;;;;-1:-1:-1;;;;;13359:265:0;;;;;;;;;;;;;;;;211:40:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;211:40:2;;;;12049:175:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12049:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12049:175:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12049:175:0;;-1:-1:-1;12049:175:0;;-1:-1:-1;;;;;;;12049:175:0;21608:601;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21608:601:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20552:924;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20552:924:0;-1:-1:-1;;;;;20552:924:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22324:121;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22324:121:0;;;;;;;;;15106:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15106:151:0;-1:-1:-1;;;;;15106:151:0;;;;;;;;;;2182:242:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2182:242:1;-1:-1:-1;;;;;2182:242:1;;;;;22451:122:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22451:122:0;;;;;;;13145:208;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13145:208:0;-1:-1:-1;;;;;13145:208:0;;;;;;;;;;;;;;23405:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23405:132:0;;;;;;;;;;;5236:377;5306:4;5337:25;-1:-1:-1;;;;;;5337:25:0;;;;:62;;-1:-1:-1;5374:25:0;-1:-1:-1;;;;;;5374:25:0;;;5337:62;:133;;;-1:-1:-1;2251:30:0;;;;;;;;;;;;;;;;2211:21;;;;;;;;;;;;;2173:19;;;;;;;;;;;;;;-1:-1:-1;;;;;;5421:49:0;;;2166:67;;;;:116;;;5421:49;;;;;5337:133;:196;;;-1:-1:-1;2466:50:0;;;;;;;;;;;;;;;;;;;;;2413:34;;;;;;;;;;;;;2368:26;;;;;;;;;;;;;;-1:-1:-1;;;;;;5482:51:0;;;2361:87;;;;:156;;;5482:51;;;;;5337:196;:269;;;-1:-1:-1;5567:38:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5545:61:0;;;;;;5337:269;5322:284;5236:377;-1:-1:-1;;5236:377:0:o;2784:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2784:39:0;;;;;-1:-1:-1;;;2784:39:0;;;;;;;-1:-1:-1;;;2784:39:0;;;;;:::o;335:89:2:-;392:25;;;;;;;;;;;;;;;;;335:89;;:::o;14590:219:0:-;14682:7;14663:8;4221:12;4211:22;;;4203:67;;;;;-1:-1:-1;;;;;4203:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:67:0;;;;;;;;;;;;;;;14721:5;;14709:17;;;14701:46;;;;;-1:-1:-1;;;;;14701:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14764:38;;;;;;;:20;:38;;;;;;-1:-1:-1;;;;;14764:38:0;;-1:-1:-1;4280:1:0;14590:219;;;;:::o;12632:507::-;430:6:3;;;;429:7;421:16;;;;;;12721:8:0;4221:12;4211:22;;;4203:67;;;;;-1:-1:-1;;;;;4203:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:67:0;;;;;;;;;;;;;;;12808:38;12817:10;12836:8;12808;:38::i;:::-;12800:78;;;;;;;-1:-1:-1;;;;;12800:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12896:10;-1:-1:-1;;;;;12896:17:0;;;;12888:55;;;;;-1:-1:-1;;;;;12888:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13018:31;13034:8;13045:3;13018:8;:31::i;:::-;13097:35;;;;;;;;-1:-1:-1;;;;;13097:35:0;;;13106:10;;13097:35;;;;;;;;;443:1:3;12632:507:0;;:::o;3618:55::-;;;;;;;;;;;;-1:-1:-1;;;;;3618:55:0;;:::o;992:146:1:-;510:12;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1066:23:1;;;;1058:32;;;;;;1100:19;:31;;-1:-1:-1;;1100:31:1;-1:-1:-1;;;;;1100:31:1;;;;;;;;;;992:146::o;5728:82:0:-;5798:5;;5728:82;:::o;10361:619::-;430:6:3;;;;429:7;421:16;;;;;;10470:8:0;4221:12;4211:22;;;4203:67;;;;;-1:-1:-1;;;;;4203:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10498:17:0;;;;10490:53;;;;;-1:-1:-1;;;;;10490:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10561:20:0;;10576:4;10561:20;;10553:56;;;;;-1:-1:-1;;;;;10553:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10678:48;10697:10;10716:8;10678:18;:48::i;:::-;10670:93;;;;;;;-1:-1:-1;;;;;10670:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10781:33;10790:5;10804:8;10781;:33::i;:::-;10773:63;;;;;;;-1:-1:-1;;;;;10773:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10934:39;10944:5;10951:3;10963:8;10934:9;:39::i;:::-;443:1:3;10361:619:0;;;:::o;22745:118::-;22831:11;;22806:6;22831:11;;;:6;:11;;;;;:25;;;-1:-1:-1;;;22831:25:0;;;;;22745:118::o;7815:464::-;7899:15;;;-1:-1:-1;;;;;7934:13:0;;;;7926:44;;;;;-1:-1:-1;;;;;7926:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7995:1:0;;-1:-1:-1;8022:1:0;8006:249;8030:13;:11;:13::i;:::-;8025:18;;;;8006:249;;8068:19;8077:6;8085:1;8068:8;:19::i;:::-;8064:181;;;8120:6;8111:5;:15;;;8107:124;;;8157:1;8150:8;;;;;;8107:124;8205:7;;;;;8107:124;8045:3;;8006:249;;;8264:8;;;7815:464;;;;;;;:::o;23291:108::-;23372:11;;23347:6;23372:11;;;:6;:11;;;;;:20;;;-1:-1:-1;;;23372:20:0;;;;;23291:108::o;852:92:3:-;510:12:1;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;582:6:3;;;;574:15;;;;;;;;905:6;:14;;-1:-1:-1;;905:14:3;;;930:9;;;;914:5;;930:9;852:92::o;9784:154:0:-;430:6:3;;;;429:7;421:16;;;;;;9889:42:0;9906:5;9913:3;9918:8;9889:42;;;;;;;;;;;;;:16;:42::i;:::-;9784:154;;;:::o;4575:176::-;4344:11;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;582:6:3;;;;574:15;;;;;;;;4653:5:0;;:10;4645:51;;;;;-1:-1:-1;;;;;4645:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4706:5;:14;4730:6;:14;;-1:-1:-1;;4730:14:0;;;4575:176::o;2495:141:1:-;510:12;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;2579:50;;;;;;2612:10;2579:50;;;;2624:4;2579:50;;;;;;-1:-1:-1;;;;;2579:32:1;;;;;:50;;;;;-1:-1:-1;;2579:50:1;;;;;;;-1:-1:-1;2579:32:1;:50;;;5:2:-1;;;;30:1;27;20:12;5:2;2579:50:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2579:50:1;;;;2495:141;:::o;19477:977:0:-;19725:6;19743:19;;:::i;:::-;430:6:3;;20071:21:0;;;;430:6:3;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;19765:278;;;;;;;;;;;;;;;;;;;-1:-1:-1;19765:278:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20054:5;:7;;;;;;;;19765:278;;-1:-1:-1;20054:7:0;-1:-1:-1;20163:29:0;;;20155:38;;;;;;-1:-1:-1;20255:18:0;;;;;;;;:6;:18;;;;;;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20255:27:0;;;;;;;;;;-1:-1:-1;;20255:27:0;;;;;;;;;;;;;-1:-1:-1;;20255:27:0;;;;;;;;;;;;;-1:-1:-1;;20255:27:0;;;;;;;;;;;-1:-1:-1;;20255:27:0;-1:-1:-1;;;20255:27:0;;;;;;-1:-1:-1;;20255:27:0;-1:-1:-1;;;20255:27:0;;;;;;;;;;;;;;-1:-1:-1;;;20255:27:0;;;;;;;;;;;;:18;;20387:32;;20400:6;20255:18;20387:9;:32::i;:::-;20437:10;19477:977;-1:-1:-1;;;;;;;;;;19477:977:0:o;1252:215:1:-;624:19;;-1:-1:-1;;;;;624:19:1;610:10;:33;602:59;;;;;-1:-1:-1;;;;;602:59:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;602:59:1;;;;;;;;;;;;;;;1354:19;;;1340:12;;1319:55;;-1:-1:-1;;;;;1354:19:1;;;;1340:12;;;;1319:55;;;1399:19;;;;1384:34;;-1:-1:-1;;1384:34:1;;;-1:-1:-1;;;;;1399:19:1;;1384:34;;;;1428:32;;;1252:215::o;7078:137:0:-;7175:5;;7139:7;;7166:14;;7158:23;;;;;;-1:-1:-1;;;7198:10:0;;7078:137::o;1943:169:1:-;510:12;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;2037:1;2021:4;2013:21;:25;2009:97;;;2054:41;;-1:-1:-1;;;;;2054:18:1;;;2081:4;2073:21;2054:41;;;;;;;;;2073:21;2054:18;:41;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2054:41:1;2009:97;1943:169;:::o;261:26:3:-;;;;;;:::o;22869:152:0:-;430:6:3;;;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;22972:11;;;;;;;;:6;:11;;;;;:25;;:42;;;;;;-1:-1:-1;;;22972:42:0;-1:-1:-1;;22972:42:0;;;;;;;;;22869:152::o;6296:238::-;6384:13;6365:8;4221:12;4211:22;;;4203:67;;;;;-1:-1:-1;;;;;4203:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:67:0;;;;;;;;;;;;;;;6417:35;;;;;;;:17;:35;;;;;;-1:-1:-1;;;;;6417:35:0;;-1:-1:-1;6470:19:0;;;6462:65;;;;;-1:-1:-1;;;;;6462:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:108:1;-1:-1:-1;;;;;1552:22:1;1529:4;1552:22;;;:15;:22;;;;;;;;;1473:108::o;5982:181:0:-;6040:7;-1:-1:-1;;;;;6067:13:0;;;;6059:53;;;;;-1:-1:-1;;;;;6059:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6129:27:0;;;;;:19;:27;;;;;;;5982:181::o;1082:198:2:-;510:12:1;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;1187:38:2;;;;:17;;:38;;;;;:::i;:::-;-1:-1:-1;1235:38:2;;;;:17;;:38;;;;;:::i;4757:101:0:-;510:12:1;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;4825:11:0;:26;;-1:-1:-1;;4825:26:0;-1:-1:-1;;;;;4825:26:0;;;;;;;;;;4757:101::o;680:90:3:-;510:12:1;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;430:6:3;;;;429:7;421:16;;;;;;734:6;:13;;-1:-1:-1;;734:13:3;743:4;734:13;;;758:7;;;;734:6;;758:7;680:90::o;898:88:1:-;941:7;967:12;-1:-1:-1;;;;;967:12:1;898:88;:::o;23145:140:0:-;430:6:3;;;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;23242:11;;;;;;;;:6;:11;;;;;:22;;:36;;;;;;-1:-1:-1;;;23242:36:0;-1:-1:-1;;23242:36:0;;;;;;;;;23145:140::o;11822:221::-;430:6:3;;11954::0;;430::3;;429:7;421:16;;;;;;11925:13:0;;11912:9;;:26;11904:35;;;;;;-1:-1:-1;11963:1:0;11949:88;11970:2;:9;11966:1;:13;11949:88;;;12000:26;12009:2;12012:1;12009:5;;;;;;;;;;;;;;;;;;12016:6;12023:1;12016:9;;;;;;;;;;;;;;;;;;12000:8;:26::i;:::-;11981:3;;11949:88;;1144:102:1;1220:19;;-1:-1:-1;;;;;1220:19:1;1144:102;:::o;492:80:2:-;551:14;;;;;;;;;;;;;;;;;492:80;:::o;22215:103:0:-;22294:11;;22268:7;22294:11;;;:6;:11;;;;;:17;;22215:103::o;23027:112::-;23110:11;;23085:6;23110:11;;;:6;:11;;;;;:22;;;-1:-1:-1;;;23110:22:0;;;;;23027:112::o;2920:26::-;;;-1:-1:-1;;;;;2920:26:0;;:::o;13939:385::-;-1:-1:-1;;;;;14028:23:0;;14041:10;14028:23;;14020:53;;;;;-1:-1:-1;;;;;14020:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14088:9;14084:171;;;14134:10;14113:32;;;;:20;:32;;;;;;;;-1:-1:-1;;;;;14113:43:0;;;;;;;;;:50;;-1:-1:-1;;14113:50:0;14159:4;14113:50;;;14084:171;;;14222:10;14201:32;;;;:20;:32;;;;;;;;-1:-1:-1;;;;;14201:43:0;;;;;;;;;14194:50;;-1:-1:-1;;14194:50:0;;;14084:171;14269:48;;;;;;;;;;-1:-1:-1;;;;;14269:48:0;;;14284:10;;14269:48;;;;;;;;;13939:385;;:::o;18638:201::-;430:6:3;;;;429:7;421:16;;;;;;743:10:1;727:27;;;;:15;:27;;;;;;;;;:57;;-1:-1:-1;772:12:1;;-1:-1:-1;;;;;772:12:1;758:10;:26;727:57;719:83;;;;;;;-1:-1:-1;;;;;719:83:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;719:83:1;;;;;;;;;;;;;;;18760:24:0;18769:4;18775:8;18760;:24::i;:::-;18752:33;;;;;;;;18795:37;18805:4;18811:10;18823:8;18795:9;:37::i;11380:436::-;430:6:3;;;;429:7;421:16;;;;;;11470:8:0;4221:12;4211:22;;;4203:67;;;;;-1:-1:-1;;;;;4203:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11498:17:0;;;;11490:53;;;;;-1:-1:-1;;;;;11490:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11607:38;11616:10;11635:8;11607;:38::i;:::-;11599:78;;;;;;;-1:-1:-1;;;;;11599:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11765:44;11775:10;11787:3;11799:8;11765:9;:44::i;6672:161::-;6765:7;6746:8;4221:12;4211:22;;;4203:67;;;;;-1:-1:-1;;;;;4203:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:67:0;;;;;;;;;;;;;;;-1:-1:-1;;6791:35:0;;;;;;:17;:35;;;;;;-1:-1:-1;;;;;6791:35:0;;6672:161::o;22579:160::-;430:6:3;;;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;22686:11;;;;;;;;:6;:11;;;;;:27;;:46;;;;;;;;-1:-1:-1;;22686:46:0;;;;;;;;;22579:160::o;3978:74::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1751:111:1:-;510:12;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1828:26:1;;;;;:15;:26;;;;;1821:34;;-1:-1:-1;;1821:34:1;;;1751:111::o;3122:52:0:-;;;;;;;;;;;;-1:-1:-1;;;;;3122:52:0;;:::o;1587:158:1:-;510:12;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;1665:26:1;;;;1657:35;;;;;;-1:-1:-1;;;;;1702:29:1;;;;;:15;:29;;;;;:36;;-1:-1:-1;;1702:36:1;1734:4;1702:36;;;1587:158::o;9111:322:0:-;430:6:3;;;;429:7;421:16;;;;;;9243:8:0;4221:12;4211:22;;;4203:67;;;;;-1:-1:-1;;;;;4203:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4203:67:0;;;;;;;;;;;;;;;9263:42;9276:5;9283:3;9295:8;9263:42;;:12;:42::i;:::-;9320:16;9332:3;9320:11;:16::i;:::-;9316:111;;;9372:3;-1:-1:-1;;;;;9352:41:0;;9394:5;9401:8;9411:4;9352:64;;;;;;;;;;;;;-1:-1:-1;;;;;9352:64:0;-1:-1:-1;;;;;9352:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9352:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9352:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9352:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;443:1:3;9111:322:0;;;;:::o;134:71:2:-;;;;;;;;;;;;;;;-1:-1:-1;;134:71:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;845:231::-;960:17;952:26;;;;;;;;-1:-1:-1;;952:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;904:14;;945:124;;952:26;;;;960:17;952:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:26::i;:::-;992:76;1000:67;1007:31;1015:22;1028:8;1015:12;:22::i;:::-;1007:7;:31::i;:::-;1048:17;1040:26;;;;;;;;-1:-1:-1;;1040:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1048:17;;1040:26;;1048:17;1040:26;;;;;;;;;;;;;;;;;;;;;;;;;1000:6;:67::i;13359:265:0:-;430:6:3;;13460:4:0;;430:6:3;;429:7;421:16;;;;;;13476:27:0;13484:8;13494;13476:7;:27::i;:::-;13513:83;;;;;13563:10;13513:83;;;;;;;;;;;;13585:4;13513:83;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13513:49:0;;;;;13563:10;13575:8;;13585:4;13591;;;;13513:83;;;;13591:4;;;;13513:83;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13513:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;13613:4:0;;13359:265;-1:-1:-1;;;;;;;;13359:265:0:o;211:40:2:-;;;;;;;;;;;;;;;-1:-1:-1;;211:40:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12049:175:0;430:6:3;;12134::0;;430::3;;429:7;421:16;;;;;;-1:-1:-1;12143:1:0;12129:89;12150:6;:13;12146:1;:17;12129:89;;;12184:23;12193:2;12197:6;12204:1;12197:9;;;;;;;;;12184:23;12165:3;;12129:89;;21608:601;21670:13;21693:16;21719:22;21751:12;21773;21795:20;21825:17;21911:19;21867:12;21875:3;21867:7;:12::i;:::-;21859:41;;;;;;;-1:-1:-1;;;;;21859:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21933:11:0;;;;;;;;:6;:11;;;;;21963;;21996:15;;;;;21963:11;;21996:15;;;;22039:21;;;;;;-1:-1:-1;22078:11:0;;;;;;-1:-1:-1;22107:11:0;;;;;-1:-1:-1;22144:19:0;-1:-1:-1;;;22144:19:0;;;;;-1:-1:-1;;;;22186:16:0;;;;;;;-1:-1:-1;21608:601:0:o;20552:924::-;21057:18;;:::i;:::-;430:6:3;;;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20861:19:0;;;;20853:55;;;;;-1:-1:-1;;;;;20853:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20926:5;;:11;;;-1:-1:-1;20926:11:0;20918:52;;;;;-1:-1:-1;;;;;20918:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20988:10;;;;;;;;:6;:10;;;;;:20;;;;:25;20980:66;;;;;-1:-1:-1;;;;;20980:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21078:285;;;;;;;;;21105:6;21078:285;;;;21317:10;21078:285;;;;;;21233:16;21078:285;;;;;;21132:6;21078:285;;;;;;21159:6;21078:285;;;;;;21278:14;21078:285;;;;;;21191:11;21078:285;;;;;;21351:1;21078:285;;;;;21057:306;;21387:5;21374:6;:10;21381:2;21374:10;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21426:5;21402:17;:21;21420:2;21402:21;;;;;;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;;21402:29:0;;;;;-1:-1:-1;;;;;21402:29:0;;;;;;21441:19;:26;21461:5;-1:-1:-1;;;;;21441:26:0;-1:-1:-1;;;;;21441:26:0;;;;;;;;;;;;;:28;;;;;;;;;;;;;20552:924;;;;;;;;;;:::o;22324:121::-;430:6:3;;;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;22412:11;;;;;;;;:6;:11;;;;;:26;22324:121::o;15106:151::-;-1:-1:-1;;;;;15211:28:0;;;15188:4;15211:28;;;:20;:28;;;;;;;;:39;;;;;;;;;;;;;;;15106:151::o;2182:242:1:-;2265:15;510:12;;-1:-1:-1;;;;;510:12:1;496:10;:26;488:52;;;;;-1:-1:-1;;;;;488:52:1;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;488:52:1;;;;;;;;;;;;;;;2283:39;;;;;;2316:4;2283:39;;;;;;-1:-1:-1;;;;;2283:24:1;;;;;:39;;;;;;;;;;;;;;-1:-1:-1;2283:24:1;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;2283:39:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2283:39:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2283:39:1;;-1:-1:-1;2346:1:1;2336:11;;2332:86;;;2363:44;;;;;;2387:10;2363:44;;;;;;;;;;;;-1:-1:-1;;;;;2363:23:1;;;;;:44;;;;;;;;;;;;;;-1:-1:-1;2363:23:1;:44;;;5:2:-1;;;;30:1;27;20:12;5:2;2363:44:1;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2363:44:1;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;22451:122:0;22539:11;;;;22514:6;22539:11;;;:6;:11;;;;;:27;;;;;;;;22451:122::o;13145:208::-;430:6:3;;;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;13266:25;13275:5;13282:8;13266;:25::i;:::-;13258:55;;;;;;;-1:-1:-1;;;;;13258:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13323:23;13332:8;13342:3;13323:8;:23::i;23405:132::-;430:6:3;;;;429:7;421:16;;;;;;4344:11:0;;-1:-1:-1;;;;;4344:11:0;4330:10;:25;;:55;;-1:-1:-1;4373:12:0;;-1:-1:-1;;;;;4373:12:0;4359:10;:26;4330:55;4322:81;;;;;;;-1:-1:-1;;;;;4322:81:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4322:81:0;;;;;;;;;;;;;;;23498:11;;;;;;;;:6;:11;;;;;:20;;:32;;;;;;-1:-1:-1;;;23498:32:0;;;;;;;;;;;23405:132::o;15843:147::-;15943:27;;15920:4;15943:27;;;:17;:27;;;;;;-1:-1:-1;;;;;15943:40:0;;;:27;;:40;;15843:147::o;16554:122::-;16627:30;;;;;;;;;:20;:30;;;;;:42;;-1:-1:-1;;16627:42:0;-1:-1:-1;;;;;16627:42:0;;;;;;;;;16554:122::o;15333:309::-;15417:4;15488:13;15441:16;15449:7;15441;:16::i;:::-;15433:45;;;;;;;-1:-1:-1;;;;;15433:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15504:26:0;;;;;;;:17;:26;;;;;;-1:-1:-1;;;;;15504:26:0;;;;15548:16;;;;;:50;;;15568:30;15581:7;15590;15568:12;:30::i;:::-;15548:86;;;;15602:32;15619:5;15626:7;15602:16;:32::i;:::-;15540:95;15333:309;-1:-1:-1;;;;15333:309:0:o;17133:659::-;-1:-1:-1;;;;;17317:24:0;;;;;;;:19;:24;;;;;;;;:26;;;;;;17383:27;;;;;:17;:27;;;;;:33;;-1:-1:-1;;17383:33:0;;;;;;17516:19;;;17512:193;;-1:-1:-1;;;;;17551:26:0;;;;;;:19;:26;;;;;;;;:28;;-1:-1:-1;;17551:28:0;;;17664:30;;;;;:20;:30;;;;;17657:37;;-1:-1:-1;;17657:37:0;;;17512:193;17771:3;-1:-1:-1;;;;;17755:30:0;17764:5;-1:-1:-1;;;;;17755:30:0;;17776:8;17755:30;;;;;;;;;;;;;;;;;;;;17133:659;;;:::o;17972:229::-;18034:4;18147:21;;18186:8;;17972:229::o;3661:196:2:-;3714:5;;:::i;:::-;-1:-1:-1;3820:30:2;;;;;;;;;3826:18;;3820:30;;3789:4;3779:15;;;3820:30;;;;;;;;3661:196::o;5039:676::-;5120:20;;;;;;;;;5167:6;5120:20;;;5095:13;;5120:20;5095:13;5150:539;-1:-1:-1;;5218:20:2;;;;;;;;;-1:-1:-1;5218:20:2;;5180:2;5196:7;;;;5176:6;;5257;;5253:361;;;-1:-1:-1;5265:7:2;;;;;;;;;;;;;;;;;5253:361;;;5295:1;5300;5295:6;5291:323;;;-1:-1:-1;5303:7:2;;;;;;;;;;;;;;;;;5291:323;;;5333:1;5338;5333:6;5329:285;;;-1:-1:-1;5341:7:2;;;;;;;;;;;;;;;;;5329:285;;;5371:1;5376;5371:6;5367:247;;;-1:-1:-1;5379:7:2;;;;;;;;;;;;;;;;;5367:247;;;5409:1;5414;5409:6;5405:209;;;-1:-1:-1;5417:7:2;;;;;;;;;;;;;;;;;5405:209;;;5447:1;5452;5447:6;5443:171;;;-1:-1:-1;5455:7:2;;;;;;;;;;;;;;;;;5443:171;;;5485:1;5490;5485:6;5481:133;;;-1:-1:-1;5493:7:2;;;;;;;;;;;;;;;;;5481:133;;;5523:1;5528;5523:6;5519:95;;;-1:-1:-1;5531:7:2;;;;;;;;;;;;;;;;;5519:95;;;5561:1;5566;5561:6;5557:57;;;-1:-1:-1;5569:7:2;;;;;;;;;;;;;;;;;5557:57;;;5599:1;5604;5599:6;5595:19;;;-1:-1:-1;5607:7:2;;;;;;;;;;;;;;;;;5595:19;5633:30;5640:10;5648:1;5640:7;:10::i;:::-;5652;5660:1;5652:7;:10::i;5633:30::-;5629:34;;5686:1;5682;:5;5150:539;;;;;;-1:-1:-1;5707:1:2;;5039:676;-1:-1:-1;;;5039:676:2:o;4698:334::-;4762:6;4780:17;4844:11;4823:5;:10;;;4811:4;:9;;;:22;4800:34;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;4800:34:2;;4780:54;;4895:2;4890:3;4886:12;4876:22;;4909:36;4916:6;4924:4;:9;;;4935:4;:9;;;4909:6;:36::i;:::-;4971:9;;4982:10;;;;4994;;4955:50;;4962:18;;;4982:10;4955:6;:50::i;:::-;-1:-1:-1;5022:3:2;4698:334;-1:-1:-1;;;4698:334:2:o;15996:128:0:-;16076:27;;16053:4;16076:27;;;:17;:27;;;;;;-1:-1:-1;;;;;16076:27:0;:41;;;15996:128::o;16906:154::-;17010:30;;16987:4;17010:30;;;:20;:30;;;;;;-1:-1:-1;;;;;17010:43:0;;;:30;;:43;;16906:154::o;3863:548:2:-;4189:9;3983:164;3996:2;3989:9;;3983:164;;4065:10;;4052:24;;4111:2;4103:10;;;;4127:9;;;;-1:-1:-1;;4000:9:2;;;;3983:164;;;-1:-1:-1;4274:10:2;;4329:11;;4209:2;:8;;;;4201:3;:17;-1:-1:-1;;4201:21:2;4286:9;;4270:26;;;4325:22;;4373:21;4360:35;;4241:164::o;139:23400:0:-;;;;;;;;;-1:-1:-1;139:23400:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;139:23400:0;;;-1:-1:-1;139:23400:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;-1:-1:-1;139:23400:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://84118b5bded503eb6ffb61d5b8aa6a61a8c9800148523b317643b0478c7378f0
Loading...
Loading
Loading...
Loading
[ 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.