Token esApeX Token
Overview ERC20
Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
173,604.415674 esApeX
Holders:
319 addresses
Contract:
Decimals:
18
Official Site:
Balance
169.628436122117043648 esApeXValue
$0.00
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
ApeX is a decentralized, non-custodial, permissionless, censorship-resistant perpetual derivative protocol that enables the introduction of perpetual swap markets for any token pairs.Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EsAPEX
Compiler Version
v0.8.2+commit.661d1103
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "../interfaces/IERC20.sol"; import "../utils/Whitelist.sol"; contract EsAPEX is IERC20, Whitelist { string public constant override name = "esApeX Token"; string public constant override symbol = "esApeX"; uint8 public constant override decimals = 18; uint256 public override totalSupply; mapping(address => uint256) public override balanceOf; mapping(address => mapping(address => uint256)) public override allowance; constructor() { owner = msg.sender; _addOperator(owner); } function mint(address to, uint256 value) external onlyOperator returns (bool) { _mint(to, value); return true; } function burn(address from, uint256 value) external onlyOperator returns (bool) { _burn(from, value); return true; } function transfer(address to, uint256 value) external override operatorOrWhitelist returns (bool) { _transfer(msg.sender, to, value); return true; } function transferFrom( address from, address to, uint256 value ) external override operatorOrWhitelist returns (bool) { uint256 currentAllowance = allowance[from][msg.sender]; if (currentAllowance != type(uint256).max) { require(currentAllowance >= value, "esApeX: transfer amount exceeds allowance"); allowance[from][msg.sender] = currentAllowance - value; } _transfer(from, to, value); return true; } function approve(address spender, uint256 value) external override returns (bool) { _approve(msg.sender, spender, value); return true; } function _mint(address to, uint256 value) internal { totalSupply = totalSupply + value; balanceOf[to] = balanceOf[to] + value; emit Transfer(address(0), to, value); } function _burn(address from, uint256 value) internal { balanceOf[from] = balanceOf[from] - value; totalSupply = totalSupply - value; emit Transfer(from, address(0), value); } function _approve( address _owner, address spender, uint256 value ) private { allowance[_owner][spender] = value; emit Approval(_owner, spender, value); } function _transfer( address from, address to, uint256 value ) private { uint256 fromBalance = balanceOf[from]; require(fromBalance >= value, "esApeX: transfer amount exceeds balance"); balanceOf[from] = fromBalance - value; balanceOf[to] = balanceOf[to] + value; emit Transfer(from, to, value); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, 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 owner) external view returns (uint256); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external pure returns (uint8); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "./Ownable.sol"; abstract contract Whitelist is Ownable { mapping(address => bool) public whitelist; mapping(address => bool) public operator; //have access to mint/burn function addManyWhitelist(address[] calldata accounts) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { whitelist[accounts[i]] = true; } } function removeManyWhitelist(address[] calldata accounts) external onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { whitelist[accounts[i]] = false; } } function addOperator(address account) external onlyOwner { _addOperator(account); } function removeOperator(address account) external onlyOwner { require(operator[account], "whitelist.removeOperator: NOT_OPERATOR"); operator[account] = false; } function _addOperator(address account) internal { require(!operator[account], "whitelist.addOperator: ALREADY_OPERATOR"); operator[account] = true; } modifier onlyOperator() { require(operator[msg.sender], "whitelist: NOT_IN_OPERATOR"); _; } modifier operatorOrWhitelist() { require(operator[msg.sender] || whitelist[msg.sender], "whitelist: NOT_IN_OPERATOR_OR_WHITELIST"); _; } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; abstract contract Ownable { address public owner; address public pendingOwner; event NewOwner(address indexed oldOwner, address indexed newOwner); event NewPendingOwner(address indexed oldPendingOwner, address indexed newPendingOwner); modifier onlyOwner() { require(msg.sender == owner, "Ownable: REQUIRE_OWNER"); _; } function setPendingOwner(address newPendingOwner) external onlyOwner { require(pendingOwner != newPendingOwner, "Ownable: ALREADY_SET"); emit NewPendingOwner(pendingOwner, newPendingOwner); pendingOwner = newPendingOwner; } function acceptOwner() external { require(msg.sender == pendingOwner, "Ownable: REQUIRE_PENDING_OWNER"); address oldOwner = owner; address oldPendingOwner = pendingOwner; owner = pendingOwner; pendingOwner = address(0); emit NewOwner(oldOwner, owner); emit NewPendingOwner(oldPendingOwner, pendingOwner); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"NewOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldPendingOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newPendingOwner","type":"address"}],"name":"NewPendingOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addManyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"operator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeManyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingOwner","type":"address"}],"name":"setPendingOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916331790819055610037906001600160a01b031661003c565b6100dd565b6001600160a01b03811660009081526003602052604090205460ff16156100b95760405162461bcd60e51b815260206004820152602760248201527f77686974656c6973742e6164644f70657261746f723a20414c52454144595f4f6044820152662822a920aa27a960c91b606482015260840160405180910390fd5b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b610fcf806100ec6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80639870d7fe116100b8578063a9059cbb1161007c578063a9059cbb146102fb578063ac8a584a1461030e578063c42069ec14610321578063dd62ed3e14610334578063e30c39781461035f578063ebbc49651461037257610137565b80639870d7fe1461027c5780639a3073911461028f5780639b19251a146102b25780639d8168f0146102d55780639dc29fac146102e857610137565b8063313ce567116100ff578063313ce567146101df57806340c10f19146101f957806370a082311461020c5780638da5cb5b1461022c57806395d89b411461025757610137565b806306fdde031461013c578063095ea7b31461017d5780630aaef916146101a057806318160ddd146101b557806323b872dd146101cc575b600080fd5b6101676040518060400160405280600c81526020016b32b9a0b832ac102a37b5b2b760a11b81525081565b6040516101749190610e6f565b60405180910390f35b61019061018b366004610dd7565b61037a565b6040519015158152602001610174565b6101b36101ae366004610e00565b610390565b005b6101be60045481565b604051908152602001610174565b6101906101da366004610d9c565b610448565b6101e7601281565b60405160ff9091168152602001610174565b610190610207366004610dd7565b610565565b6101be61021a366004610d49565b60056020526000908152604090205481565b60005461023f906001600160a01b031681565b6040516001600160a01b039091168152602001610174565b610167604051806040016040528060068152602001650cae682e0cab60d31b81525081565b6101b361028a366004610d49565b6105ce565b61019061029d366004610d49565b60036020526000908152604090205460ff1681565b6101906102c0366004610d49565b60026020526000908152604090205460ff1681565b6101b36102e3366004610e00565b610604565b6101906102f6366004610dd7565b6106ae565b610190610309366004610dd7565b610717565b6101b361031c366004610d49565b61076b565b6101b361032f366004610d49565b61082d565b6101be610342366004610d6a565b600660209081526000928352604080842090915290825290205481565b60015461023f906001600160a01b031681565b6101b3610908565b60006103873384846109fc565b50600192915050565b6000546001600160a01b031633146103c35760405162461bcd60e51b81526004016103ba90610f09565b60405180910390fd5b60005b81811015610443576001600260008585858181106103f457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906104099190610d49565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061043b81610f68565b9150506103c6565b505050565b3360009081526003602052604081205460ff168061047557503360009081526002602052604090205460ff165b6104915760405162461bcd60e51b81526004016103ba90610ec2565b6001600160a01b0384166000908152600660209081526040808320338452909152902054600019811461054f57828110156105205760405162461bcd60e51b815260206004820152602960248201527f6573417065583a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103ba565b61052a8382610f51565b6001600160a01b03861660009081526006602090815260408083203384529091529020555b61055a858585610a5d565b506001949350505050565b3360009081526003602052604081205460ff166105c45760405162461bcd60e51b815260206004820152601a60248201527f77686974656c6973743a204e4f545f494e5f4f50455241544f5200000000000060448201526064016103ba565b6103878383610b72565b6000546001600160a01b031633146105f85760405162461bcd60e51b81526004016103ba90610f09565b61060181610c04565b50565b6000546001600160a01b0316331461062e5760405162461bcd60e51b81526004016103ba90610f09565b60005b818110156104435760006002600085858581811061065f57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106749190610d49565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806106a681610f68565b915050610631565b3360009081526003602052604081205460ff1661070d5760405162461bcd60e51b815260206004820152601a60248201527f77686974656c6973743a204e4f545f494e5f4f50455241544f5200000000000060448201526064016103ba565b6103878383610ca1565b3360009081526003602052604081205460ff168061074457503360009081526002602052604090205460ff165b6107605760405162461bcd60e51b81526004016103ba90610ec2565b610387338484610a5d565b6000546001600160a01b031633146107955760405162461bcd60e51b81526004016103ba90610f09565b6001600160a01b03811660009081526003602052604090205460ff1661080c5760405162461bcd60e51b815260206004820152602660248201527f77686974656c6973742e72656d6f76654f70657261746f723a204e4f545f4f5060448201526522a920aa27a960d11b60648201526084016103ba565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b031633146108575760405162461bcd60e51b81526004016103ba90610f09565b6001546001600160a01b03828116911614156108ac5760405162461bcd60e51b815260206004820152601460248201527313dddb98589b194e881053149150511657d4d15560621b60448201526064016103ba565b6001546040516001600160a01b038084169216907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146109625760405162461bcd60e51b815260206004820152601e60248201527f4f776e61626c653a20524551554952455f50454e44494e475f4f574e4552000060448201526064016103ba565b60008054600180546001600160a01b038082166001600160a01b03198086168217808855931690935560405193811694929391169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526005602052604090205481811015610ad65760405162461bcd60e51b815260206004820152602760248201527f6573417065583a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103ba565b610ae08282610f51565b6001600160a01b038086166000908152600560205260408082209390935590851681522054610b10908390610f39565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b649086815260200190565b60405180910390a350505050565b80600454610b809190610f39565b6004556001600160a01b038216600090815260056020526040902054610ba7908290610f39565b6001600160a01b0383166000818152600560205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bf89085815260200190565b60405180910390a35050565b6001600160a01b03811660009081526003602052604090205460ff1615610c7d5760405162461bcd60e51b815260206004820152602760248201527f77686974656c6973742e6164644f70657261746f723a20414c52454144595f4f6044820152662822a920aa27a960c91b60648201526084016103ba565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6001600160a01b038216600090815260056020526040902054610cc5908290610f51565b6001600160a01b038316600090815260056020526040902055600454610cec908290610f51565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bf8565b80356001600160a01b0381168114610d4457600080fd5b919050565b600060208284031215610d5a578081fd5b610d6382610d2d565b9392505050565b60008060408385031215610d7c578081fd5b610d8583610d2d565b9150610d9360208401610d2d565b90509250929050565b600080600060608486031215610db0578081fd5b610db984610d2d565b9250610dc760208501610d2d565b9150604084013590509250925092565b60008060408385031215610de9578182fd5b610df283610d2d565b946020939093013593505050565b60008060208385031215610e12578182fd5b823567ffffffffffffffff80821115610e29578384fd5b818501915085601f830112610e3c578384fd5b813581811115610e4a578485fd5b8660208083028501011115610e5d578485fd5b60209290920196919550909350505050565b6000602080835283518082850152825b81811015610e9b57858101830151858201604001528201610e7f565b81811115610eac5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526027908201527f77686974656c6973743a204e4f545f494e5f4f50455241544f525f4f525f5748604082015266125511531254d560ca1b606082015260800190565b60208082526016908201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b604082015260600190565b60008219821115610f4c57610f4c610f83565b500190565b600082821015610f6357610f63610f83565b500390565b6000600019821415610f7c57610f7c610f83565b5060010190565b634e487b7160e01b600052601160045260246000fdfea26469706673582212209b5628d87205a9f76835ef27250cd69c0b2b65e38ebf39060f5bdc6be366d20d64736f6c63430008020033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80639870d7fe116100b8578063a9059cbb1161007c578063a9059cbb146102fb578063ac8a584a1461030e578063c42069ec14610321578063dd62ed3e14610334578063e30c39781461035f578063ebbc49651461037257610137565b80639870d7fe1461027c5780639a3073911461028f5780639b19251a146102b25780639d8168f0146102d55780639dc29fac146102e857610137565b8063313ce567116100ff578063313ce567146101df57806340c10f19146101f957806370a082311461020c5780638da5cb5b1461022c57806395d89b411461025757610137565b806306fdde031461013c578063095ea7b31461017d5780630aaef916146101a057806318160ddd146101b557806323b872dd146101cc575b600080fd5b6101676040518060400160405280600c81526020016b32b9a0b832ac102a37b5b2b760a11b81525081565b6040516101749190610e6f565b60405180910390f35b61019061018b366004610dd7565b61037a565b6040519015158152602001610174565b6101b36101ae366004610e00565b610390565b005b6101be60045481565b604051908152602001610174565b6101906101da366004610d9c565b610448565b6101e7601281565b60405160ff9091168152602001610174565b610190610207366004610dd7565b610565565b6101be61021a366004610d49565b60056020526000908152604090205481565b60005461023f906001600160a01b031681565b6040516001600160a01b039091168152602001610174565b610167604051806040016040528060068152602001650cae682e0cab60d31b81525081565b6101b361028a366004610d49565b6105ce565b61019061029d366004610d49565b60036020526000908152604090205460ff1681565b6101906102c0366004610d49565b60026020526000908152604090205460ff1681565b6101b36102e3366004610e00565b610604565b6101906102f6366004610dd7565b6106ae565b610190610309366004610dd7565b610717565b6101b361031c366004610d49565b61076b565b6101b361032f366004610d49565b61082d565b6101be610342366004610d6a565b600660209081526000928352604080842090915290825290205481565b60015461023f906001600160a01b031681565b6101b3610908565b60006103873384846109fc565b50600192915050565b6000546001600160a01b031633146103c35760405162461bcd60e51b81526004016103ba90610f09565b60405180910390fd5b60005b81811015610443576001600260008585858181106103f457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906104099190610d49565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061043b81610f68565b9150506103c6565b505050565b3360009081526003602052604081205460ff168061047557503360009081526002602052604090205460ff165b6104915760405162461bcd60e51b81526004016103ba90610ec2565b6001600160a01b0384166000908152600660209081526040808320338452909152902054600019811461054f57828110156105205760405162461bcd60e51b815260206004820152602960248201527f6573417065583a207472616e7366657220616d6f756e74206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016103ba565b61052a8382610f51565b6001600160a01b03861660009081526006602090815260408083203384529091529020555b61055a858585610a5d565b506001949350505050565b3360009081526003602052604081205460ff166105c45760405162461bcd60e51b815260206004820152601a60248201527f77686974656c6973743a204e4f545f494e5f4f50455241544f5200000000000060448201526064016103ba565b6103878383610b72565b6000546001600160a01b031633146105f85760405162461bcd60e51b81526004016103ba90610f09565b61060181610c04565b50565b6000546001600160a01b0316331461062e5760405162461bcd60e51b81526004016103ba90610f09565b60005b818110156104435760006002600085858581811061065f57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106749190610d49565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806106a681610f68565b915050610631565b3360009081526003602052604081205460ff1661070d5760405162461bcd60e51b815260206004820152601a60248201527f77686974656c6973743a204e4f545f494e5f4f50455241544f5200000000000060448201526064016103ba565b6103878383610ca1565b3360009081526003602052604081205460ff168061074457503360009081526002602052604090205460ff165b6107605760405162461bcd60e51b81526004016103ba90610ec2565b610387338484610a5d565b6000546001600160a01b031633146107955760405162461bcd60e51b81526004016103ba90610f09565b6001600160a01b03811660009081526003602052604090205460ff1661080c5760405162461bcd60e51b815260206004820152602660248201527f77686974656c6973742e72656d6f76654f70657261746f723a204e4f545f4f5060448201526522a920aa27a960d11b60648201526084016103ba565b6001600160a01b03166000908152600360205260409020805460ff19169055565b6000546001600160a01b031633146108575760405162461bcd60e51b81526004016103ba90610f09565b6001546001600160a01b03828116911614156108ac5760405162461bcd60e51b815260206004820152601460248201527313dddb98589b194e881053149150511657d4d15560621b60448201526064016103ba565b6001546040516001600160a01b038084169216907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146109625760405162461bcd60e51b815260206004820152601e60248201527f4f776e61626c653a20524551554952455f50454e44494e475f4f574e4552000060448201526064016103ba565b60008054600180546001600160a01b038082166001600160a01b03198086168217808855931690935560405193811694929391169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526005602052604090205481811015610ad65760405162461bcd60e51b815260206004820152602760248201527f6573417065583a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103ba565b610ae08282610f51565b6001600160a01b038086166000908152600560205260408082209390935590851681522054610b10908390610f39565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b649086815260200190565b60405180910390a350505050565b80600454610b809190610f39565b6004556001600160a01b038216600090815260056020526040902054610ba7908290610f39565b6001600160a01b0383166000818152600560205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610bf89085815260200190565b60405180910390a35050565b6001600160a01b03811660009081526003602052604090205460ff1615610c7d5760405162461bcd60e51b815260206004820152602760248201527f77686974656c6973742e6164644f70657261746f723a20414c52454144595f4f6044820152662822a920aa27a960c91b60648201526084016103ba565b6001600160a01b03166000908152600360205260409020805460ff19166001179055565b6001600160a01b038216600090815260056020526040902054610cc5908290610f51565b6001600160a01b038316600090815260056020526040902055600454610cec908290610f51565b6004556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610bf8565b80356001600160a01b0381168114610d4457600080fd5b919050565b600060208284031215610d5a578081fd5b610d6382610d2d565b9392505050565b60008060408385031215610d7c578081fd5b610d8583610d2d565b9150610d9360208401610d2d565b90509250929050565b600080600060608486031215610db0578081fd5b610db984610d2d565b9250610dc760208501610d2d565b9150604084013590509250925092565b60008060408385031215610de9578182fd5b610df283610d2d565b946020939093013593505050565b60008060208385031215610e12578182fd5b823567ffffffffffffffff80821115610e29578384fd5b818501915085601f830112610e3c578384fd5b813581811115610e4a578485fd5b8660208083028501011115610e5d578485fd5b60209290920196919550909350505050565b6000602080835283518082850152825b81811015610e9b57858101830151858201604001528201610e7f565b81811115610eac5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526027908201527f77686974656c6973743a204e4f545f494e5f4f50455241544f525f4f525f5748604082015266125511531254d560ca1b606082015260800190565b60208082526016908201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b604082015260600190565b60008219821115610f4c57610f4c610f83565b500190565b600082821015610f6357610f63610f83565b500390565b6000600019821415610f7c57610f7c610f83565b5060010190565b634e487b7160e01b600052601160045260246000fdfea26469706673582212209b5628d87205a9f76835ef27250cd69c0b2b65e38ebf39060f5bdc6be366d20d64736f6c63430008020033