Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- StakingToken
- Optimization enabled
- true
- Compiler version
- v0.6.12+commit.27d51765
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2020-07-26T15:51:50.991913Z
Constructor Arguments
[
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokens",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "tokenCallback",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
Contract source code
pragma solidity ^0.6.9; interface Callable { function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool); } contract StakingToken { uint256 constant private FLOAT_SCALAR = 2**64; uint256 constant private INITIAL_SUPPLY = 2e27; // 2 Billion Total/Max Supply uint256 constant private BURN_RATE = 1; // 1% per tx uint256 constant private SUPPLY_FLOOR = 1; // 1% of 2B = 20M uint256 constant private MIN_FREEZE_AMOUNT = 1e20; // 100 minimum string constant public name = "UniversalCoin X"; string constant public symbol = "UVCX"; uint8 constant public decimals = 18; struct User { bool whitelisted; uint256 balance; uint256 frozen; mapping(address => uint256) allowance; int256 scaledPayout; } struct Info { uint256 totalSupply; uint256 totalFrozen; mapping(address => User) users; uint256 scaledPayoutPerToken; address admin; } Info private info; event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed owner, address indexed spender, uint256 tokens); event Whitelist(address indexed user, bool status); event Freeze(address indexed owner, uint256 tokens); event Unfreeze(address indexed owner, uint256 tokens); event Collect(address indexed owner, uint256 tokens); event Burn(uint256 tokens); constructor() public { info.admin = msg.sender; info.totalSupply = INITIAL_SUPPLY; info.users[msg.sender].balance = INITIAL_SUPPLY; emit Transfer(address(0x0), msg.sender, INITIAL_SUPPLY); whitelist(msg.sender, true); } function freeze(uint256 _tokens) external {_freeze(_tokens);} function unfreeze(uint256 _tokens) external {_unfreeze(_tokens);} function collect() external returns (uint256) { uint256 _dividends = dividendsOf(msg.sender); require(_dividends >= 0, 'Cannot collect -ve dividends'); info.users[msg.sender].scaledPayout += int256(_dividends * FLOAT_SCALAR); info.users[msg.sender].balance += _dividends; emit Transfer(address(this), msg.sender, _dividends); emit Collect(msg.sender, _dividends); return _dividends; } function burn(uint256 _tokens) external { require(balanceOf(msg.sender) >= _tokens, 'Trying to burn more than you have'); info.users[msg.sender].balance -= _tokens; uint256 _burnedAmount = _tokens; if (info.totalFrozen > 0) { _burnedAmount /= 2; //50% of burn redirected amongst frozen holders info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen; emit Transfer(msg.sender, address(this), _burnedAmount); } info.totalSupply -= _burnedAmount; emit Transfer(msg.sender, address(0x0), _burnedAmount); emit Burn(_burnedAmount); } function distribute(uint256 _tokens) external { require(info.totalFrozen > 0, 'Must have more than 0 frozen to distribute'); require(balanceOf(msg.sender) >= _tokens, 'Must have enough tokens to distribute'); info.users[msg.sender].balance -= _tokens; info.scaledPayoutPerToken += _tokens * FLOAT_SCALAR / info.totalFrozen; emit Transfer(msg.sender, address(this), _tokens); } function transfer(address _to, uint256 _tokens) external returns (bool) { _transfer(msg.sender, _to, _tokens); return true; } function approve(address _spender, uint256 _tokens) external returns (bool) { info.users[msg.sender].allowance[_spender] = _tokens; emit Approval(msg.sender, _spender, _tokens); return true; } function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) { require(info.users[_from].allowance[msg.sender] >= _tokens, 'Need to have enough allowance to send'); info.users[_from].allowance[msg.sender] -= _tokens; _transfer(_from, _to, _tokens); return true; } function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) { uint256 _transferred = _transfer(msg.sender, _to, _tokens); uint32 _size; assembly {_size := extcodesize(_to)} if (_size > 0) {require(Callable(_to).tokenCallback(msg.sender, _transferred, _data), 'More than 0 data in the transfer');} return true; } function bulkTransfer(address[] calldata _receivers, uint256[] calldata _amounts) external { require(_receivers.length == _amounts.length, 'Need equal amounts of receivers and values'); for (uint256 i = 0; i < _receivers.length; i++) {_transfer(msg.sender, _receivers[i], _amounts[i]);} } function whitelist(address _user, bool _status) public { require(msg.sender == info.admin, 'Only admins can whitelist'); info.users[_user].whitelisted = _status; emit Whitelist(_user, _status); } function totalSupply() public view returns (uint256) {return info.totalSupply;} function totalFrozen() public view returns (uint256) {return info.totalFrozen;} function balanceOf(address _user) public view returns (uint256) {return info.users[_user].balance - frozenOf(_user);} function frozenOf(address _user) public view returns (uint256) {return info.users[_user].frozen;} function dividendsOf(address _user) public view returns (uint256) {return uint256(int256(info.scaledPayoutPerToken * info.users[_user].frozen) - info.users[_user].scaledPayout) / FLOAT_SCALAR;} function allowance(address _user, address _spender) public view returns (uint256) {return info.users[_user].allowance[_spender];} function isWhitelisted(address _user) public view returns (bool) {return info.users[_user].whitelisted;} function allInfoFor(address _user) public view returns (uint256 totalTokenSupply, uint256 totalTokensFrozen, uint256 userBalance, uint256 userFrozen, uint256 userDividends) {return (totalSupply(), totalFrozen(), balanceOf(_user), frozenOf(_user), dividendsOf(_user));} function _transfer(address _from, address _to, uint256 _tokens) internal returns (uint256) { require(balanceOf(_from) >= _tokens, 'Trying to send more than you have'); info.users[_from].balance -= _tokens; uint256 _burnedAmount = _tokens * BURN_RATE / 100; if (totalSupply() - _burnedAmount < INITIAL_SUPPLY * SUPPLY_FLOOR / 100 || isWhitelisted(_from)) {_burnedAmount = 0;} uint256 _transferred = _tokens - _burnedAmount; info.users[_to].balance += _transferred; emit Transfer(_from, _to, _transferred); if (_burnedAmount > 0) { if (info.totalFrozen > 0) { _burnedAmount /= 2; info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen; emit Transfer(_from, address(this), _burnedAmount); } info.totalSupply -= _burnedAmount; emit Transfer(_from, address(0x0), _burnedAmount); emit Burn(_burnedAmount); } return _transferred; } function _freeze(uint256 _amount) internal { require(balanceOf(msg.sender) >= _amount, 'Trying to freeze more than you have'); require(frozenOf(msg.sender) + _amount >= MIN_FREEZE_AMOUNT, 'Trying to freeze less than the minimum'); info.totalFrozen += _amount; info.users[msg.sender].frozen += _amount; info.users[msg.sender].scaledPayout += int256(_amount * info.scaledPayoutPerToken); emit Transfer(msg.sender, address(this), _amount); emit Freeze(msg.sender, _amount); } function _unfreeze(uint256 _amount) internal { require(frozenOf(msg.sender) >= _amount, 'Trying to unfreeze more than you can'); uint256 _burnedAmount = _amount * BURN_RATE / 100; info.scaledPayoutPerToken += _burnedAmount * FLOAT_SCALAR / info.totalFrozen; info.totalFrozen -= _amount; info.users[msg.sender].balance -= _burnedAmount; info.users[msg.sender].frozen -= _amount; info.users[msg.sender].scaledPayout -= int256(_amount * info.scaledPayoutPerToken); emit Transfer(address(this), msg.sender, _amount - _burnedAmount); emit Unfreeze(msg.sender, _amount); } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Collect","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Freeze","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Unfreeze","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Whitelist","inputs":[{"type":"address","name":"user","internalType":"address","indexed":true},{"type":"bool","name":"status","internalType":"bool","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"totalTokenSupply","internalType":"uint256"},{"type":"uint256","name":"totalTokensFrozen","internalType":"uint256"},{"type":"uint256","name":"userBalance","internalType":"uint256"},{"type":"uint256","name":"userFrozen","internalType":"uint256"},{"type":"uint256","name":"userDividends","internalType":"uint256"}],"name":"allInfoFor","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_user","internalType":"address"},{"type":"address","name":"_spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bulkTransfer","inputs":[{"type":"address[]","name":"_receivers","internalType":"address[]"},{"type":"uint256[]","name":"_amounts","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"collect","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"distribute","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"dividendsOf","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"freeze","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"frozenOf","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWhitelisted","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFrozen","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferAndCall","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unfreeze","inputs":[{"type":"uint256","name":"_tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelist","inputs":[{"type":"address","name":"_user","internalType":"address"},{"type":"bool","name":"_status","internalType":"bool"}]}]
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101415760003560e01c806342966c68116100b857806395d89b411161007c57806395d89b4114610502578063a9059cbb1461050a578063d7a78db814610536578063dd62ed3e14610553578063e522538114610581578063f59c37081461058957610141565b806342966c681461043457806357f6b812146104515780636623fc46146104a257806370a08231146104bf57806391c05b0b146104e557610141565b80631bf6e00d1161010a5780631bf6e00d146103075780631e7f87bc1461032d57806323b872dd14610335578063313ce5671461036b5780633af32abf146103895780634000aea0146103af57610141565b806265318b1461014657806306fdde031461017e578063095ea7b3146101fb578063153a1f3e1461023b57806318160ddd146102ff575b600080fd5b61016c6004803603602081101561015c57600080fd5b50356001600160a01b03166105b7565b60408051918252519081900360200190f35b6101866105eb565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c05781810151838201526020016101a8565b50505050905090810190601f1680156101ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102276004803603604081101561021157600080fd5b506001600160a01b038135169060200135610616565b604080519115158252519081900360200190f35b6102fd6004803603604081101561025157600080fd5b81019060208101813564010000000081111561026c57600080fd5b82018360208201111561027e57600080fd5b803590602001918460208302840111640100000000831117156102a057600080fd5b9193909290916020810190356401000000008111156102be57600080fd5b8201836020820111156102d057600080fd5b803590602001918460208302840111640100000000831117156102f257600080fd5b509092509050610680565b005b61016c610711565b61016c6004803603602081101561031d57600080fd5b50356001600160a01b0316610717565b61016c610736565b6102276004803603606081101561034b57600080fd5b506001600160a01b0381358116916020810135909116906040013561073c565b6103736107e4565b6040805160ff9092168252519081900360200190f35b6102276004803603602081101561039f57600080fd5b50356001600160a01b03166107e9565b610227600480360360608110156103c557600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156103f557600080fd5b82018360208201111561040757600080fd5b8035906020019184600183028401116401000000008311171561042957600080fd5b509092509050610807565b6102fd6004803603602081101561044a57600080fd5b503561093a565b6104776004803603602081101561046757600080fd5b50356001600160a01b0316610a53565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6102fd600480360360208110156104b857600080fd5b5035610a98565b61016c600480360360208110156104d557600080fd5b50356001600160a01b0316610aa4565b6102fd600480360360208110156104fb57600080fd5b5035610ad3565b610186610bb8565b6102276004803603604081101561052057600080fd5b506001600160a01b038135169060200135610bd8565b6102fd6004803603602081101561054c57600080fd5b5035610bef565b61016c6004803603604081101561056957600080fd5b506001600160a01b0381358116916020013516610bf8565b61016c610c27565b6102fd6004803603604081101561059f57600080fd5b506001600160a01b0381351690602001351515610cbc565b6001600160a01b031660009081526002602081905260409091206004810154910154600354600160401b9102919091030490565b6040518060400160405280600f81526020016e0aadcd2eccae4e6c2d886ded2dc40b608b1b81525081565b3360008181526002602090815260408083206001600160a01b03871680855260039091018352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b8281146106be5760405162461bcd60e51b815260040180806020018281038252602a815260200180611272602a913960400191505060405180910390fd5b60005b8381101561070a57610701338686848181106106d957fe5b905060200201356001600160a01b03168585858181106106f557fe5b90506020020135610d7b565b506001016106c1565b5050505050565b60005490565b6001600160a01b03166000908152600260208190526040909120015490565b60015490565b6001600160a01b03831660009081526002602090815260408083203384526003019091528120548211156107a15760405162461bcd60e51b81526004018080602001828103825260258152602001806111b96025913960400191505060405180910390fd5b6001600160a01b03841660009081526002602090815260408083203384526003019091529020805483900390556107d9848484610d7b565b506001949350505050565b601281565b6001600160a01b031660009081526002602052604090205460ff1690565b600080610815338787610d7b565b9050853b63ffffffff81161561092d57866001600160a01b0316636be32e73338488886040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b1580156108b057600080fd5b505af11580156108c4573d6000803e3d6000fd5b505050506040513d60208110156108da57600080fd5b505161092d576040805162461bcd60e51b815260206004820181905260248201527f4d6f7265207468616e2030206461746120696e20746865207472616e73666572604482015290519081900360640190fd5b5060019695505050505050565b8061094433610aa4565b10156109815760405162461bcd60e51b81526004018080602001828103825260218152602001806111736021913960400191505060405180910390fd5b336000908152600260205260409020600190810180548390039055548190156109ef57600154600290910490600160401b8202816109bb57fe5b6003805492909104919091019055604080518281529051309133916000805160206112288339815191529181900360200190a35b6000805482900381556040805183815290513391600080516020611228833981519152919081900360200190a36040805182815290517fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9181900360200190a15050565b6000806000806000610a63610711565b610a6b610736565b610a7488610aa4565b610a7d89610717565b610a868a6105b7565b939a9299509097509550909350915050565b610aa181610f3c565b50565b6000610aaf82610717565b6001600160a01b038316600090815260026020526040902060010154039050919050565b600154610b115760405162461bcd60e51b815260040180806020018281038252602a815260200180611248602a913960400191505060405180910390fd5b80610b1b33610aa4565b1015610b585760405162461bcd60e51b81526004018080602001828103825260258152602001806111946025913960400191505060405180910390fd5b33600090815260026020526040902060019081018054839003905554600160401b820281610b8257fe5b6003805492909104919091019055604080518281529051309133916000805160206112288339815191529181900360200190a350565b604051806040016040528060048152602001630aaac86b60e31b81525081565b6000610be5338484610d7b565b5060019392505050565b610aa181611048565b6001600160a01b0391821660009081526002602090815260408083209390941682526003909201909152205490565b600080610c33336105b7565b905033600081815260026020908152604091829020600481018054600160401b870201905560010180548501905581518481529151309260008051602061122883398151915292908290030190a360408051828152905133917f4256a058fa2b123d727576d3d31e3a272db98ee5fe264e229610ce43dc849999919081900360200190a2905090565b6004546001600160a01b03163314610d1b576040805162461bcd60e51b815260206004820152601960248201527f4f6e6c792061646d696e732063616e2077686974656c69737400000000000000604482015290519081900360640190fd5b6001600160a01b038216600081815260026020908152604091829020805460ff1916851515908117909155825190815291517f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d9281900390910190a25050565b600081610d8785610aa4565b1015610dc45760405162461bcd60e51b81526004018080602001828103825260218152602001806112bf6021913960400191505060405180910390fd5b6001600160a01b038416600090815260026020526040902060010180548390039055606482046a108b2a2c2802909400000081610dff610711565b031080610e105750610e10856107e9565b15610e19575060005b6001600160a01b0380851660008181526002602090815260409182902060010180548689039081019091558251818152925190948a169260008051602061122883398151915292908290030190a38115610f335760015415610ec957600154600290920491600160401b830281610e8c57fe5b600380549290910491909101905560408051838152905130916001600160a01b038916916000805160206112288339815191529181900360200190a35b6000805483900381556040805184815290516001600160a01b03891691600080516020611228833981519152919081900360200190a36040805183815290517fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb9181900360200190a15b95945050505050565b80610f4633610717565b1015610f835760405162461bcd60e51b81526004018080602001828103825260248152602001806111de6024913960400191505060405180910390fd5b6001546064820490600160401b820281610f9957fe5b6003805492909104909101815560018054849003815533600081815260026020818152604092839020948501805488900390559084018054889003905593546004909301805493870290930390925581518486038152915190923092600080516020611228833981519152929081900390910190a360408051838152905133917f2cfce4af01bcb9d6cf6c84ee1b7c491100b8695368264146a94d71e10a63083f919081900360200190a25050565b8061105233610aa4565b101561108f5760405162461bcd60e51b815260040180806020018281038252602381526020018061129c6023913960400191505060405180910390fd5b68056bc75e2d63100000816110a333610717565b0110156110e15760405162461bcd60e51b81526004018080602001828103825260268152602001806112026026913960400191505060405180910390fd5b600180548201905533600081815260026020818152604092839020918201805486019055600354600490920180549286029092019091558151848152915130939260008051602061122883398151915292908290030190a360408051828152905133917ff97a274face0b5517365ad396b1fdba6f68bd3135ef603e44272adba3af5a1e0919081900360200190a25056fe547279696e6720746f206275726e206d6f7265207468616e20796f7520686176654d757374206861766520656e6f75676820746f6b656e7320746f20646973747269627574654e65656420746f206861766520656e6f75676820616c6c6f77616e636520746f2073656e64547279696e6720746f20756e667265657a65206d6f7265207468616e20796f752063616e547279696e6720746f20667265657a65206c657373207468616e20746865206d696e696d756dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4d7573742068617665206d6f7265207468616e20302066726f7a656e20746f20646973747269627574654e65656420657175616c20616d6f756e7473206f662072656365697665727320616e642076616c756573547279696e6720746f20667265657a65206d6f7265207468616e20796f752068617665547279696e6720746f2073656e64206d6f7265207468616e20796f752068617665a264697066735822122094e2a3e4ecf88b5daf0b1370e3c9335dc5860336ec96aabc1bc2bc946f4c608e64736f6c634300060c0033