Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- ERC20
- Optimization enabled
- true
- Compiler version
- v0.8.18+commit.87f61d96
- Optimization runs
- 200
- EVM Version
- paris
- Verified at
- 2025-02-25T13:50:47.097539Z
Constructor Arguments
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000103a435be00000000000000000000000000000000000000000000000000000000000000008436875644a61636b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044368756400000000000000000000000000000000000000000000000000000000
Arg [0] (string) : ChudJack
Arg [1] (string) : Chud
Arg [2] (uint256) : 69696969696
ERC20.sol
//SPDX-License-Identifier: Unlicensed
pragma solidity >=0.7.0 <0.9.0;
// Chud Twitter: https://twitter.com/Chudjakcoineth
// Chud Telegram: https://t.me/OfficialChudCoin
// Chud Website: https://www.mrchud.com/
abstract contract Context {
function _msgSender() internal view returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view returns (bytes memory) {
this;
return msg.data;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address _owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract ERC20 is Context, IERC20 {
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => uint256) public _balances;
mapping(address => bool) liquidityPair;
mapping(address => bool) liquidityProvider;
uint256 _totalSupply;
uint256 public maxWallet;
uint256 public maxTransaction;
bool limitInPlace;
address public ownerWallet;
string private _name;
string private _symbol;
modifier onlyOwner() {
require(_msgSender() == ownerWallet, "You are not the owner");
_;
}
constructor(string memory name_, string memory symbol_, uint256 supply) {
_name = name_;
_symbol = symbol_;
_mint(_msgSender(), supply * (10**18));
ownerWallet = _msgSender();
}
receive() external payable {}
function name() public view override returns (string memory) {
return _name;
}
function symbol() public view override returns (string memory) {
return _symbol;
}
function decimals() public pure override returns (uint8) {
return 18;
}
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function renounceOwnership() external onlyOwner {
ownerWallet = address(0);
}
function transferOwnership(address newOwner) external onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address, use renounceOwnership Function");
if(balanceOf(ownerWallet) > 0) _transfer(ownerWallet, newOwner, balanceOf(ownerWallet));
ownerWallet = newOwner;
}
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
unchecked {
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
}
function transferFrom(address from, address to, uint256 amount) public override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(address owner, address spender, uint256 amount) internal {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal view {
if(limitInPlace){
if(liquidityPair[from]){
require(amount <= maxTransaction && balanceOf(to) + amount <= maxWallet, "Amount is over Max Transaction");
} else if(liquidityPair[to] && !liquidityProvider[from]) {
require(amount <= maxTransaction, "Amount is over Max Transaction");
}
}
}
function _transfer(address from, address to, uint256 amount) internal {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(_balances[from] >= amount, "ERC20: transfer amount exceeds balance");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
unchecked {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
}
emit Transfer(from, to, amount);
}
function setLimits(bool inPlace, uint256 _maxTransaction, uint256 _maxWallet) external onlyOwner {
require(_maxTransaction >= 10 && _maxWallet > 10, "Max Transaction and Max Wallet must be over .1%");
maxTransaction = (_totalSupply * _maxTransaction) / 10000;
maxWallet = (_totalSupply * _maxWallet) / 10000;
limitInPlace = inPlace;
}
function setLiquidityProvider(address provider, bool isProvider) external onlyOwner {
liquidityProvider[provider] = isProvider;
}
function setPair(address pairs, bool isPair) external onlyOwner {
liquidityPair[pairs] = isPair;
}
function burn(uint256 amount) external {
_burn(_msgSender(), amount);
}
}
Compiler Settings
{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"paris","compilationTarget":{"ERC20.sol":"ERC20"}}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"name_","internalType":"string"},{"type":"string","name":"symbol_","internalType":"string"},{"type":"uint256","name":"supply","internalType":"uint256"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","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":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_balances","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","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":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxTransaction","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ownerWallet","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setLimits","inputs":[{"type":"bool","name":"inPlace","internalType":"bool"},{"type":"uint256","name":"_maxTransaction","internalType":"uint256"},{"type":"uint256","name":"_maxWallet","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setLiquidityProvider","inputs":[{"type":"address","name":"provider","internalType":"address"},{"type":"bool","name":"isProvider","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPair","inputs":[{"type":"address","name":"pairs","internalType":"address"},{"type":"bool","name":"isPair","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","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":"amount","internalType":"uint256"}]},{"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":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x60806040523480156200001157600080fd5b50604051620015e1380380620015e183398101604081905262000034916200021e565b600862000042848262000320565b50600962000051838262000320565b5062000071336200006b83670de0b6b3a764000062000402565b62000091565b505060078054610100600160a81b03191633610100021790555062000438565b6001600160a01b038216620000ec5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806004600082825462000100919062000422565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018157600080fd5b81516001600160401b03808211156200019e576200019e62000159565b604051601f8301601f19908116603f01168101908282118183101715620001c957620001c962000159565b81604052838152602092508683858801011115620001e657600080fd5b600091505b838210156200020a5785820183015181830184015290820190620001eb565b600093810190920192909252949350505050565b6000806000606084860312156200023457600080fd5b83516001600160401b03808211156200024c57600080fd5b6200025a878388016200016f565b945060208601519150808211156200027157600080fd5b5062000280868287016200016f565b925050604084015190509250925092565b600181811c90821680620002a657607f821691505b602082108103620002c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031b57600081815260208120601f850160051c81016020861015620002f65750805b601f850160051c820191505b81811015620003175782815560010162000302565b5050505b505050565b81516001600160401b038111156200033c576200033c62000159565b62000354816200034d845462000291565b84620002cd565b602080601f8311600181146200038c5760008415620003735750858301515b600019600386901b1c1916600185901b17855562000317565b600085815260208120601f198616915b82811015620003bd578886015182559484019460019091019084016200039c565b5085821015620003dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200041c576200041c620003ec565b92915050565b808201808211156200041c576200041c620003ec565b61119980620004486000396000f3fe60806040526004361061012e5760003560e01c8063756ba9d8116100ab578063a9059cbb1161006f578063a9059cbb1461035c578063c3f70b521461037c578063dd62ed3e14610392578063e8f6ae29146103b2578063f2fde38b146103d2578063f8b45b05146103f257600080fd5b8063756ba9d8146102aa57806386a22eff146102ca5780639335dcb7146102ea57806395d89b4114610327578063a457c2d71461033c57600080fd5b806339509351116100f257806339509351146101f057806342966c68146102105780636ebcf6071461023257806370a082311461025f578063715018a61461029557600080fd5b806306fdde031461013a578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b4578063313ce567146101d457600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061014f610408565b60405161015c9190610eed565b60405180910390f35b34801561017157600080fd5b50610185610180366004610f57565b61049a565b604051901515815260200161015c565b3480156101a157600080fd5b506004545b60405190815260200161015c565b3480156101c057600080fd5b506101856101cf366004610f81565b6104b4565b3480156101e057600080fd5b506040516012815260200161015c565b3480156101fc57600080fd5b5061018561020b366004610f57565b6104d8565b34801561021c57600080fd5b5061023061022b366004610fbd565b6104fa565b005b34801561023e57600080fd5b506101a661024d366004610fd6565b60016020526000908152604090205481565b34801561026b57600080fd5b506101a661027a366004610fd6565b6001600160a01b031660009081526001602052604090205490565b3480156102a157600080fd5b50610230610507565b3480156102b657600080fd5b506102306102c5366004611008565b61055b565b3480156102d657600080fd5b506102306102e536600461103b565b61065a565b3480156102f657600080fd5b5060075461030f9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161015c565b34801561033357600080fd5b5061014f6106bd565b34801561034857600080fd5b50610185610357366004610f57565b6106cc565b34801561036857600080fd5b50610185610377366004610f57565b610747565b34801561038857600080fd5b506101a660065481565b34801561039e57600080fd5b506101a66103ad36600461106e565b610755565b3480156103be57600080fd5b506102306103cd36600461103b565b61077e565b3480156103de57600080fd5b506102306103ed366004610fd6565b6107e1565b3480156103fe57600080fd5b506101a660055481565b60606008805461041790611098565b80601f016020809104026020016040519081016040528092919081815260200182805461044390611098565b80156104905780601f1061046557610100808354040283529160200191610490565b820191906000526020600020905b81548152906001019060200180831161047357829003601f168201915b5050505050905090565b6000336104a881858561091e565b60019150505b92915050565b6000336104c2858285610a41565b6104cd858585610abb565b506001949350505050565b6000336104a88185856104eb8383610755565b6104f591906110e8565b61091e565b6105043382610c6f565b50565b60075461010090046001600160a01b0316336001600160a01b0316146105485760405162461bcd60e51b815260040161053f906110fb565b60405180910390fd5b60078054610100600160a81b0319169055565b60075461010090046001600160a01b0316336001600160a01b0316146105935760405162461bcd60e51b815260040161053f906110fb565b600a82101580156105a45750600a81115b6106085760405162461bcd60e51b815260206004820152602f60248201527f4d6178205472616e73616374696f6e20616e64204d61782057616c6c6574206d60448201526e757374206265206f766572202e312560881b606482015260840161053f565b61271082600454610619919061112a565b6106239190611141565b6006556004546127109061063890839061112a565b6106429190611141565b60055550506007805460ff1916911515919091179055565b60075461010090046001600160a01b0316336001600160a01b0316146106925760405162461bcd60e51b815260040161053f906110fb565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b60606009805461041790611098565b600033816106da8286610755565b90508381101561073a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161053f565b6104cd828686840361091e565b6000336104a8818585610abb565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b60075461010090046001600160a01b0316336001600160a01b0316146107b65760405162461bcd60e51b815260040161053f906110fb565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b60075461010090046001600160a01b0316336001600160a01b0316146108195760405162461bcd60e51b815260040161053f906110fb565b6001600160a01b0381166108a45760405162461bcd60e51b815260206004820152604660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573732c207573652072656e6f756e63654f776e6572736869702046756064820152653731ba34b7b760d11b608482015260a40161053f565b60075461010090046001600160a01b031660009081526001602052604081205411156108f65760075461010090046001600160a01b03166000818152600160205260409020546108f691908390610abb565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166109805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161053f565b6001600160a01b0382166109e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161053f565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610a4d8484610755565b90506000198114610ab55781811015610aa85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161053f565b610ab5848484840361091e565b50505050565b6001600160a01b038316610b1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161053f565b6001600160a01b038216610b815760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161053f565b6001600160a01b038316600090815260016020526040902054811115610bf85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161053f565b610c03838383610d9b565b6001600160a01b038381166000818152600160209081526040808320805487810390915594871680845292819020805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6001600160a01b038216610ccf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161053f565b6001600160a01b03821660009081526001602052604090205481811015610d435760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161053f565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a34565b60075460ff1615610e50576001600160a01b03831660009081526002602052604090205460ff1615610e55576006548111158015610e04575060055481610df7846001600160a01b031660009081526001602052604090205490565b610e0191906110e8565b11155b610e505760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206973206f766572204d6178205472616e73616374696f6e0000604482015260640161053f565b505050565b6001600160a01b03821660009081526002602052604090205460ff168015610e9657506001600160a01b03831660009081526003602052604090205460ff16155b15610e5057600654811115610e505760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206973206f766572204d6178205472616e73616374696f6e0000604482015260640161053f565b600060208083528351808285015260005b81811015610f1a57858101830151858201604001528201610efe565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f5257600080fd5b919050565b60008060408385031215610f6a57600080fd5b610f7383610f3b565b946020939093013593505050565b600080600060608486031215610f9657600080fd5b610f9f84610f3b565b9250610fad60208501610f3b565b9150604084013590509250925092565b600060208284031215610fcf57600080fd5b5035919050565b600060208284031215610fe857600080fd5b610ff182610f3b565b9392505050565b80358015158114610f5257600080fd5b60008060006060848603121561101d57600080fd5b61102684610ff8565b95602085013595506040909401359392505050565b6000806040838503121561104e57600080fd5b61105783610f3b565b915061106560208401610ff8565b90509250929050565b6000806040838503121561108157600080fd5b61108a83610f3b565b915061106560208401610f3b565b600181811c908216806110ac57607f821691505b6020821081036110cc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104ae576104ae6110d2565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b80820281158282048414176104ae576104ae6110d2565b60008261115e57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220b6bd75c2a428ac0b619e6e448f3c176023d3ba76843fe6c97044aad437699ebf64736f6c63430008120033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000103a435be00000000000000000000000000000000000000000000000000000000000000008436875644a61636b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044368756400000000000000000000000000000000000000000000000000000000
Deployed ByteCode
0x60806040526004361061012e5760003560e01c8063756ba9d8116100ab578063a9059cbb1161006f578063a9059cbb1461035c578063c3f70b521461037c578063dd62ed3e14610392578063e8f6ae29146103b2578063f2fde38b146103d2578063f8b45b05146103f257600080fd5b8063756ba9d8146102aa57806386a22eff146102ca5780639335dcb7146102ea57806395d89b4114610327578063a457c2d71461033c57600080fd5b806339509351116100f257806339509351146101f057806342966c68146102105780636ebcf6071461023257806370a082311461025f578063715018a61461029557600080fd5b806306fdde031461013a578063095ea7b31461016557806318160ddd1461019557806323b872dd146101b4578063313ce567146101d457600080fd5b3661013557005b600080fd5b34801561014657600080fd5b5061014f610408565b60405161015c9190610eed565b60405180910390f35b34801561017157600080fd5b50610185610180366004610f57565b61049a565b604051901515815260200161015c565b3480156101a157600080fd5b506004545b60405190815260200161015c565b3480156101c057600080fd5b506101856101cf366004610f81565b6104b4565b3480156101e057600080fd5b506040516012815260200161015c565b3480156101fc57600080fd5b5061018561020b366004610f57565b6104d8565b34801561021c57600080fd5b5061023061022b366004610fbd565b6104fa565b005b34801561023e57600080fd5b506101a661024d366004610fd6565b60016020526000908152604090205481565b34801561026b57600080fd5b506101a661027a366004610fd6565b6001600160a01b031660009081526001602052604090205490565b3480156102a157600080fd5b50610230610507565b3480156102b657600080fd5b506102306102c5366004611008565b61055b565b3480156102d657600080fd5b506102306102e536600461103b565b61065a565b3480156102f657600080fd5b5060075461030f9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161015c565b34801561033357600080fd5b5061014f6106bd565b34801561034857600080fd5b50610185610357366004610f57565b6106cc565b34801561036857600080fd5b50610185610377366004610f57565b610747565b34801561038857600080fd5b506101a660065481565b34801561039e57600080fd5b506101a66103ad36600461106e565b610755565b3480156103be57600080fd5b506102306103cd36600461103b565b61077e565b3480156103de57600080fd5b506102306103ed366004610fd6565b6107e1565b3480156103fe57600080fd5b506101a660055481565b60606008805461041790611098565b80601f016020809104026020016040519081016040528092919081815260200182805461044390611098565b80156104905780601f1061046557610100808354040283529160200191610490565b820191906000526020600020905b81548152906001019060200180831161047357829003601f168201915b5050505050905090565b6000336104a881858561091e565b60019150505b92915050565b6000336104c2858285610a41565b6104cd858585610abb565b506001949350505050565b6000336104a88185856104eb8383610755565b6104f591906110e8565b61091e565b6105043382610c6f565b50565b60075461010090046001600160a01b0316336001600160a01b0316146105485760405162461bcd60e51b815260040161053f906110fb565b60405180910390fd5b60078054610100600160a81b0319169055565b60075461010090046001600160a01b0316336001600160a01b0316146105935760405162461bcd60e51b815260040161053f906110fb565b600a82101580156105a45750600a81115b6106085760405162461bcd60e51b815260206004820152602f60248201527f4d6178205472616e73616374696f6e20616e64204d61782057616c6c6574206d60448201526e757374206265206f766572202e312560881b606482015260840161053f565b61271082600454610619919061112a565b6106239190611141565b6006556004546127109061063890839061112a565b6106429190611141565b60055550506007805460ff1916911515919091179055565b60075461010090046001600160a01b0316336001600160a01b0316146106925760405162461bcd60e51b815260040161053f906110fb565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b60606009805461041790611098565b600033816106da8286610755565b90508381101561073a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161053f565b6104cd828686840361091e565b6000336104a8818585610abb565b6001600160a01b0391821660009081526020818152604080832093909416825291909152205490565b60075461010090046001600160a01b0316336001600160a01b0316146107b65760405162461bcd60e51b815260040161053f906110fb565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b60075461010090046001600160a01b0316336001600160a01b0316146108195760405162461bcd60e51b815260040161053f906110fb565b6001600160a01b0381166108a45760405162461bcd60e51b815260206004820152604660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573732c207573652072656e6f756e63654f776e6572736869702046756064820152653731ba34b7b760d11b608482015260a40161053f565b60075461010090046001600160a01b031660009081526001602052604081205411156108f65760075461010090046001600160a01b03166000818152600160205260409020546108f691908390610abb565b600780546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166109805760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161053f565b6001600160a01b0382166109e15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161053f565b6001600160a01b038381166000818152602081815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610a4d8484610755565b90506000198114610ab55781811015610aa85760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161053f565b610ab5848484840361091e565b50505050565b6001600160a01b038316610b1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161053f565b6001600160a01b038216610b815760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161053f565b6001600160a01b038316600090815260016020526040902054811115610bf85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161053f565b610c03838383610d9b565b6001600160a01b038381166000818152600160209081526040808320805487810390915594871680845292819020805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b6001600160a01b038216610ccf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161053f565b6001600160a01b03821660009081526001602052604090205481811015610d435760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161053f565b6001600160a01b03831660008181526001602090815260408083208686039055600480548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610a34565b60075460ff1615610e50576001600160a01b03831660009081526002602052604090205460ff1615610e55576006548111158015610e04575060055481610df7846001600160a01b031660009081526001602052604090205490565b610e0191906110e8565b11155b610e505760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206973206f766572204d6178205472616e73616374696f6e0000604482015260640161053f565b505050565b6001600160a01b03821660009081526002602052604090205460ff168015610e9657506001600160a01b03831660009081526003602052604090205460ff16155b15610e5057600654811115610e505760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206973206f766572204d6178205472616e73616374696f6e0000604482015260640161053f565b600060208083528351808285015260005b81811015610f1a57858101830151858201604001528201610efe565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f5257600080fd5b919050565b60008060408385031215610f6a57600080fd5b610f7383610f3b565b946020939093013593505050565b600080600060608486031215610f9657600080fd5b610f9f84610f3b565b9250610fad60208501610f3b565b9150604084013590509250925092565b600060208284031215610fcf57600080fd5b5035919050565b600060208284031215610fe857600080fd5b610ff182610f3b565b9392505050565b80358015158114610f5257600080fd5b60008060006060848603121561101d57600080fd5b61102684610ff8565b95602085013595506040909401359392505050565b6000806040838503121561104e57600080fd5b61105783610f3b565b915061106560208401610ff8565b90509250929050565b6000806040838503121561108157600080fd5b61108a83610f3b565b915061106560208401610f3b565b600181811c908216806110ac57607f821691505b6020821081036110cc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156104ae576104ae6110d2565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b80820281158282048414176104ae576104ae6110d2565b60008261115e57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220b6bd75c2a428ac0b619e6e448f3c176023d3ba76843fe6c97044aad437699ebf64736f6c63430008120033