Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,288 WVG0
Holders
192
Market
Price
$103.07 @ 0.032634 ETH
Onchain Market Cap
$132,754.16
Circulating Supply Market Cap
$132,757.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
47.009998193677591619 WVG0Value
$4,845.32 ( ~1.5341 Eth) [3.6498%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WrappedVG0
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-02-12 */ pragma solidity ^0.5.8; /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ interface IERC20 { function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md * Originally based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol * * This implementation emits additional Approval events, allowing applications to reconstruct the allowance status for * all accounts just by listening to said events. Note that this isn't required by the specification, and other * compliant implementations may not do it. */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another. * Note that while this function emits an Approval event, this is not required as per the specification, * and other compliant implementations may not emit the event. * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom(address from, address to, uint256 value) public returns (bool) { _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value); _transfer(from, to, value); emit Approval(from, msg.sender, _allowed[from][msg.sender]); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * Emits an Approval event. * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = _allowed[msg.sender][spender].sub(subtractedValue); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != address(0)); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * Emits an Approval event (reflecting the reduced allowance). * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value); _burn(account, value); emit Approval(account, msg.sender, _allowed[account][msg.sender]); } } /** * @title Helps contracts guard against reentrancy attacks. * @author Remco Bloemen <remco@2π.com>, Eenae <[email protected]> * @dev If you mark a function `nonReentrant`, you should also * mark it `external`. */ contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor() public { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter); } } /// @title Main contract for Wrapped VG0. This contract converts Virgin Gen 0 Cryptokitties between the ERC721 standard /// and the ERC20 standard by locking cryptokitties into the contract and minting 1:1 backed ERC20 tokens, that /// can then be redeemed for cryptokitties when desired. This concept originated with WCK (Wrapped Cryptokitties). /// This code is only a very slight modification of the original contract; It simply adds the Gen 0 requirement, /// the fast cooldown requirement, and the getKitty interfacing. /// /// @notice When wrapping a cryptokitty, you get a generic WVG0 token. Since the WVG0 token is generic, it has no /// no information about what cryptokitty you submitted, so you will most likely not receive the same kitty /// back when redeeming the token unless you specify that kitty's ID. The token only entitles you to receive /// *a* cryptokitty in return, not necessarily the *same* cryptokitty in return. A different user can submit /// their own WVG0 tokens to the contract and withdraw the kitty that you originally deposited. WVG0 tokens have /// no information about which kitty was originally deposited to mint WVG0 - this is due to the very nature of /// the ERC20 standard being fungible, and the ERC721 standard being nonfungible. contract WrappedVG0 is ERC20, ReentrancyGuard { // OpenZeppelin's SafeMath library is used for all arithmetic operations to avoid overflows/underflows. using SafeMath for uint256; /* ****** */ /* EVENTS */ /* ****** */ /// @dev This event is fired when a user deposits cryptokitties into the contract in exchange /// for an equal number of WVG0 ERC20 tokens. /// @param kittyId The cryptokitty id of the kitty that was deposited into the contract. event DepositKittyAndMintToken( uint256 kittyId ); /// @dev This event is fired when a user deposits WVG0 ERC20 tokens into the contract in exchange /// for an equal number of locked cryptokitties. /// @param kittyId The cryptokitty id of the kitty that was withdrawn from the contract. event BurnTokenAndWithdrawKitty( uint256 kittyId ); /* ******* */ /* STORAGE */ /* ******* */ /// @dev An Array containing all of the cryptokitties that are locked in the contract, backing /// WVG0 ERC20 tokens 1:1 /// @notice Some of the kitties in this array were indeed deposited to the contract, but they /// are no longer held by the contract. This is because withdrawSpecificKitty() allows a /// user to withdraw a kitty "out of order". Since it would be prohibitively expensive to /// shift the entire array once we've withdrawn a single element, we instead maintain this /// mapping to determine whether an element is still contained in the contract or not. uint256[] private depositedKittiesArray; /// @dev A mapping keeping track of which kittyIDs are currently contained within the contract. /// @notice We cannot rely on depositedKittiesArray as the source of truth as to which cats are /// deposited in the contract. This is because burnTokensAndWithdrawKitties() allows a user to /// withdraw a kitty "out of order" of the order that they are stored in the array. Since it /// would be prohibitively expensive to shift the entire array once we've withdrawn a single /// element, we instead maintain this mapping to determine whether an element is still contained /// in the contract or not. mapping (uint256 => bool) private kittyIsDepositedInContract; /* ********* */ /* CONSTANTS */ /* ********* */ /// @dev The metadata details about the "Wrapped Virgin Gen0" WVG0 ERC20 token. uint8 constant public decimals = 18; string constant public name = "Wrapped Virgin Gen 0"; string constant public symbol = "WVG0"; /// @dev The address of official CryptoKitties contract that stores the metadata about each cat. /// @notice The owner is not capable of changing the address of the CryptoKitties Core contract /// once the contract has been deployed. address public kittyCoreAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d; KittyCore kittyCore; /* ********* */ /* FUNCTIONS */ /* ********* */ /// @notice Allows a user to lock cryptokitties in the contract in exchange for an equal number /// of WVG0 ERC20 tokens. /// @param _kittyIds The ids of the cryptokitties that will be locked into the contract. /// @notice The user must first call approve() in the Cryptokitties Core contract on each kitty /// that thye wish to deposit before calling depositKittiesAndMintTokens(). There is no danger /// of this contract overreaching its approval, since the CryptoKitties Core contract's approve() /// function only approves this contract for a single Cryptokitty. Calling approve() allows this /// contract to transfer the specified kitty in the depositKittiesAndMintTokens() function. function depositKittiesAndMintTokens(uint256[] calldata _kittyIds) external nonReentrant { require(_kittyIds.length > 0, 'you must submit an array with at least one element'); for(uint i = 0; i < _kittyIds.length; i++){ uint256 kittyToDeposit = _kittyIds[i]; uint256 kittyCooldown; uint256 kittyGen; (,,kittyCooldown,,,,,,kittyGen,) = kittyCore.getKitty(kittyToDeposit); require(msg.sender == kittyCore.ownerOf(kittyToDeposit), 'you do not own this cat'); require(kittyCore.kittyIndexToApproved(kittyToDeposit) == address(this), 'you must approve() this contract before you can deposit a cat'); require(kittyGen == 0, 'this cat must be generation 0'); require(kittyCooldown == 0, 'cooldown must be fast'); kittyCore.transferFrom(msg.sender, address(this), kittyToDeposit); _pushKitty(kittyToDeposit); emit DepositKittyAndMintToken(kittyToDeposit); } _mint(msg.sender, (_kittyIds.length).mul(10**18)); } /// @notice Allows a user to burn WVG0 ERC20 tokens in exchange for an equal number of locked /// cryptokitties. /// @param _kittyIds The IDs of the kitties that the user wishes to withdraw. If the user submits 0 /// as the ID for any kitty, the contract uses the last kitty in the array for that kitty. /// @param _destinationAddresses The addresses that the withdrawn kitties will be sent to (this allows /// anyone to "airdrop" kitties to addresses that they do not own in a single transaction). function burnTokensAndWithdrawKitties(uint256[] calldata _kittyIds, address[] calldata _destinationAddresses) external nonReentrant { require(_kittyIds.length == _destinationAddresses.length, 'you did not provide a destination address for each of the cats you wish to withdraw'); require(_kittyIds.length > 0, 'you must submit an array with at least one element'); uint256 numTokensToBurn = _kittyIds.length; require(balanceOf(msg.sender) >= numTokensToBurn.mul(10**18), 'you do not own enough tokens to withdraw this many ERC721 cats'); _burn(msg.sender, numTokensToBurn.mul(10**18)); for(uint i = 0; i < numTokensToBurn; i++){ uint256 kittyToWithdraw = _kittyIds[i]; if(kittyToWithdraw == 0){ kittyToWithdraw = _popKitty(); } else { require(kittyIsDepositedInContract[kittyToWithdraw] == true, 'this kitty has already been withdrawn'); require(address(this) == kittyCore.ownerOf(kittyToWithdraw), 'the contract does not own this cat'); kittyIsDepositedInContract[kittyToWithdraw] = false; } kittyCore.transfer(_destinationAddresses[i], kittyToWithdraw); emit BurnTokenAndWithdrawKitty(kittyToWithdraw); } } /// @notice Adds a locked cryptokitty to the end of the array /// @param _kittyId The id of the cryptokitty that will be locked into the contract. function _pushKitty(uint256 _kittyId) internal { depositedKittiesArray.push(_kittyId); kittyIsDepositedInContract[_kittyId] = true; } /// @notice Removes an unlocked cryptokitty from the end of the array /// @notice The reason that this function must check if the kittyIsDepositedInContract /// is that the withdrawSpecificKitty() function allows a user to withdraw a kitty /// from the array out of order. /// @return The id of the cryptokitty that will be unlocked from the contract. function _popKitty() internal returns(uint256){ require(depositedKittiesArray.length > 0, 'there are no cats in the array'); uint256 kittyId = depositedKittiesArray[depositedKittiesArray.length - 1]; depositedKittiesArray.length--; while(kittyIsDepositedInContract[kittyId] == false){ kittyId = depositedKittiesArray[depositedKittiesArray.length - 1]; depositedKittiesArray.length--; } kittyIsDepositedInContract[kittyId] = false; return kittyId; } /// @notice Removes any kitties that exist in the array but are no longer held in the /// contract, which happens if the first few kitties have previously been withdrawn /// out of order using the withdrawSpecificKitty() function. /// @notice This function exists to prevent a griefing attack where a malicious attacker /// could call withdrawSpecificKitty() on a large number of kitties at the front of the /// array, causing the while-loop in _popKitty to always run out of gas. /// @param _numSlotsToCheck The number of slots to check in the array. function batchRemoveWithdrawnKittiesFromStorage(uint256 _numSlotsToCheck) external { require(_numSlotsToCheck <= depositedKittiesArray.length, 'you are trying to batch remove more slots than exist in the array'); uint256 arrayIndex = depositedKittiesArray.length; for(uint i = 0; i < _numSlotsToCheck; i++){ arrayIndex = arrayIndex.sub(1); uint256 kittyId = depositedKittiesArray[arrayIndex]; if(kittyIsDepositedInContract[kittyId] == false){ depositedKittiesArray.length--; } else { return; } } } /// @notice The owner is not capable of changing the address of the CryptoKitties Core /// contract once the contract has been deployed. constructor() public { kittyCore = KittyCore(kittyCoreAddress); } /// @dev We leave the fallback function payable in case the current State Rent proposals require /// us to send funds to this contract to keep it alive on mainnet. /// @notice There is no function that allows the contract creator to withdraw any funds sent /// to this contract, so any funds sent directly to the fallback function that are not used for /// State Rent are lost forever. function() external payable {} } /// @title Interface for interacting with the CryptoKitties Core contract created by Dapper Labs Inc. contract KittyCore { function ownerOf(uint256 _tokenId) public view returns (address owner); function transferFrom(address _from, address _to, uint256 _tokenId) external; function transfer(address _to, uint256 _tokenId) external; function getKitty(uint256 _id) public view returns (bool,bool,uint256 _cooldownIndex,uint256,uint256,uint256,uint256,uint256,uint256 _generation,uint256); mapping (uint256 => address) public kittyIndexToApproved; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kittyIds","type":"uint256[]"},{"name":"_destinationAddresses","type":"address[]"}],"name":"burnTokensAndWithdrawKitties","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kittyCoreAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_numSlotsToCheck","type":"uint256"}],"name":"batchRemoveWithdrawnKittiesFromStorage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_kittyIds","type":"uint256[]"}],"name":"depositKittiesAndMintTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"kittyId","type":"uint256"}],"name":"DepositKittyAndMintToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"kittyId","type":"uint256"}],"name":"BurnTokenAndWithdrawKitty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60806040527306012c8cf97bead5deae237070f9587f8e7a266d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b506001600381905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612612806100e06000396000f3fe6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf0565b6040518082815260200191505060405180910390f35b6040518060400160405280601481526020017f577261707065642056697267696e2047656e203000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260538152602001806125346053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611d7790919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612587603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611d7790919063ffffffff16565b611db1565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611f03565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061245f6025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125c56022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484612077565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806124846041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c5761132060018361205790919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611386576004805480919060019003611380919061240d565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600481526020017f575647300000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484612077565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008090505b83839050811015611cb55760008484838181106116ba57fe5b905060200201359050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98b7f4d846040518263ffffffff1660e01b8152600401808281526020019150506101406040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d61014081101561176557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929394959697985090919293949596975090919293949550909192939450909192935090919250909150508092508193505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119dd57600080fd5b505afa1580156119f1573d6000803e3d6000fd5b505050506040513d6020811015611a0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806124c5603d913960400191505060405180910390fd5b60008114611afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320636174206d7573742062652067656e65726174696f6e203000000081525060200191505060405180910390fd5b60008214611b70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f636f6f6c646f776e206d7573742062652066617374000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b50505050611c6e83612260565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010836040518082815260200191505060405180910390a150505080806001019150506116a1565b50611cdd33611cd8670de0b6b3a764000086869050611d7790919063ffffffff16565b6122bb565b6003548114611ceb57600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611d8a5760009050611dab565b6000828402905082848281611d9b57fe5b0414611da657600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611deb57600080fd5b611e008160025461205790919063ffffffff16565b600281905550611e57816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611f7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611f9657fe5b906000526020600020015490506004805480919060019003611fb8919061240d565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff161515141561202457600460016004805490500381548110611ffc57fe5b90600052602060002001549050600480548091906001900361201e919061240d565b50611fba565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b60008282111561206657600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b157600080fd5b612102816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612195816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082840190508381101561225657600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f557600080fd5b61230a8160025461224190919063ffffffff16565b600281905550612361816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b815481835581811115612434578183600052602060002091820191016124339190612439565b5b505050565b61245b91905b8082111561245757600081600090555060010161243f565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d75737420617070726f76652829207468697320636f6e7472616374206265666f726520796f752063616e206465706f736974206120636174796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a723058208ed7878df81f2ce1f94bf51235228bec493de1da64fcdbcab1267c5fe53b7b4e0029
Deployed Bytecode
0x6080604052600436106100e85760003560e01c8063395093511161008a578063a457c2d711610059578063a457c2d7146105b1578063a9059cbb14610624578063b38de03014610697578063dd62ed3e1461071d576100e8565b8063395093511461040e57806370a08231146104815780638a8d413e146104e657806395d89b4114610521576100e8565b806318160ddd116100c657806318160ddd146102c857806323b872dd146102f35780632c2ccdfb14610386578063313ce567146103dd576100e8565b806306fdde03146100ea578063095ea7b31461017a57806317a09fb7146101ed575b005b3480156100f657600080fd5b506100ff6107a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013f578082015181840152602081019050610124565b50505050905090810190601f16801561016c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018657600080fd5b506101d36004803603604081101561019d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107db565b604051808215151515815260200191505060405180910390f35b3480156101f957600080fd5b506102c66004803603604081101561021057600080fd5b810190808035906020019064010000000081111561022d57600080fd5b82018360208201111561023f57600080fd5b8035906020019184602083028401116401000000008311171561026157600080fd5b90919293919293908035906020019064010000000081111561028257600080fd5b82018360208201111561029457600080fd5b803590602001918460208302840111640100000000831117156102b657600080fd5b9091929391929390505050610906565b005b3480156102d457600080fd5b506102dd610ddc565b6040518082815260200191505060405180910390f35b3480156102ff57600080fd5b5061036c6004803603606081101561031657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de6565b604051808215151515815260200191505060405180910390f35b34801561039257600080fd5b5061039b610fee565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103e957600080fd5b506103f2611014565b604051808260ff1660ff16815260200191505060405180910390f35b34801561041a57600080fd5b506104676004803603604081101561043157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b34801561048d57600080fd5b506104d0600480360360208110156104a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124e565b6040518082815260200191505060405180910390f35b3480156104f257600080fd5b5061051f6004803603602081101561050957600080fd5b8101908080359060200190929190505050611296565b005b34801561052d57600080fd5b506105366113a2565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561057657808201518184015260208101905061055b565b50505050905090810190601f1680156105a35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105bd57600080fd5b5061060a600480360360408110156105d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113db565b604051808215151515815260200191505060405180910390f35b34801561063057600080fd5b5061067d6004803603604081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611610565b604051808215151515815260200191505060405180910390f35b3480156106a357600080fd5b5061071b600480360360208110156106ba57600080fd5b81019080803590602001906401000000008111156106d757600080fd5b8201836020820111156106e957600080fd5b8035906020019184602083028401116401000000008311171561070b57600080fd5b9091929391929390505050611627565b005b34801561072957600080fd5b5061078c6004803603604081101561074057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf0565b6040518082815260200191505060405180910390f35b6040518060400160405280601481526020017f577261707065642056697267696e2047656e203000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561081657600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60016003600082825401925050819055506000600354905082829050858590501461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260538152602001806125346053913960600191505060405180910390fd5b600085859050116109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008585905090506109fb670de0b6b3a764000082611d7790919063ffffffff16565b610a043361124e565b1015610a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e815260200180612587603e913960400191505060405180910390fd5b610a7f33610a7a670de0b6b3a764000084611d7790919063ffffffff16565b611db1565b60008090505b81811015610dc5576000878783818110610a9b57fe5b9050602002013590506000811415610abc57610ab5611f03565b9050610c97565b600115156005600083815260200190815260200160002060009054906101000a900460ff16151514610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061245f6025913960400191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610bac57600080fd5b505afa158015610bc0573d6000803e3d6000fd5b505050506040513d6020811015610bd657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125c56022913960400191505060405180910390fd5b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb878785818110610ce157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050507f2f467b677a4a63395bce26e8731fa49a02cd892ddeaf266650b403f140ba4590816040518082815260200191505060405180910390a1508080600101915050610a85565b50506003548114610dd557600080fd5b5050505050565b6000600254905090565b6000610e7782600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f02848484612077565b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600190509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601281565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561105457600080fd5b6110e382600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6004805490508111156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260418152602001806124846041913960600191505060405180910390fd5b6000600480549050905060008090505b8281101561139c5761132060018361205790919063ffffffff16565b915060006004838154811061133157fe5b90600052602060002001549050600015156005600083815260200190815260200160002060009054906101000a900460ff1615151415611386576004805480919060019003611380919061240d565b5061138e565b50505061139f565b508080600101915050611304565b50505b50565b6040518060400160405280600481526020017f575647300000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561141657600080fd5b6114a582600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b600061161d338484612077565b6001905092915050565b6001600360008282540192505081905550600060035490506000838390501161169b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806125026032913960400191505060405180910390fd5b60008090505b83839050811015611cb55760008484838181106116ba57fe5b905060200201359050600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98b7f4d846040518263ffffffff1660e01b8152600401808281526020019150506101406040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d61014081101561176557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509091929394959697985090919293949596975090919293949550909192939450909192935090919250909150508092508193505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561187857600080fd5b505afa15801561188c573d6000803e3d6000fd5b505050506040513d60208110156118a257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646f206e6f74206f776e20746869732063617400000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663481af3d3856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119dd57600080fd5b505afa1580156119f1573d6000803e3d6000fd5b505050506040513d6020811015611a0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806124c5603d913960400191505060405180910390fd5b60008114611afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320636174206d7573742062652067656e65726174696f6e203000000081525060200191505060405180910390fd5b60008214611b70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f636f6f6c646f776e206d7573742062652066617374000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b50505050611c6e83612260565b7f999fa95b06ad12b3436bab902713e383705707923f9d7c75f5432b28a6487010836040518082815260200191505060405180910390a150505080806001019150506116a1565b50611cdd33611cd8670de0b6b3a764000086869050611d7790919063ffffffff16565b6122bb565b6003548114611ceb57600080fd5b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080831415611d8a5760009050611dab565b6000828402905082848281611d9b57fe5b0414611da657600080fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611deb57600080fd5b611e008160025461205790919063ffffffff16565b600281905550611e57816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060048054905011611f7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f746865726520617265206e6f206361747320696e20746865206172726179000081525060200191505060405180910390fd5b6000600460016004805490500381548110611f9657fe5b906000526020600020015490506004805480919060019003611fb8919061240d565b505b600015156005600083815260200190815260200160002060009054906101000a900460ff161515141561202457600460016004805490500381548110611ffc57fe5b90600052602060002001549050600480548091906001900361201e919061240d565b50611fba565b60006005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505090565b60008282111561206657600080fd5b600082840390508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b157600080fd5b612102816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461205790919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612195816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082840190508381101561225657600080fd5b8091505092915050565b600481908060018154018082558091505090600182039060005260206000200160009091929091909150555060016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f557600080fd5b61230a8160025461224190919063ffffffff16565b600281905550612361816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461224190919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b815481835581811115612434578183600052602060002091820191016124339190612439565b5b505050565b61245b91905b8082111561245757600081600090555060010161243f565b5090565b9056fe74686973206b697474792068617320616c7265616479206265656e2077697468647261776e796f752061726520747279696e6720746f2062617463682072656d6f7665206d6f726520736c6f7473207468616e20657869737420696e20746865206172726179796f75206d75737420617070726f76652829207468697320636f6e7472616374206265666f726520796f752063616e206465706f736974206120636174796f75206d757374207375626d697420616e2061727261792077697468206174206c65617374206f6e6520656c656d656e74796f7520646964206e6f742070726f7669646520612064657374696e6174696f6e206164647265737320666f722065616368206f6620746865206361747320796f75207769736820746f207769746864726177796f7520646f206e6f74206f776e20656e6f75676820746f6b656e7320746f2077697468647261772074686973206d616e7920455243373231206361747374686520636f6e747261637420646f6573206e6f74206f776e207468697320636174a165627a7a723058208ed7878df81f2ce1f94bf51235228bec493de1da64fcdbcab1267c5fe53b7b4e0029
Deployed Bytecode Sourcemap
12818:9972:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15344:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15344:52:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15344:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5402:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5402:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5402:244:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18275:1334;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18275:1334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18275:1334:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18275:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18275:1334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18275:1334:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18275:1334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18275:1334:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18275:1334:0;;;;;;;;;;;;:::i;:::-;;3561:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3561:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6119:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6119:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6119:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15700:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15700:76:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15302:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15302:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6933:323;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6933:323:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6933:323:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3868:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3868:106:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3868:106:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21462:637;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21462:637:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21462:637:0;;;;;;;;;;;;;;;;;:::i;:::-;;15403:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15403:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15403:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7776:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7776:333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7776:333:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4615:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4615:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4615:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16614:1116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16614:1116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16614:1116:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16614:1116:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16614:1116:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16614:1116:0;;;;;;;;;;;;:::i;:::-;;4313:131;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4313:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4313:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15344:52;;;;;;;;;;;;;;;;;;;:::o;5402:244::-;5467:4;5511:1;5492:21;;:7;:21;;;;5484:30;;;;;;5559:5;5527:8;:20;5536:10;5527:20;;;;;;;;;;;;;;;:29;5548:7;5527:29;;;;;;;;;;;;;;;:37;;;;5601:7;5580:36;;5589:10;5580:36;;;5610:5;5580:36;;;;;;;;;;;;;;;;;;5634:4;5627:11;;5402:244;;;;:::o;18275:1334::-;11390:1;11373:13;;:18;;;;;;;;;;;11402:20;11425:13;;11402:36;;18446:21;;:28;;18426:9;;:16;;:48;18418:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18600:1;18581:9;;:16;;:20;18573:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18669:23;18695:9;;:16;;18669:42;;18755:27;18775:6;18755:15;:19;;:27;;;;:::i;:::-;18730:21;18740:10;18730:9;:21::i;:::-;:52;;18722:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18860:46;18866:10;18878:27;18898:6;18878:15;:19;;:27;;;;:::i;:::-;18860:5;:46::i;:::-;18931:6;18940:1;18931:10;;18927:675;18947:15;18943:1;:19;18927:675;;;18983:23;19009:9;;19019:1;19009:12;;;;;;;;;;;;;18983:38;;19058:1;19039:15;:20;19036:417;;;19097:11;:9;:11::i;:::-;19079:29;;19036:417;;;19204:4;19157:51;;:26;:43;19184:15;19157:43;;;;;;;;;;;;;;;;;;;;;:51;;;19149:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19294:9;;;;;;;;;;;:17;;;19312:15;19294:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19294:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19294:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19294:34:0;;;;;;;;;;;;;;;;19277:51;;19285:4;19277:51;;;19269:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19432:5;19386:26;:43;19413:15;19386:43;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;19036:417;19467:9;;;;;;;;;;;:18;;;19486:21;;19508:1;19486:24;;;;;;;;;;;;;;;19512:15;19467:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19467:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19467:61:0;;;;19548:42;19574:15;19548:42;;;;;;;;;;;;;;;;;;18927:675;18964:3;;;;;;;18927:675;;;;11449:1;11485:13;;11469:12;:29;11461:38;;;;;;18275:1334;;;;;:::o;3561:91::-;3605:7;3632:12;;3625:19;;3561:91;:::o;6119:299::-;6198:4;6244:37;6275:5;6244:8;:14;6253:4;6244:14;;;;;;;;;;;;;;;:26;6259:10;6244:26;;;;;;;;;;;;;;;;:30;;:37;;;;:::i;:::-;6215:8;:14;6224:4;6215:14;;;;;;;;;;;;;;;:26;6230:10;6215:26;;;;;;;;;;;;;;;:66;;;;6292:26;6302:4;6308:2;6312:5;6292:9;:26::i;:::-;6349:10;6334:54;;6343:4;6334:54;;;6361:8;:14;6370:4;6361:14;;;;;;;;;;;;;;;:26;6376:10;6361:26;;;;;;;;;;;;;;;;6334:54;;;;;;;;;;;;;;;;;;6406:4;6399:11;;6119:299;;;;;:::o;15700:76::-;;;;;;;;;;;;;:::o;15302:35::-;15335:2;15302:35;:::o;6933:323::-;7013:4;7057:1;7038:21;;:7;:21;;;;7030:30;;;;;;7105:45;7139:10;7105:8;:20;7114:10;7105:20;;;;;;;;;;;;;;;:29;7126:7;7105:29;;;;;;;;;;;;;;;;:33;;:45;;;;:::i;:::-;7073:8;:20;7082:10;7073:20;;;;;;;;;;;;;;;:29;7094:7;7073:29;;;;;;;;;;;;;;;:77;;;;7187:7;7166:60;;7175:10;7166:60;;;7196:8;:20;7205:10;7196:20;;;;;;;;;;;;;;;:29;7217:7;7196:29;;;;;;;;;;;;;;;;7166:60;;;;;;;;;;;;;;;;;;7244:4;7237:11;;6933:323;;;;:::o;3868:106::-;3923:7;3950:9;:16;3960:5;3950:16;;;;;;;;;;;;;;;;3943:23;;3868:106;;;:::o;21462:637::-;21584:21;:28;;;;21564:16;:48;;21556:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21693:18;21714:21;:28;;;;21693:49;;21757:6;21766:1;21757:10;;21753:339;21773:16;21769:1;:20;21753:339;;;21823:17;21838:1;21823:10;:14;;:17;;;;:::i;:::-;21810:30;;21855:15;21873:21;21895:10;21873:33;;;;;;;;;;;;;;;;21855:51;;21963:5;21924:44;;:26;:35;21951:7;21924:35;;;;;;;;;;;;;;;;;;;;;:44;;;21921:160;;;21988:21;:30;;;;;;;;;;;;:::i;:::-;;21921:160;;;22059:7;;;;;21921:160;21753:339;21791:3;;;;;;;21753:339;;;;21462:637;;;:::o;15403:38::-;;;;;;;;;;;;;;;;;;;:::o;7776:333::-;7861:4;7905:1;7886:21;;:7;:21;;;;7878:30;;;;;;7953:50;7987:15;7953:8;:20;7962:10;7953:20;;;;;;;;;;;;;;;:29;7974:7;7953:29;;;;;;;;;;;;;;;;:33;;:50;;;;:::i;:::-;7921:8;:20;7930:10;7921:20;;;;;;;;;;;;;;;:29;7942:7;7921:29;;;;;;;;;;;;;;;:82;;;;8040:7;8019:60;;8028:10;8019:60;;;8049:8;:20;8058:10;8049:20;;;;;;;;;;;;;;;:29;8070:7;8049:29;;;;;;;;;;;;;;;;8019:60;;;;;;;;;;;;;;;;;;8097:4;8090:11;;7776:333;;;;:::o;4615:140::-;4676:4;4693:32;4703:10;4715:2;4719:5;4693:9;:32::i;:::-;4743:4;4736:11;;4615:140;;;;:::o;16614:1116::-;11390:1;11373:13;;:18;;;;;;;;;;;11402:20;11425:13;;11402:36;;16753:1;16734:9;;:16;;:20;16726:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16824:6;16833:1;16824:10;;16820:843;16840:9;;:16;;16836:1;:20;16820:843;;;16877:22;16902:9;;16912:1;16902:12;;;;;;;;;;;;;16877:37;;16931:21;16967:16;17047:9;;;;;;;;;;;:18;;;17066:14;17047:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17047:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17047:34:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17047:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17012:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17120:9;;;;;;;;;;;:17;;;17138:14;17120:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17120:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17120:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17120:33:0;;;;;;;;;;;;;;;;17106:47;;:10;:47;;;17098:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:4;17204:63;;:9;;;;;;;;;;;:30;;;17235:14;17204:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17204:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17204:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17204:46:0;;;;;;;;;;;;;;;;:63;;;17196:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17368:1;17356:8;:13;17348:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17443:1;17426:13;:18;17418:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17485:9;;;;;;;;;;;:22;;;17508:10;17528:4;17535:14;17485:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17485:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17485:65:0;;;;17565:26;17576:14;17565:10;:26::i;:::-;17611:40;17636:14;17611:40;;;;;;;;;;;;;;;;;;16820:843;;;16858:3;;;;;;;16820:843;;;;17673:49;17679:10;17691:30;17714:6;17692:9;;:16;;17691:22;;:30;;;;:::i;:::-;17673:5;:49::i;:::-;11485:13;;11469:12;:29;11461:38;;;;;;16614:1116;;;:::o;4313:131::-;4385:7;4412:8;:15;4421:5;4412:15;;;;;;;;;;;;;;;:24;4428:7;4412:24;;;;;;;;;;;;;;;;4405:31;;4313:131;;;;:::o;1002:433::-;1060:7;1309:1;1304;:6;1300:47;;;1334:1;1327:8;;;;1300:47;1359:9;1375:1;1371;:5;1359:17;;1404:1;1399;1395;:5;;;;;;:10;1387:19;;;;;;1426:1;1419:8;;;1002:433;;;;;:::o;9448:269::-;9542:1;9523:21;;:7;:21;;;;9515:30;;;;;;9573:23;9590:5;9573:12;;:16;;:23;;;;:::i;:::-;9558:12;:38;;;;9628:29;9651:5;9628:9;:18;9638:7;9628:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9607:9;:18;9617:7;9607:18;;;;;;;;;;;;;;;:50;;;;9699:1;9673:36;;9682:7;9673:36;;;9703:5;9673:36;;;;;;;;;;;;;;;;;;9448:269;;:::o;20319:542::-;20357:7;20415:1;20384:21;:28;;;;:32;20376:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20462:15;20480:21;20533:1;20502:21;:28;;;;:32;20480:55;;;;;;;;;;;;;;;;20462:73;;20546:21;:30;;;;;;;;;;;;:::i;:::-;;20587:188;20632:5;20593:44;;:26;:35;20620:7;20593:35;;;;;;;;;;;;;;;;;;;;;:44;;;20587:188;;;20663:21;20716:1;20685:21;:28;;;;:32;20663:55;;;;;;;;;;;;;;;;20653:65;;20733:21;:30;;;;;;;;;;;;:::i;:::-;;20587:188;;;20823:5;20785:26;:35;20812:7;20785:35;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;20846:7;20839:14;;;20319:542;:::o;2007:150::-;2065:7;2098:1;2093;:6;;2085:15;;;;;;2111:9;2127:1;2123;:5;2111:17;;2148:1;2141:8;;;2007:150;;;;:::o;8331:262::-;8433:1;8419:16;;:2;:16;;;;8411:25;;;;;;8467:26;8487:5;8467:9;:15;8477:4;8467:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;8449:9;:15;8459:4;8449:15;;;;;;;;;;;;;;;:44;;;;8520:24;8538:5;8520:9;:13;8530:2;8520:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;8504:9;:13;8514:2;8504:13;;;;;;;;;;;;;;;:40;;;;8575:2;8560:25;;8569:4;8560:25;;;8579:5;8560:25;;;;;;;;;;;;;;;;;;8331:262;;;:::o;2243:150::-;2301:7;2321:9;2337:1;2333;:5;2321:17;;2362:1;2357;:6;;2349:15;;;;;;2384:1;2377:8;;;2243:150;;;;:::o;19775:156::-;19833:21;19860:8;19833:36;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;19833:36:0;;;;;;;;;;;;;;;;;;;;;;19919:4;19880:26;:36;19907:8;19880:36;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;19775:156;:::o;8945:269::-;9039:1;9020:21;;:7;:21;;;;9012:30;;;;;;9070:23;9087:5;9070:12;;:16;;:23;;;;:::i;:::-;9055:12;:38;;;;9125:29;9148:5;9125:9;:18;9135:7;9125:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;9104:9;:18;9114:7;9104:18;;;;;;;;;;;;;;;:50;;;;9191:7;9170:36;;9187:1;9170:36;;;9200:5;9170:36;;;;;;;;;;;;;;;;;;8945:269;;:::o;12818:9972::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://8ed7878df81f2ce1f94bf51235228bec493de1da64fcdbcab1267c5fe53b7b4e
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.