ETH Price: $3,093.68 (+1.07%)
Gas: 3 Gwei

Token

404Loot (404LOOT)
 

Overview

Max Total Supply

444 404LOOT

Holders

289

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
popos.eth
Balance
0.387835271270975432 404LOOT

Value
$0.00
0x6cb4890d712c91020df2e62fb7bb869ce6ca3e8a
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Loot

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion
File 1 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 6 : Ownable2Step.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)

pragma solidity ^0.8.20;

import {Ownable} from "./Ownable.sol";

/**
 * @dev Contract module which provides access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is specified at deployment time in the constructor for `Ownable`. This
 * can later be changed with {transferOwnership} and {acceptOwnership}.
 *
 * This module is used through inheritance. It will make available all functions
 * from parent (Ownable).
 */
abstract contract Ownable2Step is Ownable {
    address private _pendingOwner;

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

    /**
     * @dev Returns the address of the pending owner.
     */
    function pendingOwner() public view virtual returns (address) {
        return _pendingOwner;
    }

    /**
     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual override onlyOwner {
        _pendingOwner = newOwner;
        emit OwnershipTransferStarted(owner(), newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual override {
        delete _pendingOwner;
        super._transferOwnership(newOwner);
    }

    /**
     * @dev The new owner accepts the ownership transfer.
     */
    function acceptOwnership() public virtual {
        address sender = _msgSender();
        if (pendingOwner() != sender) {
            revert OwnableUnauthorizedAccount(sender);
        }
        _transferOwnership(sender);
    }
}

File 3 of 6 : Base64.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Base64.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides a set of functions to operate with Base64 strings.
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
}

File 4 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 5 of 6 : 404loot.sol
// https://t.me/Loot404ETH

pragma solidity ^0.8.10;
import "./ERC404.sol";
import "@openzeppelin/contracts/utils/Base64.sol";

contract Loot is ERC404 {
    constructor( address _owner, uint256 _totalSupply

    ) ERC404("404Loot", "404LOOT", 18, _totalSupply, _owner) {
        balanceOf[_owner] = _totalSupply  * 10 ** 18;
        setWhitelist(_owner, true);
    }

    string[] private weapons = [
        "Warhammer",
        "Quarterstaff",
        "Maul",
        "Mace",
        "Club",
        "Katana",
        "Falchion",
        "Scimitar",
        "Long Sword",
        "Short Sword",
        "Ghost Wand",
        "Grave Wand",
        "Bone Wand",
        "Wand",
        "Grimoire",
        "Chronicle",
        "Tome",
        "Book"
    ];
    
    string[] private chestArmor = [
        "Divine Robe",
        "Silk Robe",
        "Linen Robe",
        "Robe",
        "Shirt",
        "Demon Husk",
        "Dragonskin Armor",
        "Studded Leather Armor",
        "Hard Leather Armor",
        "Leather Armor",
        "Holy Chestplate",
        "Ornate Chestplate",
        "Plate Mail",
        "Chain Mail",
        "Ring Mail"
    ];
    
    string[] private headArmor = [
        "Ancient Helm",
        "Ornate Helm",
        "Great Helm",
        "Full Helm",
        "Helm",
        "Demon Crown",
        "Dragon's Crown",
        "War Cap",
        "Leather Cap",
        "Cap",
        "Crown",
        "Divine Hood",
        "Silk Hood",
        "Linen Hood",
        "Hood"
    ];
    
    string[] private waistArmor = [
        "Ornate Belt",
        "War Belt",
        "Plated Belt",
        "Mesh Belt",
        "Heavy Belt",
        "Demonhide Belt",
        "Dragonskin Belt",
        "Studded Leather Belt",
        "Hard Leather Belt",
        "Leather Belt",
        "Brightsilk Sash",
        "Silk Sash",
        "Wool Sash",
        "Linen Sash",
        "Sash"
    ];
    
    string[] private footArmor = [
        "Holy Greaves",
        "Ornate Greaves",
        "Greaves",
        "Chain Boots",
        "Heavy Boots",
        "Demonhide Boots",
        "Dragonskin Boots",
        "Studded Leather Boots",
        "Hard Leather Boots",
        "Leather Boots",
        "Divine Slippers",
        "Silk Slippers",
        "Wool Shoes",
        "Linen Shoes",
        "Shoes"
    ];
    
    string[] private handArmor = [
        "Holy Gauntlets",
        "Ornate Gauntlets",
        "Gauntlets",
        "Chain Gloves",
        "Heavy Gloves",
        "Demon's Hands",
        "Dragonskin Gloves",
        "Studded Leather Gloves",
        "Hard Leather Gloves",
        "Leather Gloves",
        "Divine Gloves",
        "Silk Gloves",
        "Wool Gloves",
        "Linen Gloves",
        "Gloves"
    ];
    
    string[] private necklaces = [
        "Necklace",
        "Amulet",
        "Pendant"
    ];
    
    string[] private rings = [
        "Gold Ring",
        "Silver Ring",
        "Bronze Ring",
        "Platinum Ring",
        "Titanium Ring"
    ];
    
    string[] private suffixes = [
        "of Power",
        "of Giants",
        "of Titans",
        "of Skill",
        "of Perfection",
        "of Brilliance",
        "of Enlightenment",
        "of Protection",
        "of Anger",
        "of Rage",
        "of Fury",
        "of Vitriol",
        "of the Fox",
        "of Detection",
        "of Reflection",
        "of the Twins"
    ];
    
    string[] private namePrefixes = [
        "Agony", "Apocalypse", "Armageddon", "Beast", "Behemoth", "Blight", "Blood", "Bramble", 
        "Brimstone", "Brood", "Carrion", "Cataclysm", "Chimeric", "Corpse", "Corruption", "Damnation", 
        "Death", "Demon", "Dire", "Dragon", "Dread", "Doom", "Dusk", "Eagle", "Empyrean", "Fate", "Foe", 
        "Gale", "Ghoul", "Gloom", "Glyph", "Golem", "Grim", "Hate", "Havoc", "Honour", "Horror", "Hypnotic", 
        "Kraken", "Loath", "Maelstrom", "Mind", "Miracle", "Morbid", "Oblivion", "Onslaught", "Pain", 
        "Pandemonium", "Phoenix", "Plague", "Rage", "Rapture", "Rune", "Skull", "Sol", "Soul", "Sorrow", 
        "Spirit", "Storm", "Tempest", "Torment", "Vengeance", "Victory", "Viper", "Vortex", "Woe", "Wrath",
        "Light's", "Shimmering"  
    ];
    
    string[] private nameSuffixes = [
        "Bane",
        "Root",
        "Bite",
        "Song",
        "Roar",
        "Grasp",
        "Instrument",
        "Glow",
        "Bender",
        "Shadow",
        "Whisper",
        "Shout",
        "Growl",
        "Tear",
        "Peak",
        "Form",
        "Sun",
        "Moon"
    ];
    
    function random(string memory input) internal pure returns (uint256) {
        return uint256(keccak256(abi.encodePacked(input)));
    }
    
    function getWeapon(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "WEAPON", weapons);
    }
    
    function getChest(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "CHEST", chestArmor);
    }
    
    function getHead(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "HEAD", headArmor);
    }
    
    function getWaist(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "WAIST", waistArmor);
    }

    function getFoot(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "FOOT", footArmor);
    }
    
    function getHand(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "HAND", handArmor);
    }
    
    function getNeck(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "NECK", necklaces);
    }
    
    function getRing(uint256 tokenId) public view returns (string memory) {
        return pluck(tokenId, "RING", rings);
    }
    
    function pluck(uint256 tokenId, string memory keyPrefix, string[] memory sourceArray) internal view returns (string memory) {
        uint256 rand = random(string(abi.encodePacked(keyPrefix, toString(tokenId))));
        string memory output = sourceArray[rand % sourceArray.length];
        uint256 greatness = rand % 21;
        if (greatness > 14) {
            output = string(abi.encodePacked(output, " ", suffixes[rand % suffixes.length]));
        }
        if (greatness >= 19) {
            string[2] memory name;
            name[0] = namePrefixes[rand % namePrefixes.length];
            name[1] = nameSuffixes[rand % nameSuffixes.length];
            if (greatness == 19) {
                output = string(abi.encodePacked('"', name[0], ' ', name[1], '" ', output));
            } else {
                output = string(abi.encodePacked('"', name[0], ' ', name[1], '" ', output, " +1"));
            }
        }
        return output;
    }

    function tokenURI(uint256 tokenId) override public view returns (string memory) {
        string[17] memory parts;
        parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">';

        parts[1] = getWeapon(tokenId);

        parts[2] = '</text><text x="10" y="40" class="base">';

        parts[3] = getChest(tokenId);

        parts[4] = '</text><text x="10" y="60" class="base">';

        parts[5] = getHead(tokenId);

        parts[6] = '</text><text x="10" y="80" class="base">';

        parts[7] = getWaist(tokenId);

        parts[8] = '</text><text x="10" y="100" class="base">';

        parts[9] = getFoot(tokenId);

        parts[10] = '</text><text x="10" y="120" class="base">';

        parts[11] = getHand(tokenId);

        parts[12] = '</text><text x="10" y="140" class="base">';

        parts[13] = getNeck(tokenId);

        parts[14] = '</text><text x="10" y="160" class="base">';

        parts[15] = getRing(tokenId);

        parts[16] = '</text></svg>';

        string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]));
        output = string(abi.encodePacked(output, parts[9], parts[10], parts[11], parts[12], parts[13], parts[14], parts[15], parts[16]));
        
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Bag #', toString(tokenId), '", "description": "Loot is randomized adventurer gear generated and stored on chain. Stats, images, and other functionality are intentionally omitted for others to interpret. Feel free to use Loot in any way you want.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}'))));
        output = string(abi.encodePacked('data:application/json;base64,', json));

        return output;
    }

    
    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    

}

File 6 of 6 : ERC404.sol
import "@openzeppelin/contracts/access/Ownable2Step.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
pragma solidity ^0.8.0;

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

abstract contract ERC404 is Ownable2Step {


    event ERC20Transfer(bytes32 indexed topic0, address indexed from, address indexed to, uint256 tokens) anonymous;
    event Approval(address indexed owner, address indexed spender, uint256 amount);
    event Transfer( address indexed from, address indexed to, uint256 indexed id);
    event ERC721Approval(address indexed owner, address indexed spender, uint256 indexed id );
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved );
    bytes32 constant private TRANSFER_TOPIC = keccak256(bytes("Transfer(address,address,uint256)"));

    error NotFound();
    error AlreadyExists();
    error InvalidRecipient();
    error InvalidSender();
    error UnsafeRecipient();
    error Unauthorized();
    error InvalidOwner();

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public immutable decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public immutable totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert NotFound();
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert Unauthorized();
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert InvalidSender();
            }

            if (to == address(0)) {
                revert InvalidRecipient();
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert Unauthorized();
            }

            balanceOf[from] -= _getUnit();

            unchecked {
                balanceOf[to] += _getUnit();
            }

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(TRANSFER_TOPIC, from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            to.code.length != 0 &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert UnsafeRecipient();
        }
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;

        unchecked {
            balanceOf[to] += amount;
        }

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
                (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
                (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(TRANSFER_TOPIC, from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert InvalidRecipient();
        }

        unchecked {
            minted++;
        }

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert AlreadyExists();
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert InvalidSender();
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

Settings
{
  "evmVersion": "paris",
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes32","name":"topic0","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getChest","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getFoot","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getHand","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getHead","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getNeck","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRing","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getWaist","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getWeapon","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c06040526040518061024001604052806040518060400160405280600981526020017f57617268616d6d6572000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f517561727465727374616666000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d61756c0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d6163650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f436c75620000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4b6174616e61000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f46616c6368696f6e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f5363696d6974617200000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4c6f6e672053776f72640000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f53686f72742053776f726400000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f47686f73742057616e640000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f47726176652057616e640000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f426f6e652057616e64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f57616e640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4772696d6f69726500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4368726f6e69636c65000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f546f6d650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f426f6f6b00000000000000000000000000000000000000000000000000000000815250815250600d906012620004469291906200347b565b50604051806101e001604052806040518060400160405280600b81526020017f446976696e6520526f626500000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f53696c6b20526f6265000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4c696e656e20526f62650000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526f62650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f536869727400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f44656d6f6e204875736b0000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f447261676f6e736b696e2041726d6f720000000000000000000000000000000081525081526020016040518060400160405280601581526020017f53747564646564204c6561746865722041726d6f72000000000000000000000081525081526020016040518060400160405280601281526020017f48617264204c6561746865722041726d6f72000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4c6561746865722041726d6f720000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f486f6c79204368657374706c617465000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f4f726e617465204368657374706c61746500000000000000000000000000000081525081526020016040518060400160405280600a81526020017f506c617465204d61696c0000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f436861696e204d61696c0000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f52696e67204d61696c0000000000000000000000000000000000000000000000815250815250600e90600f620007d8929190620034db565b50604051806101e001604052806040518060400160405280600c81526020017f416e6369656e742048656c6d000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4f726e6174652048656c6d00000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f47726561742048656c6d0000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f46756c6c2048656c6d000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f48656c6d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f44656d6f6e2043726f776e00000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f447261676f6e27732043726f776e00000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f576172204361700000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4c6561746865722043617000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f436170000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f43726f776e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f446976696e6520486f6f6400000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f53696c6b20486f6f64000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4c696e656e20486f6f640000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f486f6f6400000000000000000000000000000000000000000000000000000000815250815250600f90600f62000b6a929190620034db565b50604051806101e001604052806040518060400160405280600b81526020017f4f726e6174652042656c7400000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f5761722042656c7400000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f506c617465642042656c7400000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d6573682042656c74000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f48656176792042656c740000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f44656d6f6e686964652042656c7400000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f447261676f6e736b696e2042656c74000000000000000000000000000000000081525081526020016040518060400160405280601481526020017f53747564646564204c6561746865722042656c7400000000000000000000000081525081526020016040518060400160405280601181526020017f48617264204c6561746865722042656c7400000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4c6561746865722042656c74000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f42726967687473696c6b2053617368000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f53696c6b2053617368000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f576f6f6c2053617368000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4c696e656e20536173680000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f5361736800000000000000000000000000000000000000000000000000000000815250815250601090600f62000efc929190620034db565b50604051806101e001604052806040518060400160405280600c81526020017f486f6c792047726561766573000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4f726e617465204772656176657300000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f477265617665730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f436861696e20426f6f747300000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f486561767920426f6f747300000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f44656d6f6e6869646520426f6f7473000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f447261676f6e736b696e20426f6f74730000000000000000000000000000000081525081526020016040518060400160405280601581526020017f53747564646564204c65617468657220426f6f7473000000000000000000000081525081526020016040518060400160405280601281526020017f48617264204c65617468657220426f6f7473000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4c65617468657220426f6f74730000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f446976696e6520536c697070657273000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f53696c6b20536c6970706572730000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f576f6f6c2053686f65730000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4c696e656e2053686f657300000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f53686f6573000000000000000000000000000000000000000000000000000000815250815250601190600f6200128e929190620034db565b50604051806101e001604052806040518060400160405280600e81526020017f486f6c79204761756e746c65747300000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f4f726e617465204761756e746c6574730000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4761756e746c657473000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f436861696e20476c6f766573000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f486561767920476c6f766573000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f44656d6f6e27732048616e64730000000000000000000000000000000000000081525081526020016040518060400160405280601181526020017f447261676f6e736b696e20476c6f76657300000000000000000000000000000081525081526020016040518060400160405280601681526020017f53747564646564204c65617468657220476c6f7665730000000000000000000081525081526020016040518060400160405280601381526020017f48617264204c65617468657220476c6f7665730000000000000000000000000081525081526020016040518060400160405280600e81526020017f4c65617468657220476c6f76657300000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f446976696e6520476c6f7665730000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f53696c6b20476c6f76657300000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f576f6f6c20476c6f76657300000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4c696e656e20476c6f766573000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f476c6f7665730000000000000000000000000000000000000000000000000000815250815250601290600f62001620929190620034db565b5060405180606001604052806040518060400160405280600881526020017f4e65636b6c61636500000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f416d756c6574000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f50656e64616e74000000000000000000000000000000000000000000000000008152508152506013906003620016ed9291906200353b565b506040518060a001604052806040518060400160405280600981526020017f476f6c642052696e67000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f53696c7665722052696e6700000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f42726f6e7a652052696e6700000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f506c6174696e756d2052696e670000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f546974616e69756d2052696e67000000000000000000000000000000000000008152508152506014906005620018309291906200359b565b506040518061020001604052806040518060400160405280600881526020017f6f6620506f77657200000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6f66204769616e7473000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6f6620546974616e73000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f6f6620536b696c6c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f662050657266656374696f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f66204272696c6c69616e63650000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f6f6620456e6c69676874656e6d656e740000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f662050726f74656374696f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f6f6620416e67657200000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f6f6620526167650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f6f6620467572790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f6f662056697472696f6c0000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f6f662074686520466f780000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f6f6620446574656374696f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f66205265666c656374696f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f6f6620746865205477696e730000000000000000000000000000000000000000815250815250601590601062001bfd929190620035fb565b50604051806108a001604052806040518060400160405280600581526020017f41676f6e7900000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f41706f63616c797073650000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f41726d61676564646f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426561737400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f426568656d6f746800000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f426c69676874000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426c6f6f6400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4272616d626c650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4272696d73746f6e65000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f42726f6f6400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f43617272696f6e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f43617461636c79736d000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4368696d6572696300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f436f72707365000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f436f7272757074696f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f44616d6e6174696f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f446561746800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f44656d6f6e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f446972650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f447261676f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f447265616400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f446f6f6d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4475736b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4561676c6500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f456d70797265616e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f466174650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f466f65000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f47616c650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f47686f756c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f476c6f6f6d00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f476c79706800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f476f6c656d00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4772696d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f486174650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4861766f6300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f486f6e6f7572000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f486f72726f72000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4879706e6f74696300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4b72616b656e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4c6f61746800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d61656c7374726f6d000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d696e640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d697261636c650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d6f72626964000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4f626c6976696f6e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4f6e736c6175676874000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f5061696e0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f50616e64656d6f6e69756d00000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f50686f656e69780000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f506c61677565000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526167650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f526170747572650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f52756e650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f536b756c6c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f536f6c000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f536f756c0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f536f72726f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f537069726974000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f53746f726d00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f54656d706573740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f546f726d656e740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f56656e6765616e6365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f566963746f72790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f566970657200000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f566f72746578000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f576f65000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f577261746800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4c6967687427730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f5368696d6d6572696e6700000000000000000000000000000000000000000000815250815250601690604562002c019291906200365b565b506040518061024001604052806040518060400160405280600481526020017f42616e650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526f6f740000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f426974650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f536f6e670000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526f61720000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f477261737000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f496e737472756d656e740000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f476c6f770000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f42656e646572000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f536861646f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f576869737065720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f53686f757400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f47726f776c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f546561720000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f5065616b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f466f726d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f53756e000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d6f6f6e000000000000000000000000000000000000000000000000000000008152508152506017906012620030449291906200347b565b503480156200305257600080fd5b5060405162008a8138038062008a818339818101604052810190620030789190620037ed565b6040518060400160405280600781526020017f3430344c6f6f74000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f3430344c4f4f54000000000000000000000000000000000000000000000000008152506012838580600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200315e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162003155919062003845565b60405180910390fd5b6200316f816200324060201b60201c565b50846002908162003181919062003ad2565b50836003908162003193919062003ad2565b508260ff1660808160ff1681525050608051600a620031b3919062003d49565b82620031c0919062003d9a565b60a081815250505050505050670de0b6b3a764000081620031e2919062003d9a565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620032388260016200327960201b60201c565b505062003de5565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556200327681620032e460201b60201c565b50565b62003289620033a860201b60201c565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620033b86200344a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620033de6200345260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462003448576200340a6200344a60201b60201c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016200343f919062003845565b60405180910390fd5b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054828255906000526020600020908101928215620034c8579160200282015b82811115620034c7578251829081620034b6919062003ad2565b50916020019190600101906200349c565b5b509050620034d79190620036bb565b5090565b82805482825590600052602060002090810192821562003528579160200282015b828111156200352757825182908162003516919062003ad2565b5091602001919060010190620034fc565b5b509050620035379190620036bb565b5090565b82805482825590600052602060002090810192821562003588579160200282015b828111156200358757825182908162003576919062003ad2565b50916020019190600101906200355c565b5b509050620035979190620036bb565b5090565b828054828255906000526020600020908101928215620035e8579160200282015b82811115620035e7578251829081620035d6919062003ad2565b5091602001919060010190620035bc565b5b509050620035f79190620036bb565b5090565b82805482825590600052602060002090810192821562003648579160200282015b828111156200364757825182908162003636919062003ad2565b50916020019190600101906200361c565b5b509050620036579190620036bb565b5090565b828054828255906000526020600020908101928215620036a8579160200282015b82811115620036a757825182908162003696919062003ad2565b50916020019190600101906200367c565b5b509050620036b79190620036bb565b5090565b5b80821115620036df5760008181620036d59190620036e3565b50600101620036bc565b5090565b508054620036f190620038cb565b6000825580601f1062003705575062003726565b601f01602090049060005260206000209081019062003725919062003729565b5b50565b5b80821115620037445760008160009055506001016200372a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200377a826200374d565b9050919050565b6200378c816200376d565b81146200379857600080fd5b50565b600081519050620037ac8162003781565b92915050565b6000819050919050565b620037c781620037b2565b8114620037d357600080fd5b50565b600081519050620037e781620037bc565b92915050565b6000806040838503121562003807576200380662003748565b5b600062003817858286016200379b565b92505060206200382a85828601620037d6565b9150509250929050565b6200383f816200376d565b82525050565b60006020820190506200385c600083018462003834565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620038e457607f821691505b602082108103620038fa57620038f96200389c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620039647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262003925565b62003970868362003925565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620039b3620039ad620039a784620037b2565b62003988565b620037b2565b9050919050565b6000819050919050565b620039cf8362003992565b620039e7620039de82620039ba565b84845462003932565b825550505050565b600090565b620039fe620039ef565b62003a0b818484620039c4565b505050565b5b8181101562003a335762003a27600082620039f4565b60018101905062003a11565b5050565b601f82111562003a825762003a4c8162003900565b62003a578462003915565b8101602085101562003a67578190505b62003a7f62003a768562003915565b83018262003a10565b50505b505050565b600082821c905092915050565b600062003aa76000198460080262003a87565b1980831691505092915050565b600062003ac2838362003a94565b9150826002028217905092915050565b62003add8262003862565b67ffffffffffffffff81111562003af95762003af86200386d565b5b62003b058254620038cb565b62003b1282828562003a37565b600060209050601f83116001811462003b4a576000841562003b35578287015190505b62003b41858262003ab4565b86555062003bb1565b601f19841662003b5a8662003900565b60005b8281101562003b845784890151825560018201915060208501945060208101905062003b5d565b8683101562003ba4578489015162003ba0601f89168262003a94565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562003c475780860481111562003c1f5762003c1e62003bb9565b5b600185161562003c2f5780820291505b808102905062003c3f8562003be8565b945062003bff565b94509492505050565b60008262003c62576001905062003d35565b8162003c72576000905062003d35565b816001811462003c8b576002811462003c965762003ccc565b600191505062003d35565b60ff84111562003cab5762003caa62003bb9565b5b8360020a91508482111562003cc55762003cc462003bb9565b5b5062003d35565b5060208310610133831016604e8410600b841016171562003d065782820a90508381111562003d005762003cff62003bb9565b5b62003d35565b62003d15848484600162003bf5565b9250905081840481111562003d2f5762003d2e62003bb9565b5b81810290505b9392505050565b600060ff82169050919050565b600062003d5682620037b2565b915062003d638362003d3c565b925062003d927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462003c50565b905092915050565b600062003da782620037b2565b915062003db483620037b2565b925082820262003dc481620037b2565b9150828204841483151762003dde5762003ddd62003bb9565b5b5092915050565b60805160a051614c6f62003e126000396000610b890152600081816113e30152612be70152614c6f6000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806395d89b411161010f578063c08a5dd5116100a2578063e30c397811610071578063e30c397814610619578063e985e9c514610637578063ef68075a14610667578063f2fde38b14610697576101f0565b8063c08a5dd514610559578063c87b56dd14610589578063d47f269e146105b9578063dd62ed3e146105e9576101f0565b80639e41b73f116100de5780639e41b73f146104c1578063a22cb465146104f1578063a9059cbb1461050d578063b88d4fde1461053d576101f0565b806395d89b41146104135780639720c969146104315780639b19251a146104615780639bdc1b6914610491576101f0565b80634f02c4201161018757806370a082311161015657806370a08231146103b1578063715018a6146103e157806379ba5097146103eb5780638da5cb5b146103f5576101f0565b80634f02c4201461031757806353d6fd59146103355780636352211e1461035157806367209aa814610381576101f0565b806318160ddd116101c357806318160ddd146102a357806323b872dd146102c1578063313ce567146102dd57806342842e0e146102fb576101f0565b806306fdde03146101f5578063081812fc14610213578063095ea7b3146102435780630e99990d14610273575b600080fd5b6101fd6106b3565b60405161020a91906139cc565b60405180910390f35b61022d60048036038101906102289190613a2e565b610741565b60405161023a9190613a9c565b60405180910390f35b61025d60048036038101906102589190613ae3565b610774565b60405161026a9190613b3e565b60405180910390f35b61028d60048036038101906102889190613a2e565b610a6d565b60405161029a91906139cc565b60405180910390f35b6102ab610b87565b6040516102b89190613b68565b60405180910390f35b6102db60048036038101906102d69190613b83565b610bab565b005b6102e56113e1565b6040516102f29190613bf2565b60405180910390f35b61031560048036038101906103109190613b83565b611405565b005b61031f611538565b60405161032c9190613b68565b60405180910390f35b61034f600480360381019061034a9190613c39565b61153e565b005b61036b60048036038101906103669190613a2e565b6115a1565b6040516103789190613a9c565b60405180910390f35b61039b60048036038101906103969190613a2e565b611644565b6040516103a891906139cc565b60405180910390f35b6103cb60048036038101906103c69190613c79565b61175e565b6040516103d89190613b68565b60405180910390f35b6103e9611776565b005b6103f361178a565b005b6103fd611819565b60405161040a9190613a9c565b60405180910390f35b61041b611842565b60405161042891906139cc565b60405180910390f35b61044b60048036038101906104469190613a2e565b6118d0565b60405161045891906139cc565b60405180910390f35b61047b60048036038101906104769190613c79565b6119ea565b6040516104889190613b3e565b60405180910390f35b6104ab60048036038101906104a69190613a2e565b611a0a565b6040516104b891906139cc565b60405180910390f35b6104db60048036038101906104d69190613a2e565b611b24565b6040516104e891906139cc565b60405180910390f35b61050b60048036038101906105069190613c39565b611c3e565b005b61052760048036038101906105229190613ae3565b611d3b565b6040516105349190613b3e565b60405180910390f35b61055760048036038101906105529190613d0b565b611d50565b005b610573600480360381019061056e9190613a2e565b611e89565b60405161058091906139cc565b60405180910390f35b6105a3600480360381019061059e9190613a2e565b611fa3565b6040516105b091906139cc565b60405180910390f35b6105d360048036038101906105ce9190613a2e565b612539565b6040516105e091906139cc565b60405180910390f35b61060360048036038101906105fe9190613d93565b612653565b6040516106109190613b68565b60405180910390f35b610621612678565b60405161062e9190613a9c565b60405180910390f35b610651600480360381019061064c9190613d93565b6126a2565b60405161065e9190613b3e565b60405180910390f35b610681600480360381019061067c9190613a2e565b6126d1565b60405161068e91906139cc565b60405180910390f35b6106b160048036038101906106ac9190613c79565b6127eb565b005b600280546106c090613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546106ec90613e02565b80156107395780601f1061070e57610100808354040283529160200191610739565b820191906000526020600020905b81548152906001019060200180831161071c57829003601f168201915b505050505081565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060045482111580156107885750600082115b1561097c5760006009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156108885750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156108bf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836007600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161096e9190613b68565b60405180910390a350610a63565b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a5a9190613b68565b60405180910390a35b6001905092915050565b6060610b80826040518060400160405280600481526020017f464f4f54000000000000000000000000000000000000000000000000000000008152506011805480602002602001604051908101604052809291908181526020016000905b82821015610b77578382906000526020600020018054610aea90613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1690613e02565b8015610b635780601f10610b3857610100808354040283529160200191610b63565b820191906000526020600020905b815481529060010190602001808311610b4657829003601f168201915b505050505081526020019060010190610acb565b50505050612898565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004548111611299576009600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb2576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610d755750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610de057506007600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e17576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e1f612be3565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e6d9190613e62565b92505081905550610e7c612be3565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610fe09190613e62565b81548110610ff157610ff0613e96565b5b9060005260206000200154905080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b6000858152602001908152602001600020548154811061106357611062613e96565b5b9060005260206000200181905550600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806110c0576110bf613ec5565b5b60019003818190600052602060002001600090559055600b600083815260200190815260200160002054600b600083815260200190815260200160002081905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506111b69190613e62565b600b600084815260200190815260200160002081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001614bf1602191398051906020012061127e612be3565b60405161128b9190613b68565b60405180910390a3506113dc565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113ce57818161134d9190613e62565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113d9848484612c17565b50505b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611410838383610bab565b60008273ffffffffffffffffffffffffffffffffffffffff163b141580156114fc575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161149793929190613f2b565b6020604051808303816000875af11580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190613fcd565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611533576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60045481565b611546612f81565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163f576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6060611757826040518060400160405280600481526020017f4e45434b000000000000000000000000000000000000000000000000000000008152506013805480602002602001604051908101604052809291908181526020016000905b8282101561174e5783829060005260206000200180546116c190613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613e02565b801561173a5780601f1061170f5761010080835404028352916020019161173a565b820191906000526020600020905b81548152906001019060200180831161171d57829003601f168201915b5050505050815260200190600101906116a2565b50505050612898565b9050919050565b60056020528060005260406000206000915090505481565b61177e612f81565b6117886000613008565b565b6000611794613039565b90508073ffffffffffffffffffffffffffffffffffffffff166117b5612678565b73ffffffffffffffffffffffffffffffffffffffff161461180d57806040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118049190613a9c565b60405180910390fd5b61181681613008565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461184f90613e02565b80601f016020809104026020016040519081016040528092919081815260200182805461187b90613e02565b80156118c85780601f1061189d576101008083540402835291602001916118c8565b820191906000526020600020905b8154815290600101906020018083116118ab57829003601f168201915b505050505081565b60606119e3826040518060400160405280600481526020017f4845414400000000000000000000000000000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b828210156119da57838290600052602060002001805461194d90613e02565b80601f016020809104026020016040519081016040528092919081815260200182805461197990613e02565b80156119c65780601f1061199b576101008083540402835291602001916119c6565b820191906000526020600020905b8154815290600101906020018083116119a957829003601f168201915b50505050508152602001906001019061192e565b50505050612898565b9050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6060611b1d826040518060400160405280600581526020017f57414953540000000000000000000000000000000000000000000000000000008152506010805480602002602001604051908101604052809291908181526020016000905b82821015611b14578382906000526020600020018054611a8790613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab390613e02565b8015611b005780601f10611ad557610100808354040283529160200191611b00565b820191906000526020600020905b815481529060010190602001808311611ae357829003601f168201915b505050505081526020019060010190611a68565b50505050612898565b9050919050565b6060611c37826040518060400160405280600681526020017f574541504f4e0000000000000000000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b82821015611c2e578382906000526020600020018054611ba190613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd90613e02565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b505050505081526020019060010190611b82565b50505050612898565b9050919050565b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d2f9190613b3e565b60405180910390a35050565b6000611d48338484612c17565b905092915050565b611d5b858585610bab565b60008473ffffffffffffffffffffffffffffffffffffffff163b14158015611e4b575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401611de6959493929190614036565b6020604051808303816000875af1158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190613fcd565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611e82576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6060611f9c826040518060400160405280600481526020017f52494e47000000000000000000000000000000000000000000000000000000008152506014805480602002602001604051908101604052809291908181526020016000905b82821015611f93578382906000526020600020018054611f0690613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3290613e02565b8015611f7f5780601f10611f5457610100808354040283529160200191611f7f565b820191906000526020600020905b815481529060010190602001808311611f6257829003601f168201915b505050505081526020019060010190611ee7565b50505050612898565b9050919050565b6060611fad6138ed565b60405180610120016040528060fd8152602001614a8b60fd913981600060118110611fdb57611fda613e96565b5b6020020181905250611fec83611b24565b8160016011811061200057611fff613e96565b5b6020020181905250604051806060016040528060288152602001614c12602891398160026011811061203557612034613e96565b5b6020020181905250612046836126d1565b8160036011811061205a57612059613e96565b5b60200201819052506040518060600160405280602881526020016149c0602891398160046011811061208f5761208e613e96565b5b60200201819052506120a0836118d0565b816005601181106120b4576120b3613e96565b5b6020020181905250604051806060016040528060288152602001614a3a60289139816006601181106120e9576120e8613e96565b5b60200201819052506120fa83611a0a565b8160076011811061210e5761210d613e96565b5b6020020181905250604051806060016040528060298152602001614a62602991398160086011811061214357612142613e96565b5b602002018190525061215483610a6d565b8160096011811061216857612167613e96565b5b6020020181905250604051806060016040528060298152602001614a116029913981600a6011811061219d5761219c613e96565b5b60200201819052506121ae83612539565b81600b601181106121c2576121c1613e96565b5b6020020181905250604051806060016040528060298152602001614b886029913981600c601181106121f7576121f6613e96565b5b602002018190525061220883611644565b81600d6011811061221c5761221b613e96565b5b60200201819052506040518060600160405280602981526020016149e86029913981600e6011811061225157612250613e96565b5b602002018190525061226283611e89565b81600f6011811061227657612275613e96565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e00000000000000000000000000000000000000815250816010601181106122c8576122c7613e96565b5b60200201819052506000816000601181106122e6576122e5613e96565b5b6020020151826001601181106122ff576122fe613e96565b5b60200201518360026011811061231857612317613e96565b5b60200201518460036011811061233157612330613e96565b5b60200201518560046011811061234a57612349613e96565b5b60200201518660056011811061236357612362613e96565b5b60200201518760066011811061237c5761237b613e96565b5b60200201518860076011811061239557612394613e96565b5b6020020151896008601181106123ae576123ad613e96565b5b60200201516040516020016123cb999897969594939291906140c0565b604051602081830303815290604052905080826009601181106123f1576123f0613e96565b5b602002015183600a6011811061240a57612409613e96565b5b602002015184600b6011811061242357612422613e96565b5b602002015185600c6011811061243c5761243b613e96565b5b602002015186600d6011811061245557612454613e96565b5b602002015187600e6011811061246e5761246d613e96565b5b602002015188600f6011811061248757612486613e96565b5b6020020151896010601181106124a05761249f613e96565b5b60200201516040516020016124bd999897969594939291906140c0565b6040516020818303038152906040529050600061250a6124dc86613041565b6124e5846131a1565b6040516020016124f692919061432f565b6040516020818303038152906040526131a1565b90508060405160200161251d91906143c0565b6040516020818303038152906040529150819350505050919050565b606061264c826040518060400160405280600481526020017f48414e44000000000000000000000000000000000000000000000000000000008152506012805480602002602001604051908101604052809291908181526020016000905b828210156126435783829060005260206000200180546125b690613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546125e290613e02565b801561262f5780601f106126045761010080835404028352916020019161262f565b820191906000526020600020905b81548152906001019060200180831161261257829003601f168201915b505050505081526020019060010190612597565b50505050612898565b9050919050565b6006602052816000526040600020602052806000526040600020600091509150505481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60606127e4826040518060400160405280600581526020017f4348455354000000000000000000000000000000000000000000000000000000815250600e805480602002602001604051908101604052809291908181526020016000905b828210156127db57838290600052602060002001805461274e90613e02565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613e02565b80156127c75780601f1061279c576101008083540402835291602001916127c7565b820191906000526020600020905b8154815290600101906020018083116127aa57829003601f168201915b50505050508152602001906001019061272f565b50505050612898565b9050919050565b6127f3612f81565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16612853611819565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b606060006128ce846128a987613041565b6040516020016128ba9291906143e2565b604051602081830303815290604052613304565b90506000838451836128e09190614435565b815181106128f1576128f0613e96565b5b60200260200101519050600060158361290a9190614435565b9050600e811115612966578160158080549050856129289190614435565b8154811061293957612938613e96565b5b9060005260206000200160405160200161295492919061454a565b60405160208183030381529060405291505b60138110612bd657612976613915565b60168080549050856129889190614435565b8154811061299957612998613e96565b5b9060005260206000200180546129ae90613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546129da90613e02565b8015612a275780601f106129fc57610100808354040283529160200191612a27565b820191906000526020600020905b815481529060010190602001808311612a0a57829003601f168201915b505050505081600060028110612a4057612a3f613e96565b5b60200201819052506017808054905085612a5a9190614435565b81548110612a6b57612a6a613e96565b5b906000526020600020018054612a8090613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054612aac90613e02565b8015612af95780601f10612ace57610100808354040283529160200191612af9565b820191906000526020600020905b815481529060010190602001808311612adc57829003601f168201915b505050505081600160028110612b1257612b11613e96565b5b602002018190525060138203612b7d5780600060028110612b3657612b35613e96565b5b602002015181600160028110612b4f57612b4e613e96565b5b602002015184604051602001612b6793929190614611565b6040516020818303038152906040529250612bd4565b80600060028110612b9157612b90613e96565b5b602002015181600160028110612baa57612ba9613e96565b5b602002015184604051602001612bc2939291906146af565b60405160208183030381529060405292505b505b8193505050509392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000600a612c12919061483f565b905090565b600080612c22612be3565b90506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cfb9190613e62565b9250508190555084600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2f57600083600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded919061488a565b8484612df9919061488a565b612e039190613e62565b905060005b81811015612e2c57612e1989613337565b8080612e24906148bb565b915050612e08565b50505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0f5760008382612e8e919061488a565b84600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed9919061488a565b612ee39190613e62565b905060005b81811015612f0c57612ef988613593565b8080612f04906148bb565b915050612ee8565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001614bf1602191398051906020012087604051612f6b9190613b68565b60405180910390a3600193505050509392505050565b612f89613039565b73ffffffffffffffffffffffffffffffffffffffff16612fa7611819565b73ffffffffffffffffffffffffffffffffffffffff161461300657612fca613039565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612ffd9190613a9c565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561303681613829565b50565b600033905090565b606060008203613088576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061319c565b600082905060005b600082146130ba5780806130a3906148bb565b915050600a826130b3919061488a565b9150613090565b60008167ffffffffffffffff8111156130d6576130d5614903565b5b6040519080825280601f01601f1916602001820160405280156131085781602001600182028036833780820191505090505b5090505b60008514613195576001826131219190613e62565b9150600a856131309190614435565b603061313c9190614932565b60f81b81838151811061315257613151613e96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561318e919061488a565b945061310c565b8093505050505b919050565b606060008251036131c3576040518060200160405280600081525090506132ff565b6000604051806060016040528060408152602001614bb160409139905060006003600285516131f29190614932565b6131fc919061488a565b60046132089190614966565b67ffffffffffffffff81111561322157613220614903565b5b6040519080825280601f01601f1916602001820160405280156132535781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156132bf576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050613264565b50506003865106600181146132db57600281146132ee576132f6565b603d6001830353603d60028303536132f6565b603d60018303535b50505080925050505b919050565b60008160405160200161331791906149a8565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361339d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061342d9190613e62565b8154811061343e5761343d613e96565b5b90600052602060002001549050600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061349a57613499613ec5565b5b60019003818190600052602060002001600090559055600b6000828152602001908152602001600020600090556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036135f9576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60046000815480929190600101919050555060006004549050600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136ab576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506137b29190613e62565b600b600083815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518061022001604052806011905b60608152602001906001900390816138fd5790505090565b60405180604001604052806002905b60608152602001906001900390816139245790505090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561397657808201518184015260208101905061395b565b60008484015250505050565b6000601f19601f8301169050919050565b600061399e8261393c565b6139a88185613947565b93506139b8818560208601613958565b6139c181613982565b840191505092915050565b600060208201905081810360008301526139e68184613993565b905092915050565b600080fd5b600080fd5b6000819050919050565b613a0b816139f8565b8114613a1657600080fd5b50565b600081359050613a2881613a02565b92915050565b600060208284031215613a4457613a436139ee565b5b6000613a5284828501613a19565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a8682613a5b565b9050919050565b613a9681613a7b565b82525050565b6000602082019050613ab16000830184613a8d565b92915050565b613ac081613a7b565b8114613acb57600080fd5b50565b600081359050613add81613ab7565b92915050565b60008060408385031215613afa57613af96139ee565b5b6000613b0885828601613ace565b9250506020613b1985828601613a19565b9150509250929050565b60008115159050919050565b613b3881613b23565b82525050565b6000602082019050613b536000830184613b2f565b92915050565b613b62816139f8565b82525050565b6000602082019050613b7d6000830184613b59565b92915050565b600080600060608486031215613b9c57613b9b6139ee565b5b6000613baa86828701613ace565b9350506020613bbb86828701613ace565b9250506040613bcc86828701613a19565b9150509250925092565b600060ff82169050919050565b613bec81613bd6565b82525050565b6000602082019050613c076000830184613be3565b92915050565b613c1681613b23565b8114613c2157600080fd5b50565b600081359050613c3381613c0d565b92915050565b60008060408385031215613c5057613c4f6139ee565b5b6000613c5e85828601613ace565b9250506020613c6f85828601613c24565b9150509250929050565b600060208284031215613c8f57613c8e6139ee565b5b6000613c9d84828501613ace565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ccb57613cca613ca6565b5b8235905067ffffffffffffffff811115613ce857613ce7613cab565b5b602083019150836001820283011115613d0457613d03613cb0565b5b9250929050565b600080600080600060808688031215613d2757613d266139ee565b5b6000613d3588828901613ace565b9550506020613d4688828901613ace565b9450506040613d5788828901613a19565b935050606086013567ffffffffffffffff811115613d7857613d776139f3565b5b613d8488828901613cb5565b92509250509295509295909350565b60008060408385031215613daa57613da96139ee565b5b6000613db885828601613ace565b9250506020613dc985828601613ace565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e1a57607f821691505b602082108103613e2d57613e2c613dd3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e6d826139f8565b9150613e78836139f8565b9250828203905081811115613e9057613e8f613e33565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082825260208201905092915050565b50565b6000613f15600083613ef4565b9150613f2082613f05565b600082019050919050565b6000608082019050613f406000830186613a8d565b613f4d6020830185613a8d565b613f5a6040830184613b59565b8181036060830152613f6b81613f08565b9050949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613faa81613f75565b8114613fb557600080fd5b50565b600081519050613fc781613fa1565b92915050565b600060208284031215613fe357613fe26139ee565b5b6000613ff184828501613fb8565b91505092915050565b82818337600083830152505050565b60006140158385613ef4565b9350614022838584613ffa565b61402b83613982565b840190509392505050565b600060808201905061404b6000830188613a8d565b6140586020830187613a8d565b6140656040830186613b59565b8181036060830152614078818486614009565b90509695505050505050565b600081905092915050565b600061409a8261393c565b6140a48185614084565b93506140b4818560208601613958565b80840191505092915050565b60006140cc828c61408f565b91506140d8828b61408f565b91506140e4828a61408f565b91506140f0828961408f565b91506140fc828861408f565b9150614108828761408f565b9150614114828661408f565b9150614120828561408f565b915061412c828461408f565b91508190509a9950505050505050505050565b7f7b226e616d65223a202242616720230000000000000000000000000000000000600082015250565b6000614175600f83614084565b91506141808261413f565b600f82019050919050565b7f222c20226465736372697074696f6e223a20224c6f6f742069732072616e646f60008201527f6d697a656420616476656e747572657220676561722067656e6572617465642060208201527f616e642073746f726564206f6e20636861696e2e2053746174732c20696d616760408201527f65732c20616e64206f746865722066756e6374696f6e616c697479206172652060608201527f696e74656e74696f6e616c6c79206f6d697474656420666f72206f746865727360808201527f20746f20696e746572707265742e204665656c206672656520746f207573652060a08201527f4c6f6f7420696e20616e792077617920796f752077616e742e222c2022696d6160c08201527f6765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342c60e082015250565b60006142cc61010083614084565b91506142d78261418b565b61010082019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614319600283614084565b9150614324826142e3565b600282019050919050565b600061433a82614168565b9150614346828561408f565b9150614351826142be565b915061435d828461408f565b91506143688261430c565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b60006143aa601d83614084565b91506143b582614374565b601d82019050919050565b60006143cb8261439d565b91506143d7828461408f565b915081905092915050565b60006143ee828561408f565b91506143fa828461408f565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614440826139f8565b915061444b836139f8565b92508261445b5761445a614406565b5b828206905092915050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b600061449c600183614084565b91506144a782614466565b600182019050919050565b60008190508160005260206000209050919050565b600081546144d481613e02565b6144de8186614084565b945060018216600081146144f9576001811461450e57614541565b60ff1983168652811515820286019350614541565b614517856144b2565b60005b838110156145395781548189015260018201915060208101905061451a565b838801955050505b50505092915050565b6000614556828561408f565b91506145618261448f565b915061456d82846144c7565b91508190509392505050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b60006145af600183614084565b91506145ba82614579565b600182019050919050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b60006145fb600283614084565b9150614606826145c5565b600282019050919050565b600061461c826145a2565b9150614628828661408f565b91506146338261448f565b915061463f828561408f565b915061464a826145ee565b9150614656828461408f565b9150819050949350505050565b7f202b310000000000000000000000000000000000000000000000000000000000600082015250565b6000614699600383614084565b91506146a482614663565b600382019050919050565b60006146ba826145a2565b91506146c6828661408f565b91506146d18261448f565b91506146dd828561408f565b91506146e8826145ee565b91506146f4828461408f565b91506146ff8261468c565b9150819050949350505050565b60008160011c9050919050565b6000808291508390505b60018511156147635780860481111561473f5761473e613e33565b5b600185161561474e5780820291505b808102905061475c8561470c565b9450614723565b94509492505050565b60008261477c5760019050614838565b8161478a5760009050614838565b81600181146147a057600281146147aa576147d9565b6001915050614838565b60ff8411156147bc576147bb613e33565b5b8360020a9150848211156147d3576147d2613e33565b5b50614838565b5060208310610133831016604e8410600b841016171561480e5782820a90508381111561480957614808613e33565b5b614838565b61481b8484846001614719565b9250905081840481111561483257614831613e33565b5b81810290505b9392505050565b600061484a826139f8565b915061485583613bd6565b92506148827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461476c565b905092915050565b6000614895826139f8565b91506148a0836139f8565b9250826148b0576148af614406565b5b828204905092915050565b60006148c6826139f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148f8576148f7613e33565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061493d826139f8565b9150614948836139f8565b92508282019050808211156149605761495f613e33565b5b92915050565b6000614971826139f8565b915061497c836139f8565b925082820261498a816139f8565b915082820484148315176149a1576149a0613e33565b5b5092915050565b60006149b4828461408f565b91508190509291505056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f5472616e7366657228616464726573732c616464726573732c75696e74323536293c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea2646970667358221220a6e7143f45bb8ebf54640f7dd288c3ceb2f7885b9ddce632511c1e2bbc394a5f64736f6c6343000815003300000000000000000000000082e815b74793ab86c1b775b02ad2b421cde97d5800000000000000000000000000000000000000000000000000000000000001bc

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101f05760003560e01c806395d89b411161010f578063c08a5dd5116100a2578063e30c397811610071578063e30c397814610619578063e985e9c514610637578063ef68075a14610667578063f2fde38b14610697576101f0565b8063c08a5dd514610559578063c87b56dd14610589578063d47f269e146105b9578063dd62ed3e146105e9576101f0565b80639e41b73f116100de5780639e41b73f146104c1578063a22cb465146104f1578063a9059cbb1461050d578063b88d4fde1461053d576101f0565b806395d89b41146104135780639720c969146104315780639b19251a146104615780639bdc1b6914610491576101f0565b80634f02c4201161018757806370a082311161015657806370a08231146103b1578063715018a6146103e157806379ba5097146103eb5780638da5cb5b146103f5576101f0565b80634f02c4201461031757806353d6fd59146103355780636352211e1461035157806367209aa814610381576101f0565b806318160ddd116101c357806318160ddd146102a357806323b872dd146102c1578063313ce567146102dd57806342842e0e146102fb576101f0565b806306fdde03146101f5578063081812fc14610213578063095ea7b3146102435780630e99990d14610273575b600080fd5b6101fd6106b3565b60405161020a91906139cc565b60405180910390f35b61022d60048036038101906102289190613a2e565b610741565b60405161023a9190613a9c565b60405180910390f35b61025d60048036038101906102589190613ae3565b610774565b60405161026a9190613b3e565b60405180910390f35b61028d60048036038101906102889190613a2e565b610a6d565b60405161029a91906139cc565b60405180910390f35b6102ab610b87565b6040516102b89190613b68565b60405180910390f35b6102db60048036038101906102d69190613b83565b610bab565b005b6102e56113e1565b6040516102f29190613bf2565b60405180910390f35b61031560048036038101906103109190613b83565b611405565b005b61031f611538565b60405161032c9190613b68565b60405180910390f35b61034f600480360381019061034a9190613c39565b61153e565b005b61036b60048036038101906103669190613a2e565b6115a1565b6040516103789190613a9c565b60405180910390f35b61039b60048036038101906103969190613a2e565b611644565b6040516103a891906139cc565b60405180910390f35b6103cb60048036038101906103c69190613c79565b61175e565b6040516103d89190613b68565b60405180910390f35b6103e9611776565b005b6103f361178a565b005b6103fd611819565b60405161040a9190613a9c565b60405180910390f35b61041b611842565b60405161042891906139cc565b60405180910390f35b61044b60048036038101906104469190613a2e565b6118d0565b60405161045891906139cc565b60405180910390f35b61047b60048036038101906104769190613c79565b6119ea565b6040516104889190613b3e565b60405180910390f35b6104ab60048036038101906104a69190613a2e565b611a0a565b6040516104b891906139cc565b60405180910390f35b6104db60048036038101906104d69190613a2e565b611b24565b6040516104e891906139cc565b60405180910390f35b61050b60048036038101906105069190613c39565b611c3e565b005b61052760048036038101906105229190613ae3565b611d3b565b6040516105349190613b3e565b60405180910390f35b61055760048036038101906105529190613d0b565b611d50565b005b610573600480360381019061056e9190613a2e565b611e89565b60405161058091906139cc565b60405180910390f35b6105a3600480360381019061059e9190613a2e565b611fa3565b6040516105b091906139cc565b60405180910390f35b6105d360048036038101906105ce9190613a2e565b612539565b6040516105e091906139cc565b60405180910390f35b61060360048036038101906105fe9190613d93565b612653565b6040516106109190613b68565b60405180910390f35b610621612678565b60405161062e9190613a9c565b60405180910390f35b610651600480360381019061064c9190613d93565b6126a2565b60405161065e9190613b3e565b60405180910390f35b610681600480360381019061067c9190613a2e565b6126d1565b60405161068e91906139cc565b60405180910390f35b6106b160048036038101906106ac9190613c79565b6127eb565b005b600280546106c090613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546106ec90613e02565b80156107395780601f1061070e57610100808354040283529160200191610739565b820191906000526020600020905b81548152906001019060200180831161071c57829003601f168201915b505050505081565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060045482111580156107885750600082115b1561097c5760006009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156108885750600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156108bf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836007600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161096e9190613b68565b60405180910390a350610a63565b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a5a9190613b68565b60405180910390a35b6001905092915050565b6060610b80826040518060400160405280600481526020017f464f4f54000000000000000000000000000000000000000000000000000000008152506011805480602002602001604051908101604052809291908181526020016000905b82821015610b77578382906000526020600020018054610aea90613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1690613e02565b8015610b635780601f10610b3857610100808354040283529160200191610b63565b820191906000526020600020905b815481529060010190602001808311610b4657829003601f168201915b505050505081526020019060010190610acb565b50505050612898565b9050919050565b7f00000000000000000000000000000000000000000000001811bcdf965170000081565b6004548111611299576009600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610c4c576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb2576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610d755750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610de057506007600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e17576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e1f612be3565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e6d9190613e62565b92505081905550610e7c612be3565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610fe09190613e62565b81548110610ff157610ff0613e96565b5b9060005260206000200154905080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600b6000858152602001908152602001600020548154811061106357611062613e96565b5b9060005260206000200181905550600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806110c0576110bf613ec5565b5b60019003818190600052602060002001600090559055600b600083815260200190815260200160002054600b600083815260200190815260200160002081905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506111b69190613e62565b600b600084815260200190815260200160002081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001614bf1602191398051906020012061127e612be3565b60405161128b9190613b68565b60405180910390a3506113dc565b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113ce57818161134d9190613e62565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113d9848484612c17565b50505b505050565b7f000000000000000000000000000000000000000000000000000000000000001281565b611410838383610bab565b60008273ffffffffffffffffffffffffffffffffffffffff163b141580156114fc575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161149793929190613f2b565b6020604051808303816000875af11580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190613fcd565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611533576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60045481565b611546612f81565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163f576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6060611757826040518060400160405280600481526020017f4e45434b000000000000000000000000000000000000000000000000000000008152506013805480602002602001604051908101604052809291908181526020016000905b8282101561174e5783829060005260206000200180546116c190613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613e02565b801561173a5780601f1061170f5761010080835404028352916020019161173a565b820191906000526020600020905b81548152906001019060200180831161171d57829003601f168201915b5050505050815260200190600101906116a2565b50505050612898565b9050919050565b60056020528060005260406000206000915090505481565b61177e612f81565b6117886000613008565b565b6000611794613039565b90508073ffffffffffffffffffffffffffffffffffffffff166117b5612678565b73ffffffffffffffffffffffffffffffffffffffff161461180d57806040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118049190613a9c565b60405180910390fd5b61181681613008565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461184f90613e02565b80601f016020809104026020016040519081016040528092919081815260200182805461187b90613e02565b80156118c85780601f1061189d576101008083540402835291602001916118c8565b820191906000526020600020905b8154815290600101906020018083116118ab57829003601f168201915b505050505081565b60606119e3826040518060400160405280600481526020017f4845414400000000000000000000000000000000000000000000000000000000815250600f805480602002602001604051908101604052809291908181526020016000905b828210156119da57838290600052602060002001805461194d90613e02565b80601f016020809104026020016040519081016040528092919081815260200182805461197990613e02565b80156119c65780601f1061199b576101008083540402835291602001916119c6565b820191906000526020600020905b8154815290600101906020018083116119a957829003601f168201915b50505050508152602001906001019061192e565b50505050612898565b9050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6060611b1d826040518060400160405280600581526020017f57414953540000000000000000000000000000000000000000000000000000008152506010805480602002602001604051908101604052809291908181526020016000905b82821015611b14578382906000526020600020018054611a8790613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab390613e02565b8015611b005780601f10611ad557610100808354040283529160200191611b00565b820191906000526020600020905b815481529060010190602001808311611ae357829003601f168201915b505050505081526020019060010190611a68565b50505050612898565b9050919050565b6060611c37826040518060400160405280600681526020017f574541504f4e0000000000000000000000000000000000000000000000000000815250600d805480602002602001604051908101604052809291908181526020016000905b82821015611c2e578382906000526020600020018054611ba190613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd90613e02565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b505050505081526020019060010190611b82565b50505050612898565b9050919050565b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d2f9190613b3e565b60405180910390a35050565b6000611d48338484612c17565b905092915050565b611d5b858585610bab565b60008473ffffffffffffffffffffffffffffffffffffffff163b14158015611e4b575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401611de6959493929190614036565b6020604051808303816000875af1158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190613fcd565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611e82576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6060611f9c826040518060400160405280600481526020017f52494e47000000000000000000000000000000000000000000000000000000008152506014805480602002602001604051908101604052809291908181526020016000905b82821015611f93578382906000526020600020018054611f0690613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3290613e02565b8015611f7f5780601f10611f5457610100808354040283529160200191611f7f565b820191906000526020600020905b815481529060010190602001808311611f6257829003601f168201915b505050505081526020019060010190611ee7565b50505050612898565b9050919050565b6060611fad6138ed565b60405180610120016040528060fd8152602001614a8b60fd913981600060118110611fdb57611fda613e96565b5b6020020181905250611fec83611b24565b8160016011811061200057611fff613e96565b5b6020020181905250604051806060016040528060288152602001614c12602891398160026011811061203557612034613e96565b5b6020020181905250612046836126d1565b8160036011811061205a57612059613e96565b5b60200201819052506040518060600160405280602881526020016149c0602891398160046011811061208f5761208e613e96565b5b60200201819052506120a0836118d0565b816005601181106120b4576120b3613e96565b5b6020020181905250604051806060016040528060288152602001614a3a60289139816006601181106120e9576120e8613e96565b5b60200201819052506120fa83611a0a565b8160076011811061210e5761210d613e96565b5b6020020181905250604051806060016040528060298152602001614a62602991398160086011811061214357612142613e96565b5b602002018190525061215483610a6d565b8160096011811061216857612167613e96565b5b6020020181905250604051806060016040528060298152602001614a116029913981600a6011811061219d5761219c613e96565b5b60200201819052506121ae83612539565b81600b601181106121c2576121c1613e96565b5b6020020181905250604051806060016040528060298152602001614b886029913981600c601181106121f7576121f6613e96565b5b602002018190525061220883611644565b81600d6011811061221c5761221b613e96565b5b60200201819052506040518060600160405280602981526020016149e86029913981600e6011811061225157612250613e96565b5b602002018190525061226283611e89565b81600f6011811061227657612275613e96565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e00000000000000000000000000000000000000815250816010601181106122c8576122c7613e96565b5b60200201819052506000816000601181106122e6576122e5613e96565b5b6020020151826001601181106122ff576122fe613e96565b5b60200201518360026011811061231857612317613e96565b5b60200201518460036011811061233157612330613e96565b5b60200201518560046011811061234a57612349613e96565b5b60200201518660056011811061236357612362613e96565b5b60200201518760066011811061237c5761237b613e96565b5b60200201518860076011811061239557612394613e96565b5b6020020151896008601181106123ae576123ad613e96565b5b60200201516040516020016123cb999897969594939291906140c0565b604051602081830303815290604052905080826009601181106123f1576123f0613e96565b5b602002015183600a6011811061240a57612409613e96565b5b602002015184600b6011811061242357612422613e96565b5b602002015185600c6011811061243c5761243b613e96565b5b602002015186600d6011811061245557612454613e96565b5b602002015187600e6011811061246e5761246d613e96565b5b602002015188600f6011811061248757612486613e96565b5b6020020151896010601181106124a05761249f613e96565b5b60200201516040516020016124bd999897969594939291906140c0565b6040516020818303038152906040529050600061250a6124dc86613041565b6124e5846131a1565b6040516020016124f692919061432f565b6040516020818303038152906040526131a1565b90508060405160200161251d91906143c0565b6040516020818303038152906040529150819350505050919050565b606061264c826040518060400160405280600481526020017f48414e44000000000000000000000000000000000000000000000000000000008152506012805480602002602001604051908101604052809291908181526020016000905b828210156126435783829060005260206000200180546125b690613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546125e290613e02565b801561262f5780601f106126045761010080835404028352916020019161262f565b820191906000526020600020905b81548152906001019060200180831161261257829003601f168201915b505050505081526020019060010190612597565b50505050612898565b9050919050565b6006602052816000526040600020602052806000526040600020600091509150505481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60606127e4826040518060400160405280600581526020017f4348455354000000000000000000000000000000000000000000000000000000815250600e805480602002602001604051908101604052809291908181526020016000905b828210156127db57838290600052602060002001805461274e90613e02565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613e02565b80156127c75780601f1061279c576101008083540402835291602001916127c7565b820191906000526020600020905b8154815290600101906020018083116127aa57829003601f168201915b50505050508152602001906001019061272f565b50505050612898565b9050919050565b6127f3612f81565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16612853611819565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b606060006128ce846128a987613041565b6040516020016128ba9291906143e2565b604051602081830303815290604052613304565b90506000838451836128e09190614435565b815181106128f1576128f0613e96565b5b60200260200101519050600060158361290a9190614435565b9050600e811115612966578160158080549050856129289190614435565b8154811061293957612938613e96565b5b9060005260206000200160405160200161295492919061454a565b60405160208183030381529060405291505b60138110612bd657612976613915565b60168080549050856129889190614435565b8154811061299957612998613e96565b5b9060005260206000200180546129ae90613e02565b80601f01602080910402602001604051908101604052809291908181526020018280546129da90613e02565b8015612a275780601f106129fc57610100808354040283529160200191612a27565b820191906000526020600020905b815481529060010190602001808311612a0a57829003601f168201915b505050505081600060028110612a4057612a3f613e96565b5b60200201819052506017808054905085612a5a9190614435565b81548110612a6b57612a6a613e96565b5b906000526020600020018054612a8090613e02565b80601f0160208091040260200160405190810160405280929190818152602001828054612aac90613e02565b8015612af95780601f10612ace57610100808354040283529160200191612af9565b820191906000526020600020905b815481529060010190602001808311612adc57829003601f168201915b505050505081600160028110612b1257612b11613e96565b5b602002018190525060138203612b7d5780600060028110612b3657612b35613e96565b5b602002015181600160028110612b4f57612b4e613e96565b5b602002015184604051602001612b6793929190614611565b6040516020818303038152906040529250612bd4565b80600060028110612b9157612b90613e96565b5b602002015181600160028110612baa57612ba9613e96565b5b602002015184604051602001612bc2939291906146af565b60405160208183030381529060405292505b505b8193505050509392505050565b60007f0000000000000000000000000000000000000000000000000000000000000012600a612c12919061483f565b905090565b600080612c22612be3565b90506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cfb9190613e62565b9250508190555084600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e2f57600083600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ded919061488a565b8484612df9919061488a565b612e039190613e62565b905060005b81811015612e2c57612e1989613337565b8080612e24906148bb565b915050612e08565b50505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0f5760008382612e8e919061488a565b84600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed9919061488a565b612ee39190613e62565b905060005b81811015612f0c57612ef988613593565b8080612f04906148bb565b915050612ee8565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060218152602001614bf1602191398051906020012087604051612f6b9190613b68565b60405180910390a3600193505050509392505050565b612f89613039565b73ffffffffffffffffffffffffffffffffffffffff16612fa7611819565b73ffffffffffffffffffffffffffffffffffffffff161461300657612fca613039565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612ffd9190613a9c565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561303681613829565b50565b600033905090565b606060008203613088576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061319c565b600082905060005b600082146130ba5780806130a3906148bb565b915050600a826130b3919061488a565b9150613090565b60008167ffffffffffffffff8111156130d6576130d5614903565b5b6040519080825280601f01601f1916602001820160405280156131085781602001600182028036833780820191505090505b5090505b60008514613195576001826131219190613e62565b9150600a856131309190614435565b603061313c9190614932565b60f81b81838151811061315257613151613e96565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561318e919061488a565b945061310c565b8093505050505b919050565b606060008251036131c3576040518060200160405280600081525090506132ff565b6000604051806060016040528060408152602001614bb160409139905060006003600285516131f29190614932565b6131fc919061488a565b60046132089190614966565b67ffffffffffffffff81111561322157613220614903565b5b6040519080825280601f01601f1916602001820160405280156132535781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156132bf576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050613264565b50506003865106600181146132db57600281146132ee576132f6565b603d6001830353603d60028303536132f6565b603d60018303535b50505080925050505b919050565b60008160405160200161331791906149a8565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361339d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061342d9190613e62565b8154811061343e5761343d613e96565b5b90600052602060002001549050600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061349a57613499613ec5565b5b60019003818190600052602060002001600090559055600b6000828152602001908152602001600020600090556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036135f9576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60046000815480929190600101919050555060006004549050600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146136ab576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150556001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506137b29190613e62565b600b600083815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518061022001604052806011905b60608152602001906001900390816138fd5790505090565b60405180604001604052806002905b60608152602001906001900390816139245790505090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561397657808201518184015260208101905061395b565b60008484015250505050565b6000601f19601f8301169050919050565b600061399e8261393c565b6139a88185613947565b93506139b8818560208601613958565b6139c181613982565b840191505092915050565b600060208201905081810360008301526139e68184613993565b905092915050565b600080fd5b600080fd5b6000819050919050565b613a0b816139f8565b8114613a1657600080fd5b50565b600081359050613a2881613a02565b92915050565b600060208284031215613a4457613a436139ee565b5b6000613a5284828501613a19565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a8682613a5b565b9050919050565b613a9681613a7b565b82525050565b6000602082019050613ab16000830184613a8d565b92915050565b613ac081613a7b565b8114613acb57600080fd5b50565b600081359050613add81613ab7565b92915050565b60008060408385031215613afa57613af96139ee565b5b6000613b0885828601613ace565b9250506020613b1985828601613a19565b9150509250929050565b60008115159050919050565b613b3881613b23565b82525050565b6000602082019050613b536000830184613b2f565b92915050565b613b62816139f8565b82525050565b6000602082019050613b7d6000830184613b59565b92915050565b600080600060608486031215613b9c57613b9b6139ee565b5b6000613baa86828701613ace565b9350506020613bbb86828701613ace565b9250506040613bcc86828701613a19565b9150509250925092565b600060ff82169050919050565b613bec81613bd6565b82525050565b6000602082019050613c076000830184613be3565b92915050565b613c1681613b23565b8114613c2157600080fd5b50565b600081359050613c3381613c0d565b92915050565b60008060408385031215613c5057613c4f6139ee565b5b6000613c5e85828601613ace565b9250506020613c6f85828601613c24565b9150509250929050565b600060208284031215613c8f57613c8e6139ee565b5b6000613c9d84828501613ace565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ccb57613cca613ca6565b5b8235905067ffffffffffffffff811115613ce857613ce7613cab565b5b602083019150836001820283011115613d0457613d03613cb0565b5b9250929050565b600080600080600060808688031215613d2757613d266139ee565b5b6000613d3588828901613ace565b9550506020613d4688828901613ace565b9450506040613d5788828901613a19565b935050606086013567ffffffffffffffff811115613d7857613d776139f3565b5b613d8488828901613cb5565b92509250509295509295909350565b60008060408385031215613daa57613da96139ee565b5b6000613db885828601613ace565b9250506020613dc985828601613ace565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e1a57607f821691505b602082108103613e2d57613e2c613dd3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e6d826139f8565b9150613e78836139f8565b9250828203905081811115613e9057613e8f613e33565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600082825260208201905092915050565b50565b6000613f15600083613ef4565b9150613f2082613f05565b600082019050919050565b6000608082019050613f406000830186613a8d565b613f4d6020830185613a8d565b613f5a6040830184613b59565b8181036060830152613f6b81613f08565b9050949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613faa81613f75565b8114613fb557600080fd5b50565b600081519050613fc781613fa1565b92915050565b600060208284031215613fe357613fe26139ee565b5b6000613ff184828501613fb8565b91505092915050565b82818337600083830152505050565b60006140158385613ef4565b9350614022838584613ffa565b61402b83613982565b840190509392505050565b600060808201905061404b6000830188613a8d565b6140586020830187613a8d565b6140656040830186613b59565b8181036060830152614078818486614009565b90509695505050505050565b600081905092915050565b600061409a8261393c565b6140a48185614084565b93506140b4818560208601613958565b80840191505092915050565b60006140cc828c61408f565b91506140d8828b61408f565b91506140e4828a61408f565b91506140f0828961408f565b91506140fc828861408f565b9150614108828761408f565b9150614114828661408f565b9150614120828561408f565b915061412c828461408f565b91508190509a9950505050505050505050565b7f7b226e616d65223a202242616720230000000000000000000000000000000000600082015250565b6000614175600f83614084565b91506141808261413f565b600f82019050919050565b7f222c20226465736372697074696f6e223a20224c6f6f742069732072616e646f60008201527f6d697a656420616476656e747572657220676561722067656e6572617465642060208201527f616e642073746f726564206f6e20636861696e2e2053746174732c20696d616760408201527f65732c20616e64206f746865722066756e6374696f6e616c697479206172652060608201527f696e74656e74696f6e616c6c79206f6d697474656420666f72206f746865727360808201527f20746f20696e746572707265742e204665656c206672656520746f207573652060a08201527f4c6f6f7420696e20616e792077617920796f752077616e742e222c2022696d6160c08201527f6765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342c60e082015250565b60006142cc61010083614084565b91506142d78261418b565b61010082019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614319600283614084565b9150614324826142e3565b600282019050919050565b600061433a82614168565b9150614346828561408f565b9150614351826142be565b915061435d828461408f565b91506143688261430c565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b60006143aa601d83614084565b91506143b582614374565b601d82019050919050565b60006143cb8261439d565b91506143d7828461408f565b915081905092915050565b60006143ee828561408f565b91506143fa828461408f565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614440826139f8565b915061444b836139f8565b92508261445b5761445a614406565b5b828206905092915050565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b600061449c600183614084565b91506144a782614466565b600182019050919050565b60008190508160005260206000209050919050565b600081546144d481613e02565b6144de8186614084565b945060018216600081146144f9576001811461450e57614541565b60ff1983168652811515820286019350614541565b614517856144b2565b60005b838110156145395781548189015260018201915060208101905061451a565b838801955050505b50505092915050565b6000614556828561408f565b91506145618261448f565b915061456d82846144c7565b91508190509392505050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b60006145af600183614084565b91506145ba82614579565b600182019050919050565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b60006145fb600283614084565b9150614606826145c5565b600282019050919050565b600061461c826145a2565b9150614628828661408f565b91506146338261448f565b915061463f828561408f565b915061464a826145ee565b9150614656828461408f565b9150819050949350505050565b7f202b310000000000000000000000000000000000000000000000000000000000600082015250565b6000614699600383614084565b91506146a482614663565b600382019050919050565b60006146ba826145a2565b91506146c6828661408f565b91506146d18261448f565b91506146dd828561408f565b91506146e8826145ee565b91506146f4828461408f565b91506146ff8261468c565b9150819050949350505050565b60008160011c9050919050565b6000808291508390505b60018511156147635780860481111561473f5761473e613e33565b5b600185161561474e5780820291505b808102905061475c8561470c565b9450614723565b94509492505050565b60008261477c5760019050614838565b8161478a5760009050614838565b81600181146147a057600281146147aa576147d9565b6001915050614838565b60ff8411156147bc576147bb613e33565b5b8360020a9150848211156147d3576147d2613e33565b5b50614838565b5060208310610133831016604e8410600b841016171561480e5782820a90508381111561480957614808613e33565b5b614838565b61481b8484846001614719565b9250905081840481111561483257614831613e33565b5b81810290505b9392505050565b600061484a826139f8565b915061485583613bd6565b92506148827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461476c565b905092915050565b6000614895826139f8565b91506148a0836139f8565b9250826148b0576148af614406565b5b828204905092915050565b60006148c6826139f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148f8576148f7613e33565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061493d826139f8565b9150614948836139f8565b92508282019050808211156149605761495f613e33565b5b92915050565b6000614971826139f8565b915061497c836139f8565b925082820261498a816139f8565b915082820484148315176149a1576149a0613e33565b5b5092915050565b60006149b4828461408f565b91508190509291505056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f5472616e7366657228616464726573732c616464726573732c75696e74323536293c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223ea2646970667358221220a6e7143f45bb8ebf54640f7dd288c3ceb2f7885b9ddce632511c1e2bbc394a5f64736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000082e815b74793ab86c1b775b02ad2b421cde97d5800000000000000000000000000000000000000000000000000000000000001bc

-----Decoded View---------------
Arg [0] : _owner (address): 0x82E815B74793AB86c1b775b02Ad2B421CdE97D58
Arg [1] : _totalSupply (uint256): 444

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000082e815b74793ab86c1b775b02ad2b421cde97d58
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001bc


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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