Source Code
Overview
FTM Balance
0 FTM
More Info
ContractCreator:
TokenTracker
Multichain Info
N/A
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
9287714 | 651 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
MARKET
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at testnet.ftmscan.com on 2022-06-17 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: 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 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); 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); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IMARKET { function transferWithoutFee(address to, uint256 amount) external; function transferFromWithoutFee(address from, address to, uint256 amount) external; function decimals() external view returns (uint8); function balanceOf(address account) external view returns (uint256); function marketWallet() external view returns (address); } contract MARKET is ERC20, IMARKET { using SafeMath for uint256; address private _basePool; // should be base pool (Pool) address private _minter; // should be staking pool (MasterPlatypusV3) address private _owner; address public feeWallet = 0x4935b168eA3481E52922fA3052586afcc7EbadBb; address private _marketWallet = 0x4935b168eA3481E52922fA3052586afcc7EbadBb; uint256 private _maxFee = 3000; // 100 times, it means 30% (0.3) uint256 private _maxFeeDays = 60; // 0.5% reduce fee per day uint256 private totalSupplyAmount = 300_000_000e18; event MarketWalletUpdated(address indexed sender, address indexed oldwallet, address indexed newwallet); event FeeWalletUpdated(address indexed user, address indexed oldwallet, address indexed newwallet); event MaxFeeUpdated(address indexed user, uint256 oldFee, uint256 newFee); event MaxFeeDaysUpdated(address indexed user, uint256 oldDays, uint256 newDays); event ExcludeFromFees(address indexed account, bool isExcluded); event MinterChanged(address indexed minter, address indexed newMinter); event BasePoolChanged(address indexed basePool, address indexed newBasePool); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event CalcFee(uint256 totalFee, uint256 removableMaxId, uint256 remainAmount); struct AmountTime { uint256 amount; uint256 timestamp; } mapping(address => AmountTime[]) private _history; mapping (address => bool) private _isExcludedFromFees; constructor() ERC20("MARKET Token", "MARKET") { _owner = msg.sender; uint256 half = totalSupplyAmount.div(2); uint256 anotherHalf = totalSupplyAmount.sub(half); _mint(_owner, half); // for market place _mint(address(this), anotherHalf); // for reward _isExcludedFromFees[_owner] = true; _isExcludedFromFees[feeWallet] = true; _isExcludedFromFees[_marketWallet] = true; _isExcludedFromFees[address(this)] = true; } function owner() public view returns (address) { return _owner; } function minter() public view returns (address) { return _minter; } function basePool() public view returns (address) { return _basePool; } modifier onlyOwner() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } modifier onlyMinter() { require(_minter == msg.sender, "Minable: caller is not the minter"); _; } modifier onlyBasePool() { require(_basePool == msg.sender, "Minable: caller is not the base pool"); _; } modifier onlyOwnerOrMinter() { require(_minter == msg.sender || _owner == msg.sender, "Minable: caller is not the owner or minter"); _; } modifier onlybasePoolOrMinter() { require(_minter == msg.sender || _basePool == msg.sender, "Minable: caller is not the basePool or minter"); _; } modifier onlyOwnerOrMinterOrBasePool() { require(_minter == msg.sender || _owner == msg.sender || _basePool == msg.sender, "Minable: caller is not the owner, minter or basePool"); _; } function decimals() public view override (IMARKET, ERC20) returns (uint8) { return super.decimals(); } function balanceOf(address account) public view override (IMARKET, ERC20) returns (uint256) { return super.balanceOf(account); } function marketWallet() public view returns (address) { return _marketWallet; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); require(newOwner != _owner, "Ownable: same owner"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } function setBasePool(address newpool) external onlyOwner { require(newpool != address(0), "basePool: new pool is the zero address"); require(newpool != _basePool, "basePool: same basePool"); emit BasePoolChanged(_basePool, newpool); _basePool = newpool; _isExcludedFromFees[_basePool] = true; super._approve(address(this), _basePool, type(uint256).max); } function setMinter(address newMinter) external onlyOwner { require(newMinter != address(0), "Minter: new minter is the zero address"); require(newMinter != _minter, "Minter: same minter"); address oldMinter = _minter; _minter = newMinter; _isExcludedFromFees[_minter] = true; emit MinterChanged(oldMinter, newMinter); super._approve(address(this), _minter, type(uint256).max); } function updateMarketWallet(address newwallet) external onlyOwner { require(newwallet != address(0), "updateMarketWallet: zero address"); require(_marketWallet != newwallet, "updateMarketWallet: same address"); emit MarketWalletUpdated(msg.sender, _marketWallet, newwallet); _marketWallet = newwallet; } function mint(address dst, uint256 amount) external onlyOwnerOrMinter { _mint(dst, amount); } function transferWithoutFee(address to, uint256 amount) public override onlyMinter { require(to != address(this), "transferWithoutFee: return back"); require(to != address(0), "transferWithoutFee: zero address"); // super._transfer(address(this), to, amount); _transfer(address(this), to, amount); } function transferFromWithoutFee(address from, address to, uint256 amount) public override onlybasePoolOrMinter { require(to != address(this), "transferFromWithoutFee: return back"); require(to != address(0), "transferFromWithoutFee: zero address"); // address spender = msg.sender; // super._spendAllowance(from, spender, amount); // super._transfer(from, to, amount); _transfer(from, to, amount); } function _transfer(address from, address to, uint256 amount) internal virtual override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (_isExcludedFromFees[from]) { super._transfer(from, to, amount); if (!_isExcludedFromFees[to]) { _history[to].push(AmountTime(amount, block.timestamp)); } } else { (uint256 fee, uint removableMaxId, uint256 remainAmount) = _calcFee(from, amount, block.timestamp); emit CalcFee(fee, removableMaxId, remainAmount); if (!_isExcludedFromFees[to]) { if (fee > 0) { super._transfer(from, to, amount-fee); super._transfer(from, feeWallet, fee); } else super._transfer(from, to, amount); _history[to].push(AmountTime(amount-fee, block.timestamp)); } else { super._transfer(from, to, amount); } _history[from][removableMaxId].amount = remainAmount; _removeInHistory(from, removableMaxId); } } function calcFee(address from, uint256 amount, uint256 curTimestamp) external view returns ( uint256 totalFee, uint256 removableMaxId, uint256 remainAmount ) { (totalFee, removableMaxId, remainAmount) = _calcFee(from, amount, curTimestamp); } function _calcFee(address from, uint256 amount, uint256 curTimestamp) private view returns ( uint256 totalFee, uint256 removableMaxId, uint256 remainAmount ) { uint256 deltaAmount = amount; AmountTime[] memory inTnxs = _history[from]; for (uint256 i=0;i<inTnxs.length;i++) { if (deltaAmount > 0) { uint256 amt = inTnxs[i].amount; uint256 deltaDays = (curTimestamp - inTnxs[i].timestamp) / (24 * 60 * 60); if (deltaAmount > amt) { deltaAmount -= amt; if (deltaDays < _maxFeeDays) { uint256 fee = amt * (_maxFeeDays - deltaDays) * _maxFee /(10000 * _maxFeeDays); totalFee += fee; } } else { if (deltaDays < _maxFeeDays) { uint256 fee = deltaAmount * (_maxFeeDays - deltaDays) * _maxFee /(10000 * _maxFeeDays); totalFee += fee; } remainAmount = amt - deltaAmount; deltaAmount = 0; removableMaxId = i; } } } } function _removeInHistory(address user, uint removableMaxId) private { if (removableMaxId > 0) { for (uint i=0;i<_history[user].length-(removableMaxId);i++) { _history[user][i] = _history[user][i+removableMaxId]; } for (uint i=0;i<removableMaxId;i++) { _history[user].pop(); } } } function history(address user) public view returns (AmountTime[] memory) { return _history[user]; } function maxFee() public view returns (uint256) { return _maxFee / 100; } function maxFeeDays() public view returns (uint256) { return _maxFeeDays; } function updateMaxFee(uint256 newFee) public onlyOwner { require(_maxFee != 100*newFee, "updateMaxFee: same max fee"); emit MaxFeeUpdated(msg.sender, _maxFee/100, newFee); _maxFee = 100*newFee; } function updateMaxFeeDays(uint256 newDays) public onlyOwner { require(_maxFeeDays != newDays, "updateFeeDays: same fee days"); emit MaxFeeDaysUpdated(msg.sender, _maxFeeDays, newDays); _maxFeeDays = newDays; } function updateFeeWallet(address newWallet) public onlyOwner { require(feeWallet != newWallet, "updateFeeWallet: same wallet address"); emit FeeWalletUpdated(msg.sender, feeWallet, newWallet); feeWallet = newWallet; } function isExcludedFromFees(address account) external view returns(bool) { return _isExcludedFromFees[account]; } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "excludeFromFees: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } }
[{"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":"basePool","type":"address"},{"indexed":true,"internalType":"address","name":"newBasePool","type":"address"}],"name":"BasePoolChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"removableMaxId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainAmount","type":"uint256"}],"name":"CalcFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"oldwallet","type":"address"},{"indexed":true,"internalType":"address","name":"newwallet","type":"address"}],"name":"FeeWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"oldwallet","type":"address"},{"indexed":true,"internalType":"address","name":"newwallet","type":"address"}],"name":"MarketWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldDays","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDays","type":"uint256"}],"name":"MaxFeeDaysUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"MaxFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"address","name":"newMinter","type":"address"}],"name":"MinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"basePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"curTimestamp","type":"uint256"}],"name":"calcFee","outputs":[{"internalType":"uint256","name":"totalFee","type":"uint256"},{"internalType":"uint256","name":"removableMaxId","type":"uint256"},{"internalType":"uint256","name":"remainAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"history","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct MARKET.AmountTime[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFeeDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newpool","type":"address"}],"name":"setBasePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMinter","type":"address"}],"name":"setMinter","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":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","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":"amount","type":"uint256"}],"name":"transferFromWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newwallet","type":"address"}],"name":"updateMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"updateMaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDays","type":"uint256"}],"name":"updateMaxFeeDays","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260088054734935b168ea3481e52922fa3052586afcc7ebadbb6001600160a01b03199182168117909255600980549091169091179055610bb8600a55603c600b556af8277896582678ac000000600c553480156200006157600080fd5b50604080518082018252600c81526b26a0a925a2aa102a37b5b2b760a11b60208083019182528351808501909452600684526513505492d15560d21b908401528151919291620000b491600391620003a3565b508051620000ca906004906020840190620003a3565b505060078054336001600160a01b031990911617905550600c5460009062000100906002620001ad602090811b6200135c17901c565b905060006200012082600c54620001fe60201b620013a51790919060201c565b6007549091506200013b906001600160a01b03168362000248565b62000147308262000248565b50506007546001600160a01b039081166000908152600e60205260408082208054600160ff19918216811790925560085485168452828420805482168317905560095490941683528183208054851682179055308352912080549092161790556200054c565b6000620001f783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200033160201b60201c565b9392505050565b6000620001f783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200036d60201b60201c565b6001600160a01b038216620002a45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620002b891906200045f565b90915550506001600160a01b03821660009081526020819052604081208054839290620002e79084906200045f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60008183620003555760405162461bcd60e51b81526004016200029b91906200047a565b506000620003648486620004d2565b95945050505050565b60008184841115620003945760405162461bcd60e51b81526004016200029b91906200047a565b506000620003648486620004f5565b828054620003b1906200050f565b90600052602060002090601f016020900481019282620003d5576000855562000420565b82601f10620003f057805160ff191683800117855562000420565b8280016001018555821562000420579182015b828111156200042057825182559160200191906001019062000403565b506200042e92915062000432565b5090565b5b808211156200042e576000815560010162000433565b634e487b7160e01b600052601160045260246000fd5b6000821982111562000475576200047562000449565b500190565b600060208083528351808285015260005b81811015620004a9578581018301518582016040015282016200048b565b81811115620004bc576000604083870101525b50601f01601f1916929092016040019392505050565b600082620004f057634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156200050a576200050a62000449565b500390565b600181811c908216806200052457607f821691505b602082108114156200054657634e487b7160e01b600052602260045260246000fd5b50919050565b61221a806200055c6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063dd62ed3e1161007c578063dd62ed3e14610465578063e4440a861461049e578063f25f4b56146104af578063f2fde38b146104c2578063fca3b5aa146104d557600080fd5b8063a9059cbb14610426578063c024666814610439578063c531e24f1461044c578063d99e50da1461045d57600080fd5b8063931c7c68116100e9578063931c7c68146103d857806395d89b41146103f857806397ec2b3e14610400578063a457c2d71461041357600080fd5b8063715018a6146103995780637a2bbf65146103a15780637f92366f146103b45780638da5cb5b146103c757600080fd5b806339509351116101925780634fbee193116101615780634fbee1931461031e578063550dddeb1461034a578063667185241461035d57806370a082311461037057600080fd5b806339509351146102d057806340c10f19146102e3578063478d3515146102f85780634d474d421461030b57600080fd5b806318160ddd116101ce57806318160ddd1461027857806323b872dd14610280578063313ce56714610293578063333f950e146102a257600080fd5b806301f59d161461020057806306fdde031461021b5780630754617214610230578063095ea7b314610255575b600080fd5b6102086104e8565b6040519081526020015b60405180910390f35b6102236104fe565b6040516102129190611e23565b6006546001600160a01b03165b6040516001600160a01b039091168152602001610212565b610268610263366004611e94565b610590565b6040519015158152602001610212565b600254610208565b61026861028e366004611ebe565b6105a8565b60405160128152602001610212565b6102b56102b0366004611efa565b6105cc565b60408051938452602084019290925290820152606001610212565b6102686102de366004611e94565b6105eb565b6102f66102f1366004611e94565b61062a565b005b6102f6610306366004611f2d565b6106bf565b6102f6610319366004611f46565b61077e565b61026861032c366004611f46565b6001600160a01b03166000908152600e602052604090205460ff1690565b6102f6610358366004611f2d565b6108ba565b6102f661036b366004611f46565b6109a2565b61020861037e366004611f46565b6001600160a01b031660009081526020819052604090205490565b6102f6610a94565b6102f66103af366004611e94565b610aca565b6102f66103c2366004611ebe565b610be8565b6007546001600160a01b031661023d565b6103eb6103e6366004611f46565b610d44565b6040516102129190611f61565b610223610dcd565b6102f661040e366004611f46565b610ddc565b610268610421366004611e94565b610f4f565b610268610434366004611e94565b610fe1565b6102f6610447366004611fb0565b610fef565b6005546001600160a01b031661023d565b600b54610208565b610208610473366004611fec565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6009546001600160a01b031661023d565b60085461023d906001600160a01b031681565b6102f66104d0366004611f46565b61110d565b6102f66104e3366004611f46565b6111f9565b60006064600a546104f99190612035565b905090565b60606003805461050d90612057565b80601f016020809104026020016040519081016040528092919081815260200182805461053990612057565b80156105865780601f1061055b57610100808354040283529160200191610586565b820191906000526020600020905b81548152906001019060200180831161056957829003601f168201915b5050505050905090565b60003361059e8185856113e7565b5060019392505050565b6000336105b685828561150b565b6105c185858561159d565b506001949350505050565b60008060006105dc8686866117fc565b91989097509095509350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061059e9082908690610625908790612092565b6113e7565b6006546001600160a01b031633148061064d57506007546001600160a01b031633145b6106b15760405162461bcd60e51b815260206004820152602a60248201527f4d696e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152691037b91036b4b73a32b960b11b60648201526084015b60405180910390fd5b6106bb82826119f9565b5050565b6007546001600160a01b031633146106e95760405162461bcd60e51b81526004016106a8906120aa565b80600b54141561073b5760405162461bcd60e51b815260206004820152601c60248201527f757064617465466565446179733a2073616d652066656520646179730000000060448201526064016106a8565b600b54604080519182526020820183905233917f9d3548b1a7cd17558e49cb69b9e97c7c84785df7061656d030c640ec7409c0bb910160405180910390a2600b55565b6007546001600160a01b031633146107a85760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b0381166107fe5760405162461bcd60e51b815260206004820181905260248201527f7570646174654d61726b657457616c6c65743a207a65726f206164647265737360448201526064016106a8565b6009546001600160a01b038281169116141561085c5760405162461bcd60e51b815260206004820181905260248201527f7570646174654d61726b657457616c6c65743a2073616d65206164647265737360448201526064016106a8565b6009546040516001600160a01b0380841692169033907fceb7000f10e730aca9fc4668f73078ada36b79bce4ac88e68fbc8a98044640b490600090a4600980546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031633146108e45760405162461bcd60e51b81526004016106a8906120aa565b6108ef8160646120df565b600a5414156109405760405162461bcd60e51b815260206004820152601a60248201527f7570646174654d61784665653a2073616d65206d61782066656500000000000060448201526064016106a8565b336001600160a01b03167f07bf93ef3b4a7a2e55dc130c9163f7f888080dbca9b9bdfe25a27d4817a5b2f86064600a5461097a9190612035565b60408051918252602082018590520160405180910390a261099c8160646120df565b600a5550565b6007546001600160a01b031633146109cc5760405162461bcd60e51b81526004016106a8906120aa565b6008546001600160a01b0382811691161415610a365760405162461bcd60e51b8152602060048201526024808201527f75706461746546656557616c6c65743a2073616d652077616c6c6574206164646044820152637265737360e01b60648201526084016106a8565b6008546040516001600160a01b0380841692169033907f1fc185583f4ad646ee14bd1ce4bb3487b3b74de944f00cd94d4c22449b95abc190600090a4600880546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b03163314610abe5760405162461bcd60e51b81526004016106a8906120aa565b610ac86000611ad8565b565b6006546001600160a01b03163314610b2e5760405162461bcd60e51b815260206004820152602160248201527f4d696e61626c653a2063616c6c6572206973206e6f7420746865206d696e74656044820152603960f91b60648201526084016106a8565b6001600160a01b038216301415610b875760405162461bcd60e51b815260206004820152601f60248201527f7472616e73666572576974686f75744665653a2072657475726e206261636b0060448201526064016106a8565b6001600160a01b038216610bdd5760405162461bcd60e51b815260206004820181905260248201527f7472616e73666572576974686f75744665653a207a65726f206164647265737360448201526064016106a8565b6106bb30838361159d565b6006546001600160a01b0316331480610c0b57506005546001600160a01b031633145b610c6d5760405162461bcd60e51b815260206004820152602d60248201527f4d696e61626c653a2063616c6c6572206973206e6f742074686520626173655060448201526c37b7b61037b91036b4b73a32b960991b60648201526084016106a8565b6001600160a01b038216301415610cd25760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657246726f6d576974686f75744665653a2072657475726e206260448201526261636b60e81b60648201526084016106a8565b6001600160a01b038216610d345760405162461bcd60e51b8152602060048201526024808201527f7472616e7366657246726f6d576974686f75744665653a207a65726f206164646044820152637265737360e01b60648201526084016106a8565b610d3f83838361159d565b505050565b6001600160a01b0381166000908152600d60209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610dc257838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610d7c565b505050509050919050565b60606004805461050d90612057565b6007546001600160a01b03163314610e065760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b038116610e6b5760405162461bcd60e51b815260206004820152602660248201527f62617365506f6f6c3a206e657720706f6f6c20697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6005546001600160a01b0382811691161415610ec95760405162461bcd60e51b815260206004820152601760248201527f62617365506f6f6c3a2073616d652062617365506f6f6c00000000000000000060448201526064016106a8565b6005546040516001600160a01b038084169216907f78429bc5210e1bda0f89898b1f7a359f0d7c5372b15cf06f800670165d3995b890600090a3600580546001600160a01b0319166001600160a01b0383811691821783556000918252600e6020526040909120805460ff191660011790559054610f4c913091166000196113e7565b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610fd45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106a8565b6105c182868684036113e7565b60003361059e81858561159d565b6007546001600160a01b031633146110195760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b0382166000908152600e602052604090205460ff16151581151514156110ae5760405162461bcd60e51b815260206004820152603b60248201527f6578636c75646546726f6d466565733a204163636f756e7420697320616c726560448201527f616479207468652076616c7565206f6620276578636c7564656427000000000060648201526084016106a8565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6007546001600160a01b031633146111375760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b03811661119c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6007546001600160a01b03828116911614156111f05760405162461bcd60e51b815260206004820152601360248201527227bbb730b136329d1039b0b6b29037bbb732b960691b60448201526064016106a8565b610f4c81611ad8565b6007546001600160a01b031633146112235760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b0381166112885760405162461bcd60e51b815260206004820152602660248201527f4d696e7465723a206e6577206d696e74657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6006546001600160a01b03828116911614156112dc5760405162461bcd60e51b815260206004820152601360248201527226b4b73a32b91d1039b0b6b29036b4b73a32b960691b60448201526064016106a8565b600680546001600160a01b038381166001600160a01b0319831681179093556000838152600e6020526040808220805460ff191660011790555191909216929183917f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69190a36006546106bb9030906001600160a01b03166000196113e7565b600061139e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b2a565b9392505050565b600061139e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b61565b6001600160a01b0383166114495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106a8565b6001600160a01b0382166114aa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106a8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611597578181101561158a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106a8565b61159784848484036113e7565b50505050565b6001600160a01b0383166115c35760405162461bcd60e51b81526004016106a8906120fe565b6001600160a01b0382166115e95760405162461bcd60e51b81526004016106a890612143565b6001600160a01b0383166000908152600e602052604090205460ff161561168757611615838383611b92565b6001600160a01b0382166000908152600e602052604090205460ff16610d3f576001600160a01b03919091166000908152600d60209081526040808320815180830190925293815242818301908152845460018082018755958552929093209051600290920201908155905191015550565b60008060006116978685426117fc565b604080518481526020810184905290810182905292955090935091507f02969729a3171665c36baee1eafffe4b2b192d0431e9ad18c52c800d7a16783d9060600160405180910390a16001600160a01b0385166000908152600e602052604090205460ff166117a15782156117375761171a86866117158688612186565b611b92565b6008546117329087906001600160a01b031685611b92565b611742565b611742868686611b92565b6001600160a01b0385166000908152600d602052604090819020815180830190925290806117708688612186565b81524260209182015282546001818101855560009485529382902083516002909202019081559101519101556117ac565b6117ac868686611b92565b6001600160a01b0386166000908152600d602052604090208054829190849081106117d9576117d961219d565b60009182526020909120600290910201556117f48683611ce6565b505050505050565b6001600160a01b0383166000908152600d60209081526040808320805482518185028101850190935280835284938493889385939192909190849084015b828210156118805783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061183a565b50505050905060005b81518110156119ed5782156119db5760008282815181106118ac576118ac61219d565b60200260200101516000015190506000620151808484815181106118d2576118d261219d565b6020026020010151602001518a6118e99190612186565b6118f39190612035565b905081851115611969576119078286612186565b9450600b54811015611964576000600b5461271061192591906120df565b600a5483600b546119369190612186565b61194090866120df565b61194a91906120df565b6119549190612035565b9050611960818a612092565b9850505b6119d8565b600b548110156119c4576000600b5461271061198591906120df565b600a5483600b546119969190612186565b6119a090896120df565b6119aa91906120df565b6119b49190612035565b90506119c0818a612092565b9850505b6119ce8583612186565b9550600094508296505b50505b806119e5816121b3565b915050611889565b50505093509350939050565b6001600160a01b038216611a4f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106a8565b8060026000828254611a619190612092565b90915550506001600160a01b03821660009081526020819052604081208054839290611a8e908490612092565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008183611b4b5760405162461bcd60e51b81526004016106a89190611e23565b506000611b588486612035565b95945050505050565b60008184841115611b855760405162461bcd60e51b81526004016106a89190611e23565b506000611b588486612186565b6001600160a01b038316611bb85760405162461bcd60e51b81526004016106a8906120fe565b6001600160a01b038216611bde5760405162461bcd60e51b81526004016106a890612143565b6001600160a01b03831660009081526020819052604090205481811015611c565760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106a8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c8d908490612092565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cd991815260200190565b60405180910390a3611597565b80156106bb5760005b6001600160a01b0383166000908152600d6020526040902054611d13908390612186565b811015611dc0576001600160a01b0383166000908152600d60205260409020611d3c8383612092565b81548110611d4c57611d4c61219d565b9060005260206000209060020201600d6000856001600160a01b03166001600160a01b031681526020019081526020016000208281548110611d9057611d9061219d565b60009182526020909120825460029092020190815560019182015491015580611db8816121b3565b915050611cef565b5060005b81811015610d3f576001600160a01b0383166000908152600d60205260409020805480611df357611df36121ce565b60008281526020812060026000199093019283020181815560010155905580611e1b816121b3565b915050611dc4565b600060208083528351808285015260005b81811015611e5057858101830151858201604001528201611e34565b81811115611e62576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611e8f57600080fd5b919050565b60008060408385031215611ea757600080fd5b611eb083611e78565b946020939093013593505050565b600080600060608486031215611ed357600080fd5b611edc84611e78565b9250611eea60208501611e78565b9150604084013590509250925092565b600080600060608486031215611f0f57600080fd5b611f1884611e78565b95602085013595506040909401359392505050565b600060208284031215611f3f57600080fd5b5035919050565b600060208284031215611f5857600080fd5b61139e82611e78565b602080825282518282018190526000919060409081850190868401855b82811015611fa357815180518552860151868501529284019290850190600101611f7e565b5091979650505050505050565b60008060408385031215611fc357600080fd5b611fcc83611e78565b915060208301358015158114611fe157600080fd5b809150509250929050565b60008060408385031215611fff57600080fd5b61200883611e78565b915061201660208401611e78565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261205257634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061206b57607f821691505b6020821081141561208c57634e487b7160e01b600052602260045260246000fd5b50919050565b600082198211156120a5576120a561201f565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008160001904831182151516156120f9576120f961201f565b500290565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156121985761219861201f565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156121c7576121c761201f565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d911cc0a7cb6dc58ad6b08e17ba1f8c9e657e372e4683d479d3ee1d8b73938e664736f6c63430008090033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063dd62ed3e1161007c578063dd62ed3e14610465578063e4440a861461049e578063f25f4b56146104af578063f2fde38b146104c2578063fca3b5aa146104d557600080fd5b8063a9059cbb14610426578063c024666814610439578063c531e24f1461044c578063d99e50da1461045d57600080fd5b8063931c7c68116100e9578063931c7c68146103d857806395d89b41146103f857806397ec2b3e14610400578063a457c2d71461041357600080fd5b8063715018a6146103995780637a2bbf65146103a15780637f92366f146103b45780638da5cb5b146103c757600080fd5b806339509351116101925780634fbee193116101615780634fbee1931461031e578063550dddeb1461034a578063667185241461035d57806370a082311461037057600080fd5b806339509351146102d057806340c10f19146102e3578063478d3515146102f85780634d474d421461030b57600080fd5b806318160ddd116101ce57806318160ddd1461027857806323b872dd14610280578063313ce56714610293578063333f950e146102a257600080fd5b806301f59d161461020057806306fdde031461021b5780630754617214610230578063095ea7b314610255575b600080fd5b6102086104e8565b6040519081526020015b60405180910390f35b6102236104fe565b6040516102129190611e23565b6006546001600160a01b03165b6040516001600160a01b039091168152602001610212565b610268610263366004611e94565b610590565b6040519015158152602001610212565b600254610208565b61026861028e366004611ebe565b6105a8565b60405160128152602001610212565b6102b56102b0366004611efa565b6105cc565b60408051938452602084019290925290820152606001610212565b6102686102de366004611e94565b6105eb565b6102f66102f1366004611e94565b61062a565b005b6102f6610306366004611f2d565b6106bf565b6102f6610319366004611f46565b61077e565b61026861032c366004611f46565b6001600160a01b03166000908152600e602052604090205460ff1690565b6102f6610358366004611f2d565b6108ba565b6102f661036b366004611f46565b6109a2565b61020861037e366004611f46565b6001600160a01b031660009081526020819052604090205490565b6102f6610a94565b6102f66103af366004611e94565b610aca565b6102f66103c2366004611ebe565b610be8565b6007546001600160a01b031661023d565b6103eb6103e6366004611f46565b610d44565b6040516102129190611f61565b610223610dcd565b6102f661040e366004611f46565b610ddc565b610268610421366004611e94565b610f4f565b610268610434366004611e94565b610fe1565b6102f6610447366004611fb0565b610fef565b6005546001600160a01b031661023d565b600b54610208565b610208610473366004611fec565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6009546001600160a01b031661023d565b60085461023d906001600160a01b031681565b6102f66104d0366004611f46565b61110d565b6102f66104e3366004611f46565b6111f9565b60006064600a546104f99190612035565b905090565b60606003805461050d90612057565b80601f016020809104026020016040519081016040528092919081815260200182805461053990612057565b80156105865780601f1061055b57610100808354040283529160200191610586565b820191906000526020600020905b81548152906001019060200180831161056957829003601f168201915b5050505050905090565b60003361059e8185856113e7565b5060019392505050565b6000336105b685828561150b565b6105c185858561159d565b506001949350505050565b60008060006105dc8686866117fc565b91989097509095509350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061059e9082908690610625908790612092565b6113e7565b6006546001600160a01b031633148061064d57506007546001600160a01b031633145b6106b15760405162461bcd60e51b815260206004820152602a60248201527f4d696e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152691037b91036b4b73a32b960b11b60648201526084015b60405180910390fd5b6106bb82826119f9565b5050565b6007546001600160a01b031633146106e95760405162461bcd60e51b81526004016106a8906120aa565b80600b54141561073b5760405162461bcd60e51b815260206004820152601c60248201527f757064617465466565446179733a2073616d652066656520646179730000000060448201526064016106a8565b600b54604080519182526020820183905233917f9d3548b1a7cd17558e49cb69b9e97c7c84785df7061656d030c640ec7409c0bb910160405180910390a2600b55565b6007546001600160a01b031633146107a85760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b0381166107fe5760405162461bcd60e51b815260206004820181905260248201527f7570646174654d61726b657457616c6c65743a207a65726f206164647265737360448201526064016106a8565b6009546001600160a01b038281169116141561085c5760405162461bcd60e51b815260206004820181905260248201527f7570646174654d61726b657457616c6c65743a2073616d65206164647265737360448201526064016106a8565b6009546040516001600160a01b0380841692169033907fceb7000f10e730aca9fc4668f73078ada36b79bce4ac88e68fbc8a98044640b490600090a4600980546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031633146108e45760405162461bcd60e51b81526004016106a8906120aa565b6108ef8160646120df565b600a5414156109405760405162461bcd60e51b815260206004820152601a60248201527f7570646174654d61784665653a2073616d65206d61782066656500000000000060448201526064016106a8565b336001600160a01b03167f07bf93ef3b4a7a2e55dc130c9163f7f888080dbca9b9bdfe25a27d4817a5b2f86064600a5461097a9190612035565b60408051918252602082018590520160405180910390a261099c8160646120df565b600a5550565b6007546001600160a01b031633146109cc5760405162461bcd60e51b81526004016106a8906120aa565b6008546001600160a01b0382811691161415610a365760405162461bcd60e51b8152602060048201526024808201527f75706461746546656557616c6c65743a2073616d652077616c6c6574206164646044820152637265737360e01b60648201526084016106a8565b6008546040516001600160a01b0380841692169033907f1fc185583f4ad646ee14bd1ce4bb3487b3b74de944f00cd94d4c22449b95abc190600090a4600880546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b03163314610abe5760405162461bcd60e51b81526004016106a8906120aa565b610ac86000611ad8565b565b6006546001600160a01b03163314610b2e5760405162461bcd60e51b815260206004820152602160248201527f4d696e61626c653a2063616c6c6572206973206e6f7420746865206d696e74656044820152603960f91b60648201526084016106a8565b6001600160a01b038216301415610b875760405162461bcd60e51b815260206004820152601f60248201527f7472616e73666572576974686f75744665653a2072657475726e206261636b0060448201526064016106a8565b6001600160a01b038216610bdd5760405162461bcd60e51b815260206004820181905260248201527f7472616e73666572576974686f75744665653a207a65726f206164647265737360448201526064016106a8565b6106bb30838361159d565b6006546001600160a01b0316331480610c0b57506005546001600160a01b031633145b610c6d5760405162461bcd60e51b815260206004820152602d60248201527f4d696e61626c653a2063616c6c6572206973206e6f742074686520626173655060448201526c37b7b61037b91036b4b73a32b960991b60648201526084016106a8565b6001600160a01b038216301415610cd25760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657246726f6d576974686f75744665653a2072657475726e206260448201526261636b60e81b60648201526084016106a8565b6001600160a01b038216610d345760405162461bcd60e51b8152602060048201526024808201527f7472616e7366657246726f6d576974686f75744665653a207a65726f206164646044820152637265737360e01b60648201526084016106a8565b610d3f83838361159d565b505050565b6001600160a01b0381166000908152600d60209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610dc257838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610d7c565b505050509050919050565b60606004805461050d90612057565b6007546001600160a01b03163314610e065760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b038116610e6b5760405162461bcd60e51b815260206004820152602660248201527f62617365506f6f6c3a206e657720706f6f6c20697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6005546001600160a01b0382811691161415610ec95760405162461bcd60e51b815260206004820152601760248201527f62617365506f6f6c3a2073616d652062617365506f6f6c00000000000000000060448201526064016106a8565b6005546040516001600160a01b038084169216907f78429bc5210e1bda0f89898b1f7a359f0d7c5372b15cf06f800670165d3995b890600090a3600580546001600160a01b0319166001600160a01b0383811691821783556000918252600e6020526040909120805460ff191660011790559054610f4c913091166000196113e7565b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610fd45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106a8565b6105c182868684036113e7565b60003361059e81858561159d565b6007546001600160a01b031633146110195760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b0382166000908152600e602052604090205460ff16151581151514156110ae5760405162461bcd60e51b815260206004820152603b60248201527f6578636c75646546726f6d466565733a204163636f756e7420697320616c726560448201527f616479207468652076616c7565206f6620276578636c7564656427000000000060648201526084016106a8565b6001600160a01b0382166000818152600e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6007546001600160a01b031633146111375760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b03811661119c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6007546001600160a01b03828116911614156111f05760405162461bcd60e51b815260206004820152601360248201527227bbb730b136329d1039b0b6b29037bbb732b960691b60448201526064016106a8565b610f4c81611ad8565b6007546001600160a01b031633146112235760405162461bcd60e51b81526004016106a8906120aa565b6001600160a01b0381166112885760405162461bcd60e51b815260206004820152602660248201527f4d696e7465723a206e6577206d696e74657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106a8565b6006546001600160a01b03828116911614156112dc5760405162461bcd60e51b815260206004820152601360248201527226b4b73a32b91d1039b0b6b29036b4b73a32b960691b60448201526064016106a8565b600680546001600160a01b038381166001600160a01b0319831681179093556000838152600e6020526040808220805460ff191660011790555191909216929183917f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69190a36006546106bb9030906001600160a01b03166000196113e7565b600061139e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611b2a565b9392505050565b600061139e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b61565b6001600160a01b0383166114495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106a8565b6001600160a01b0382166114aa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106a8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611597578181101561158a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106a8565b61159784848484036113e7565b50505050565b6001600160a01b0383166115c35760405162461bcd60e51b81526004016106a8906120fe565b6001600160a01b0382166115e95760405162461bcd60e51b81526004016106a890612143565b6001600160a01b0383166000908152600e602052604090205460ff161561168757611615838383611b92565b6001600160a01b0382166000908152600e602052604090205460ff16610d3f576001600160a01b03919091166000908152600d60209081526040808320815180830190925293815242818301908152845460018082018755958552929093209051600290920201908155905191015550565b60008060006116978685426117fc565b604080518481526020810184905290810182905292955090935091507f02969729a3171665c36baee1eafffe4b2b192d0431e9ad18c52c800d7a16783d9060600160405180910390a16001600160a01b0385166000908152600e602052604090205460ff166117a15782156117375761171a86866117158688612186565b611b92565b6008546117329087906001600160a01b031685611b92565b611742565b611742868686611b92565b6001600160a01b0385166000908152600d602052604090819020815180830190925290806117708688612186565b81524260209182015282546001818101855560009485529382902083516002909202019081559101519101556117ac565b6117ac868686611b92565b6001600160a01b0386166000908152600d602052604090208054829190849081106117d9576117d961219d565b60009182526020909120600290910201556117f48683611ce6565b505050505050565b6001600160a01b0383166000908152600d60209081526040808320805482518185028101850190935280835284938493889385939192909190849084015b828210156118805783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061183a565b50505050905060005b81518110156119ed5782156119db5760008282815181106118ac576118ac61219d565b60200260200101516000015190506000620151808484815181106118d2576118d261219d565b6020026020010151602001518a6118e99190612186565b6118f39190612035565b905081851115611969576119078286612186565b9450600b54811015611964576000600b5461271061192591906120df565b600a5483600b546119369190612186565b61194090866120df565b61194a91906120df565b6119549190612035565b9050611960818a612092565b9850505b6119d8565b600b548110156119c4576000600b5461271061198591906120df565b600a5483600b546119969190612186565b6119a090896120df565b6119aa91906120df565b6119b49190612035565b90506119c0818a612092565b9850505b6119ce8583612186565b9550600094508296505b50505b806119e5816121b3565b915050611889565b50505093509350939050565b6001600160a01b038216611a4f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106a8565b8060026000828254611a619190612092565b90915550506001600160a01b03821660009081526020819052604081208054839290611a8e908490612092565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008183611b4b5760405162461bcd60e51b81526004016106a89190611e23565b506000611b588486612035565b95945050505050565b60008184841115611b855760405162461bcd60e51b81526004016106a89190611e23565b506000611b588486612186565b6001600160a01b038316611bb85760405162461bcd60e51b81526004016106a8906120fe565b6001600160a01b038216611bde5760405162461bcd60e51b81526004016106a890612143565b6001600160a01b03831660009081526020819052604090205481811015611c565760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106a8565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611c8d908490612092565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cd991815260200190565b60405180910390a3611597565b80156106bb5760005b6001600160a01b0383166000908152600d6020526040902054611d13908390612186565b811015611dc0576001600160a01b0383166000908152600d60205260409020611d3c8383612092565b81548110611d4c57611d4c61219d565b9060005260206000209060020201600d6000856001600160a01b03166001600160a01b031681526020019081526020016000208281548110611d9057611d9061219d565b60009182526020909120825460029092020190815560019182015491015580611db8816121b3565b915050611cef565b5060005b81811015610d3f576001600160a01b0383166000908152600d60205260409020805480611df357611df36121ce565b60008281526020812060026000199093019283020181815560010155905580611e1b816121b3565b915050611dc4565b600060208083528351808285015260005b81811015611e5057858101830151858201604001528201611e34565b81811115611e62576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114611e8f57600080fd5b919050565b60008060408385031215611ea757600080fd5b611eb083611e78565b946020939093013593505050565b600080600060608486031215611ed357600080fd5b611edc84611e78565b9250611eea60208501611e78565b9150604084013590509250925092565b600080600060608486031215611f0f57600080fd5b611f1884611e78565b95602085013595506040909401359392505050565b600060208284031215611f3f57600080fd5b5035919050565b600060208284031215611f5857600080fd5b61139e82611e78565b602080825282518282018190526000919060409081850190868401855b82811015611fa357815180518552860151868501529284019290850190600101611f7e565b5091979650505050505050565b60008060408385031215611fc357600080fd5b611fcc83611e78565b915060208301358015158114611fe157600080fd5b809150509250929050565b60008060408385031215611fff57600080fd5b61200883611e78565b915061201660208401611e78565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261205257634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061206b57607f821691505b6020821081141561208c57634e487b7160e01b600052602260045260246000fd5b50919050565b600082198211156120a5576120a561201f565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008160001904831182151516156120f9576120f961201f565b500290565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156121985761219861201f565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156121c7576121c761201f565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d911cc0a7cb6dc58ad6b08e17ba1f8c9e657e372e4683d479d3ee1d8b73938e664736f6c63430008090033
Deployed Bytecode Sourcemap
16583:12128:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27333:87;;;:::i;:::-;;;160:25:1;;;148:2;133:18;27333:87:0;;;;;;;;5396:100;;;:::i;:::-;;;;;;;:::i;18801:81::-;18867:7;;-1:-1:-1;;;;;18867:7:0;18801:81;;;-1:-1:-1;;;;;962:32:1;;;944:51;;932:2;917:18;18801:81:0;798:203:1;7747:201:0;;;;;;:::i;:::-;;:::i;:::-;;;1608:14:1;;1601:22;1583:41;;1571:2;1556:18;7747:201:0;1443:187:1;6516:108:0;6604:12;;6516:108;;8528:295;;;;;;:::i;:::-;;:::i;19931:116::-;;;6441:2;2110:36:1;;2098:2;2083:18;19931:116:0;1968:184:1;24988:347:0;;;;;;:::i;:::-;;:::i;:::-;;;;2686:25:1;;;2742:2;2727:18;;2720:34;;;;2770:18;;;2763:34;2674:2;2659:18;24988:347:0;2484:319:1;9232:240:0;;;;;;:::i;:::-;;:::i;22751:107::-;;;;;;:::i;:::-;;:::i;:::-;;27760:241;;;;;;:::i;:::-;;:::i;22399:344::-;;;;;;:::i;:::-;;:::i;28266:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;28357:28:0;28333:4;28357:28;;;:19;:28;;;;;;;;;28266:127;27525:227;;;;;;:::i;:::-;;:::i;28009:249::-;;;;;;:::i;:::-;;:::i;20055:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6788:18:0;20138:7;6788:18;;;;;;;;;;;;20055:142;20649:95;;;:::i;22866:340::-;;;;;;:::i;:::-;;:::i;23218:458::-;;;;;;:::i;:::-;;:::i;18714:79::-;18779:6;;-1:-1:-1;;;;;18779:6:0;18714:79;;27212:113;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5615:104::-;;;:::i;21504:418::-;;;;;;:::i;:::-;;:::i;9975:438::-;;;;;;:::i;:::-;;:::i;7020:193::-;;;;;;:::i;:::-;;:::i;28401:307::-;;;;;;:::i;:::-;;:::i;18890:85::-;18958:9;;-1:-1:-1;;;;;18958:9:0;18890:85;;27428:89;27498:11;;27428:89;;7276:151;;;;;;:::i;:::-;-1:-1:-1;;;;;7392:18:0;;;7365:7;7392:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7276:151;20205:93;20277:13;;-1:-1:-1;;;;;20277:13:0;20205:93;;16833:69;;;;;-1:-1:-1;;;;;16833:69:0;;;20899:254;;;;;;:::i;:::-;;:::i;21930:461::-;;;;;;:::i;:::-;;:::i;27333:87::-;27372:7;27409:3;27399:7;;:13;;;;:::i;:::-;27392:20;;27333:87;:::o;5396:100::-;5450:13;5483:5;5476:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396:100;:::o;7747:201::-;7830:4;175:10;7886:32;175:10;7902:7;7911:6;7886:8;:32::i;:::-;-1:-1:-1;7936:4:0;;7747:201;-1:-1:-1;;;7747:201:0:o;8528:295::-;8659:4;175:10;8717:38;8733:4;175:10;8748:6;8717:15;:38::i;:::-;8766:27;8776:4;8782:2;8786:6;8766:9;:27::i;:::-;-1:-1:-1;8811:4:0;;8528:295;-1:-1:-1;;;;8528:295:0:o;24988:347::-;25123:16;25154:22;25192:20;25283:36;25292:4;25298:6;25306:12;25283:8;:36::i;:::-;25240:79;;;;-1:-1:-1;25240:79:0;;-1:-1:-1;24988:347:0;-1:-1:-1;;;;24988:347:0:o;9232:240::-;175:10;9320:4;9401:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;9401:27:0;;;;;;;;;;9320:4;;175:10;9376:66;;175:10;;9401:27;;:40;;9431:10;;9401:40;:::i;:::-;9376:8;:66::i;22751:107::-;19419:7;;-1:-1:-1;;;;;19419:7:0;19430:10;19419:21;;:45;;-1:-1:-1;19444:6:0;;-1:-1:-1;;;;;19444:6:0;19454:10;19444:20;19419:45;19411:100;;;;-1:-1:-1;;;19411:100:0;;5672:2:1;19411:100:0;;;5654:21:1;5711:2;5691:18;;;5684:30;5750:34;5730:18;;;5723:62;-1:-1:-1;;;5801:18:1;;;5794:40;5851:19;;19411:100:0;;;;;;;;;22832:18:::1;22838:3;22843:6;22832:5;:18::i;:::-;22751:107:::0;;:::o;27760:241::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;27854:7:::1;27839:11;;:22;;27831:63;;;::::0;-1:-1:-1;;;27831:63:0;;6444:2:1;27831:63:0::1;::::0;::::1;6426:21:1::0;6483:2;6463:18;;;6456:30;6522;6502:18;;;6495:58;6570:18;;27831:63:0::1;6242:352:1::0;27831:63:0::1;27940:11;::::0;27910:51:::1;::::0;;6773:25:1;;;6829:2;6814:18;;6807:34;;;27928:10:0::1;::::0;27910:51:::1;::::0;6746:18:1;27910:51:0::1;;;;;;;27972:11;:21:::0;27760:241::o;22399:344::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22484:23:0;::::1;22476:68;;;::::0;-1:-1:-1;;;22476:68:0;;7054:2:1;22476:68:0::1;::::0;::::1;7036:21:1::0;;;7073:18;;;7066:30;7132:34;7112:18;;;7105:62;7184:18;;22476:68:0::1;6852:356:1::0;22476:68:0::1;22563:13;::::0;-1:-1:-1;;;;;22563:26:0;;::::1;:13:::0;::::1;:26;;22555:71;;;::::0;-1:-1:-1;;;22555:71:0;;7415:2:1;22555:71:0::1;::::0;::::1;7397:21:1::0;;;7434:18;;;7427:30;7493:34;7473:18;;;7466:62;7545:18;;22555:71:0::1;7213:356:1::0;22555:71:0::1;22674:13;::::0;22642:57:::1;::::0;-1:-1:-1;;;;;22642:57:0;;::::1;::::0;22674:13:::1;::::0;22662:10:::1;::::0;22642:57:::1;::::0;22674:13:::1;::::0;22642:57:::1;22710:13;:25:::0;;-1:-1:-1;;;;;;22710:25:0::1;-1:-1:-1::0;;;;;22710:25:0;;;::::1;::::0;;;::::1;::::0;;22399:344::o;27525:227::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;27610:10:::1;27614:6:::0;27610:3:::1;:10;:::i;:::-;27599:7;;:21;;27591:60;;;::::0;-1:-1:-1;;;27591:60:0;;7949:2:1;27591:60:0::1;::::0;::::1;7931:21:1::0;7988:2;7968:18;;;7961:30;8027:28;8007:18;;;8000:56;8073:18;;27591:60:0::1;7747:350:1::0;27591:60:0::1;27681:10;-1:-1:-1::0;;;;;27667:46:0::1;;27701:3;27693:7;;:11;;;;:::i;:::-;27667:46;::::0;;6773:25:1;;;6829:2;6814:18;;6807:34;;;6746:18;27667:46:0::1;;;;;;;27734:10;27738:6:::0;27734:3:::1;:10;:::i;:::-;27724:7;:20:::0;-1:-1:-1;27525:227:0:o;28009:249::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;28089:9:::1;::::0;-1:-1:-1;;;;;28089:22:0;;::::1;:9:::0;::::1;:22;;28081:71;;;::::0;-1:-1:-1;;;28081:71:0;;8304:2:1;28081:71:0::1;::::0;::::1;8286:21:1::0;8343:2;8323:18;;;8316:30;8382:34;8362:18;;;8355:62;-1:-1:-1;;;8433:18:1;;;8426:34;8477:19;;28081:71:0::1;8102:400:1::0;28081:71:0::1;28197:9;::::0;28168:50:::1;::::0;-1:-1:-1;;;;;28168:50:0;;::::1;::::0;28197:9:::1;::::0;28185:10:::1;::::0;28168:50:::1;::::0;28197:9:::1;::::0;28168:50:::1;28229:9;:21:::0;;-1:-1:-1;;;;;;28229:21:0::1;-1:-1:-1::0;;;;;28229:21:0;;;::::1;::::0;;;::::1;::::0;;28009:249::o;20649:95::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;20706:30:::1;20733:1;20706:18;:30::i;:::-;20649:95::o:0;22866:340::-;19149:7;;-1:-1:-1;;;;;19149:7:0;19160:10;19149:21;19141:67;;;;-1:-1:-1;;;19141:67:0;;8709:2:1;19141:67:0;;;8691:21:1;8748:2;8728:18;;;8721:30;8787:34;8767:18;;;8760:62;-1:-1:-1;;;8838:18:1;;;8831:31;8879:19;;19141:67:0;8507:397:1;19141:67:0;-1:-1:-1;;;;;22968:19:0;::::1;22982:4;22968:19;;22960:63;;;::::0;-1:-1:-1;;;22960:63:0;;9111:2:1;22960:63:0::1;::::0;::::1;9093:21:1::0;9150:2;9130:18;;;9123:30;9189:33;9169:18;;;9162:61;9240:18;;22960:63:0::1;8909:355:1::0;22960:63:0::1;-1:-1:-1::0;;;;;23042:16:0;::::1;23034:61;;;::::0;-1:-1:-1;;;23034:61:0;;9471:2:1;23034:61:0::1;::::0;::::1;9453:21:1::0;;;9490:18;;;9483:30;9549:34;9529:18;;;9522:62;9601:18;;23034:61:0::1;9269:356:1::0;23034:61:0::1;23162:36;23180:4;23187:2;23191:6;23162:9;:36::i;23218:458::-:0;19590:7;;-1:-1:-1;;;;;19590:7:0;19601:10;19590:21;;:48;;-1:-1:-1;19615:9:0;;-1:-1:-1;;;;;19615:9:0;19628:10;19615:23;19590:48;19582:106;;;;-1:-1:-1;;;19582:106:0;;9832:2:1;19582:106:0;;;9814:21:1;9871:2;9851:18;;;9844:30;9910:34;9890:18;;;9883:62;-1:-1:-1;;;9961:18:1;;;9954:43;10014:19;;19582:106:0;9630:409:1;19582:106:0;-1:-1:-1;;;;;23348:19:0;::::1;23362:4;23348:19;;23340:67;;;::::0;-1:-1:-1;;;23340:67:0;;10246:2:1;23340:67:0::1;::::0;::::1;10228:21:1::0;10285:2;10265:18;;;10258:30;10324:34;10304:18;;;10297:62;-1:-1:-1;;;10375:18:1;;;10368:33;10418:19;;23340:67:0::1;10044:399:1::0;23340:67:0::1;-1:-1:-1::0;;;;;23426:16:0;::::1;23418:65;;;::::0;-1:-1:-1;;;23418:65:0;;10650:2:1;23418:65:0::1;::::0;::::1;10632:21:1::0;10689:2;10669:18;;;10662:30;10728:34;10708:18;;;10701:62;-1:-1:-1;;;10779:18:1;;;10772:34;10823:19;;23418:65:0::1;10448:400:1::0;23418:65:0::1;23641:27;23651:4;23657:2;23661:6;23641:9;:27::i;:::-;23218:458:::0;;;:::o;27212:113::-;-1:-1:-1;;;;;27303:14:0;;;;;;:8;:14;;;;;;;;27296:21;;;;;;;;;;;;;;;;;27264:19;;27296:21;;27303:14;;27296:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27212:113;;;:::o;5615:104::-;5671:13;5704:7;5697:14;;;;;:::i;21504:418::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21584:21:0;::::1;21576:72;;;::::0;-1:-1:-1;;;21576:72:0;;11055:2:1;21576:72:0::1;::::0;::::1;11037:21:1::0;11094:2;11074:18;;;11067:30;11133:34;11113:18;;;11106:62;-1:-1:-1;;;11184:18:1;;;11177:36;11230:19;;21576:72:0::1;10853:402:1::0;21576:72:0::1;21678:9;::::0;-1:-1:-1;;;;;21667:20:0;;::::1;21678:9:::0;::::1;21667:20;;21659:56;;;::::0;-1:-1:-1;;;21659:56:0;;11462:2:1;21659:56:0::1;::::0;::::1;11444:21:1::0;11501:2;11481:18;;;11474:30;11540:25;11520:18;;;11513:53;11583:18;;21659:56:0::1;11260:347:1::0;21659:56:0::1;21747:9;::::0;21731:35:::1;::::0;-1:-1:-1;;;;;21731:35:0;;::::1;::::0;21747:9:::1;::::0;21731:35:::1;::::0;21747:9:::1;::::0;21731:35:::1;21777:9;:19:::0;;-1:-1:-1;;;;;;21777:19:0::1;-1:-1:-1::0;;;;;21777:19:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;21807:30:0;;;:19:::1;:30;::::0;;;;;:37;;-1:-1:-1;;21807:37:0::1;-1:-1:-1::0;21807:37:0::1;::::0;;21885:9;;21855:59:::1;::::0;21878:4:::1;::::0;21885:9:::1;-1:-1:-1::0;;21855:14:0::1;:59::i;:::-;21504:418:::0;:::o;9975:438::-;175:10;10068:4;10151:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;10151:27:0;;;;;;;;;;10068:4;;175:10;10197:35;;;;10189:85;;;;-1:-1:-1;;;10189:85:0;;11814:2:1;10189:85:0;;;11796:21:1;11853:2;11833:18;;;11826:30;11892:34;11872:18;;;11865:62;-1:-1:-1;;;11943:18:1;;;11936:35;11988:19;;10189:85:0;11612:401:1;10189:85:0;10310:60;10319:5;10326:7;10354:15;10335:16;:34;10310:8;:60::i;7020:193::-;7099:4;175:10;7155:28;175:10;7172:2;7176:6;7155:9;:28::i;28401:307::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28494:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;28486:112;;;::::0;-1:-1:-1;;;28486:112:0;;12220:2:1;28486:112:0::1;::::0;::::1;12202:21:1::0;12259:2;12239:18;;;12232:30;12298:34;12278:18;;;12271:62;12369:29;12349:18;;;12342:57;12416:19;;28486:112:0::1;12018:423:1::0;28486:112:0::1;-1:-1:-1::0;;;;;28609:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;28609:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28666:34;;1583:41:1;;;28666:34:0::1;::::0;1556:18:1;28666:34:0::1;;;;;;;28401:307:::0;;:::o;20899:254::-;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20980:22:0;::::1;20972:73;;;::::0;-1:-1:-1;;;20972:73:0;;12648:2:1;20972:73:0::1;::::0;::::1;12630:21:1::0;12687:2;12667:18;;;12660:30;12726:34;12706:18;;;12699:62;-1:-1:-1;;;12777:18:1;;;12770:36;12823:19;;20972:73:0::1;12446:402:1::0;20972:73:0::1;21076:6;::::0;-1:-1:-1;;;;;21064:18:0;;::::1;21076:6:::0;::::1;21064:18;;21056:50;;;::::0;-1:-1:-1;;;21056:50:0;;13055:2:1;21056:50:0::1;::::0;::::1;13037:21:1::0;13094:2;13074:18;;;13067:30;-1:-1:-1;;;13113:18:1;;;13106:49;13172:18;;21056:50:0::1;12853:343:1::0;21056:50:0::1;21117:28;21136:8;21117:18;:28::i;21930:461::-:0;19023:6;;-1:-1:-1;;;;;19023:6:0;19033:10;19023:20;19015:65;;;;-1:-1:-1;;;19015:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22010:23:0;::::1;22002:74;;;::::0;-1:-1:-1;;;22002:74:0;;13403:2:1;22002:74:0::1;::::0;::::1;13385:21:1::0;13442:2;13422:18;;;13415:30;13481:34;13461:18;;;13454:62;-1:-1:-1;;;13532:18:1;;;13525:36;13578:19;;22002:74:0::1;13201:402:1::0;22002:74:0::1;22108:7;::::0;-1:-1:-1;;;;;22095:20:0;;::::1;22108:7:::0;::::1;22095:20;;22087:52;;;::::0;-1:-1:-1;;;22087:52:0;;13810:2:1;22087:52:0::1;::::0;::::1;13792:21:1::0;13849:2;13829:18;;;13822:30;-1:-1:-1;;;13868:18:1;;;13861:49;13927:18;;22087:52:0::1;13608:343:1::0;22087:52:0::1;22170:7;::::0;;-1:-1:-1;;;;;22199:19:0;;::::1;-1:-1:-1::0;;;;;;22199:19:0;::::1;::::0;::::1;::::0;;;22150:17:::1;22229:28:::0;;;:19:::1;:28;::::0;;;;;:35;;-1:-1:-1;;22229:35:0::1;22170:7:::0;22229:35:::1;::::0;;22280;22170:7;;;::::1;::::0;22199:19;22170:7;;22280:35:::1;::::0;22150:17;22280:35:::1;22356:7;::::0;22326:57:::1;::::0;22349:4:::1;::::0;-1:-1:-1;;;;;22356:7:0::1;-1:-1:-1::0;;22326:14:0::1;:57::i;1126:132::-:0;1184:7;1211:39;1215:1;1218;1211:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1204:46;1126:132;-1:-1:-1;;;1126:132:0:o;524:136::-;582:7;609:43;613:1;616;609:43;;;;;;;;;;;;;;;;;:3;:43::i;13611:380::-;-1:-1:-1;;;;;13747:19:0;;13739:68;;;;-1:-1:-1;;;13739:68:0;;14158:2:1;13739:68:0;;;14140:21:1;14197:2;14177:18;;;14170:30;14236:34;14216:18;;;14209:62;-1:-1:-1;;;14287:18:1;;;14280:34;14331:19;;13739:68:0;13956:400:1;13739:68:0;-1:-1:-1;;;;;13826:21:0;;13818:68;;;;-1:-1:-1;;;13818:68:0;;14563:2:1;13818:68:0;;;14545:21:1;14602:2;14582:18;;;14575:30;14641:34;14621:18;;;14614:62;-1:-1:-1;;;14692:18:1;;;14685:32;14734:19;;13818:68:0;14361:398:1;13818:68:0;-1:-1:-1;;;;;13899:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13951:32;;160:25:1;;;13951:32:0;;133:18:1;13951:32:0;;;;;;;13611:380;;;:::o;14278:453::-;-1:-1:-1;;;;;7392:18:0;;;14413:24;7392:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;14480:37:0;;14476:248;;14562:6;14542:16;:26;;14534:68;;;;-1:-1:-1;;;14534:68:0;;14966:2:1;14534:68:0;;;14948:21:1;15005:2;14985:18;;;14978:30;15044:31;15024:18;;;15017:59;15093:18;;14534:68:0;14764:353:1;14534:68:0;14646:51;14655:5;14662:7;14690:6;14671:16;:25;14646:8;:51::i;:::-;14402:329;14278:453;;;:::o;23684:1296::-;-1:-1:-1;;;;;23790:18:0;;23782:68;;;;-1:-1:-1;;;23782:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23869:16:0;;23861:64;;;;-1:-1:-1;;;23861:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23954:25:0;;;;;;:19;:25;;;;;;;;23950:1023;;;23996:33;24012:4;24018:2;24022:6;23996:15;:33::i;:::-;-1:-1:-1;;;;;24049:23:0;;;;;;:19;:23;;;;;;;;24044:119;;-1:-1:-1;;;;;24093:12:0;;;;;;;;:8;:12;;;;;;;;24111:35;;;;;;;;;;;24130:15;24111:35;;;;;;24093:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23218:458:0:o;23950:1023::-;24208:11;24221:19;24242:20;24266:39;24275:4;24281:6;24289:15;24266:8;:39::i;:::-;24325:42;;;2686:25:1;;;2742:2;2727:18;;2720:34;;;2770:18;;;2763:34;;;24207:98:0;;-1:-1:-1;24207:98:0;;-1:-1:-1;24207:98:0;-1:-1:-1;24325:42:0;;2674:2:1;2659:18;24325:42:0;;;;;;;-1:-1:-1;;;;;24389:23:0;;;;;;:19;:23;;;;;;;;24384:408;;24437:7;;24433:192;;24469:37;24485:4;24491:2;24495:10;24502:3;24495:6;:10;:::i;:::-;24469:15;:37::i;:::-;24551:9;;24529:37;;24545:4;;-1:-1:-1;;;;;24551:9:0;24562:3;24529:15;:37::i;:::-;24433:192;;;24592:33;24608:4;24614:2;24618:6;24592:15;:33::i;:::-;-1:-1:-1;;;;;24644:12:0;;;;;;:8;:12;;;;;;;24662:39;;;;;;;;24644:12;24662:39;24673:10;24680:3;24673:6;:10;:::i;:::-;24662:39;;24685:15;24662:39;;;;;24644:58;;;;;;;;-1:-1:-1;24644:58:0;;;;;;;;;;;;;;;;;;;;;;;24384:408;;;24743:33;24759:4;24765:2;24769:6;24743:15;:33::i;:::-;-1:-1:-1;;;;;24856:14:0;;;;;;:8;:14;;;;;:30;;24896:12;;24856:14;24871;;24856:30;;;;;;:::i;:::-;;;;;;;;;;;;;;:52;24923:38;24940:4;24946:14;24923:16;:38::i;:::-;24192:781;;;23684:1296;;;:::o;25347:1444::-;-1:-1:-1;;;;;25686:14:0;;25483:16;25686:14;;;:8;:14;;;;;;;;25657:43;;;;;;;;;;;;;;;;;25483:16;;;;25639:6;;25483:16;;25657:43;;25686:14;;25657:43;25483:16;;25657:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25726:9;25721:1055;25740:6;:13;25738:1;:15;25721:1055;;;25778:15;;25774:970;;25814:11;25828:6;25835:1;25828:9;;;;;;;;:::i;:::-;;;;;;;:16;;;25814:30;;25863:17;25923:12;25899:6;25906:1;25899:9;;;;;;;;:::i;:::-;;;;;;;:19;;;25884:12;:34;;;;:::i;:::-;25883:53;;;;:::i;:::-;25863:73;;25973:3;25959:11;:17;25955:758;;;26001:18;26016:3;26001:18;;:::i;:::-;;;26098:11;;26086:9;:23;26082:200;;;26138:11;26204;;26196:5;:19;;;;:::i;:::-;26186:7;;26173:9;26159:11;;:23;;;;:::i;:::-;26152:31;;:3;:31;:::i;:::-;:41;;;;:::i;:::-;:64;;;;:::i;:::-;26138:78;-1:-1:-1;26243:15:0;26138:78;26243:15;;:::i;:::-;;;26111:171;26082:200;25955:758;;;26346:11;;26334:9;:23;26330:208;;;26386:11;26460;;26452:5;:19;;;;:::i;:::-;26442:7;;26429:9;26415:11;;:23;;;;:::i;:::-;26400:39;;:11;:39;:::i;:::-;:49;;;;:::i;:::-;:72;;;;:::i;:::-;26386:86;-1:-1:-1;26499:15:0;26386:86;26499:15;;:::i;:::-;;;26359:179;26330:208;26597:17;26603:11;26597:3;:17;:::i;:::-;26582:32;;26651:1;26637:15;;26692:1;26675:18;;25955:758;25795:949;;25774:970;25754:3;;;;:::i;:::-;;;;25721:1055;;;;25590:1201;;25347:1444;;;;;;;:::o;11850:399::-;-1:-1:-1;;;;;11934:21:0;;11926:65;;;;-1:-1:-1;;;11926:65:0;;16536:2:1;11926:65:0;;;16518:21:1;16575:2;16555:18;;;16548:30;16614:33;16594:18;;;16587:61;16665:18;;11926:65:0;16334:355:1;11926:65:0;12082:6;12066:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;12099:18:0;;:9;:18;;;;;;;;;;:28;;12121:6;;12099:9;:28;;12121:6;;12099:28;:::i;:::-;;;;-1:-1:-1;;12143:37:0;;160:25:1;;;-1:-1:-1;;;;;12143:37:0;;;12160:1;;12143:37;;148:2:1;133:18;12143:37:0;;;;;;;22751:107;;:::o;21313:183::-;21398:6;;;-1:-1:-1;;;;;21415:17:0;;;-1:-1:-1;;;;;;21415:17:0;;;;;;;21448:40;;21398:6;;;21415:17;21398:6;;21448:40;;21379:16;;21448:40;21368:128;21313:183;:::o;1266:278::-;1352:7;1387:12;1380:5;1372:28;;;;-1:-1:-1;;;1372:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1411:9:0;1423:5;1427:1;1423;:5;:::i;:::-;1411:17;1266:278;-1:-1:-1;;;;;1266:278:0:o;668:192::-;754:7;790:12;782:6;;;;774:29;;;;-1:-1:-1;;;774:29:0;;;;;;;;:::i;:::-;-1:-1:-1;814:9:0;826:5;830:1;826;:5;:::i;10892:671::-;-1:-1:-1;;;;;11023:18:0;;11015:68;;;;-1:-1:-1;;;11015:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11102:16:0;;11094:64;;;;-1:-1:-1;;;11094:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11244:15:0;;11222:19;11244:15;;;;;;;;;;;11278:21;;;;11270:72;;;;-1:-1:-1;;;11270:72:0;;16896:2:1;11270:72:0;;;16878:21:1;16935:2;16915:18;;;16908:30;16974:34;16954:18;;;16947:62;-1:-1:-1;;;17025:18:1;;;17018:36;17071:19;;11270:72:0;16694:402:1;11270:72:0;-1:-1:-1;;;;;11378:15:0;;;:9;:15;;;;;;;;;;;11396:20;;;11378:38;;11438:13;;;;;;;;:23;;11410:6;;11378:9;11438:23;;11410:6;;11438:23;:::i;:::-;;;;;;;;11494:2;-1:-1:-1;;;;;11479:26:0;11488:4;-1:-1:-1;;;;;11479:26:0;;11498:6;11479:26;;;;160:25:1;;148:2;133:18;;14:177;11479:26:0;;;;;;;;11518:37;23218:458;26801:403;26885:18;;26881:316;;26925:6;26920:159;-1:-1:-1;;;;;26936:14:0;;;;;;:8;:14;;;;;:21;:38;;26959:14;;26936:38;:::i;:::-;26934:1;:40;26920:159;;;-1:-1:-1;;;;;27019:14:0;;;;;;:8;:14;;;;;27034:16;27036:14;27034:1;:16;:::i;:::-;27019:32;;;;;;;;:::i;:::-;;;;;;;;;;;26999:8;:14;27008:4;-1:-1:-1;;;;;26999:14:0;-1:-1:-1;;;;;26999:14:0;;;;;;;;;;;;27014:1;26999:17;;;;;;;;:::i;:::-;;;;;;;;;:52;;:17;;;;;:52;;;;;;;;;;;26975:3;;;;:::i;:::-;;;;26920:159;;;;27100:6;27095:91;27111:14;27109:1;:16;27095:91;;;-1:-1:-1;;;;;27150:14:0;;;;;;:8;:14;;;;;:20;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;27150:20:0;;;;;;;;;;;;;;;27126:3;;;;:::i;:::-;;;;27095:91;;196:597:1;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;1006:173::-;1074:20;;-1:-1:-1;;;;;1123:31:1;;1113:42;;1103:70;;1169:1;1166;1159:12;1103:70;1006:173;;;:::o;1184:254::-;1252:6;1260;1313:2;1301:9;1292:7;1288:23;1284:32;1281:52;;;1329:1;1326;1319:12;1281:52;1352:29;1371:9;1352:29;:::i;:::-;1342:39;1428:2;1413:18;;;;1400:32;;-1:-1:-1;;;1184:254:1:o;1635:328::-;1712:6;1720;1728;1781:2;1769:9;1760:7;1756:23;1752:32;1749:52;;;1797:1;1794;1787:12;1749:52;1820:29;1839:9;1820:29;:::i;:::-;1810:39;;1868:38;1902:2;1891:9;1887:18;1868:38;:::i;:::-;1858:48;;1953:2;1942:9;1938:18;1925:32;1915:42;;1635:328;;;;;:::o;2157:322::-;2234:6;2242;2250;2303:2;2291:9;2282:7;2278:23;2274:32;2271:52;;;2319:1;2316;2309:12;2271:52;2342:29;2361:9;2342:29;:::i;:::-;2332:39;2418:2;2403:18;;2390:32;;-1:-1:-1;2469:2:1;2454:18;;;2441:32;;2157:322;-1:-1:-1;;;2157:322:1:o;2808:180::-;2867:6;2920:2;2908:9;2899:7;2895:23;2891:32;2888:52;;;2936:1;2933;2926:12;2888:52;-1:-1:-1;2959:23:1;;2808:180;-1:-1:-1;2808:180:1:o;2993:186::-;3052:6;3105:2;3093:9;3084:7;3080:23;3076:32;3073:52;;;3121:1;3118;3111:12;3073:52;3144:29;3163:9;3144:29;:::i;3184:792::-;3409:2;3461:21;;;3531:13;;3434:18;;;3553:22;;;3380:4;;3409:2;3594;;3612:18;;;;3653:15;;;3380:4;3696:254;3710:6;3707:1;3704:13;3696:254;;;3769:13;;3807:9;;3795:22;;3857:11;;3851:18;3837:12;;;3830:40;3890:12;;;;3925:15;;;;3732:1;3725:9;3696:254;;;-1:-1:-1;3967:3:1;;3184:792;-1:-1:-1;;;;;;;3184:792:1:o;3981:347::-;4046:6;4054;4107:2;4095:9;4086:7;4082:23;4078:32;4075:52;;;4123:1;4120;4113:12;4075:52;4146:29;4165:9;4146:29;:::i;:::-;4136:39;;4225:2;4214:9;4210:18;4197:32;4272:5;4265:13;4258:21;4251:5;4248:32;4238:60;;4294:1;4291;4284:12;4238:60;4317:5;4307:15;;;3981:347;;;;;:::o;4333:260::-;4401:6;4409;4462:2;4450:9;4441:7;4437:23;4433:32;4430:52;;;4478:1;4475;4468:12;4430:52;4501:29;4520:9;4501:29;:::i;:::-;4491:39;;4549:38;4583:2;4572:9;4568:18;4549:38;:::i;:::-;4539:48;;4333:260;;;;;:::o;4598:127::-;4659:10;4654:3;4650:20;4647:1;4640:31;4690:4;4687:1;4680:15;4714:4;4711:1;4704:15;4730:217;4770:1;4796;4786:132;;4840:10;4835:3;4831:20;4828:1;4821:31;4875:4;4872:1;4865:15;4903:4;4900:1;4893:15;4786:132;-1:-1:-1;4932:9:1;;4730:217::o;4952:380::-;5031:1;5027:12;;;;5074;;;5095:61;;5149:4;5141:6;5137:17;5127:27;;5095:61;5202:2;5194:6;5191:14;5171:18;5168:38;5165:161;;;5248:10;5243:3;5239:20;5236:1;5229:31;5283:4;5280:1;5273:15;5311:4;5308:1;5301:15;5165:161;;4952:380;;;:::o;5337:128::-;5377:3;5408:1;5404:6;5401:1;5398:13;5395:39;;;5414:18;;:::i;:::-;-1:-1:-1;5450:9:1;;5337:128::o;5881:356::-;6083:2;6065:21;;;6102:18;;;6095:30;6161:34;6156:2;6141:18;;6134:62;6228:2;6213:18;;5881:356::o;7574:168::-;7614:7;7680:1;7676;7672:6;7668:14;7665:1;7662:21;7657:1;7650:9;7643:17;7639:45;7636:71;;;7687:18;;:::i;:::-;-1:-1:-1;7727:9:1;;7574:168::o;15122:401::-;15324:2;15306:21;;;15363:2;15343:18;;;15336:30;15402:34;15397:2;15382:18;;15375:62;-1:-1:-1;;;15468:2:1;15453:18;;15446:35;15513:3;15498:19;;15122:401::o;15528:399::-;15730:2;15712:21;;;15769:2;15749:18;;;15742:30;15808:34;15803:2;15788:18;;15781:62;-1:-1:-1;;;15874:2:1;15859:18;;15852:33;15917:3;15902:19;;15528:399::o;15932:125::-;15972:4;16000:1;15997;15994:8;15991:34;;;16005:18;;:::i;:::-;-1:-1:-1;16042:9:1;;15932:125::o;16062:127::-;16123:10;16118:3;16114:20;16111:1;16104:31;16154:4;16151:1;16144:15;16178:4;16175:1;16168:15;16194:135;16233:3;-1:-1:-1;;16254:17:1;;16251:43;;;16274:18;;:::i;:::-;-1:-1:-1;16321:1:1;16310:13;;16194:135::o;17101:127::-;17162:10;17157:3;17153:20;17150:1;17143:31;17193:4;17190:1;17183:15;17217:4;17214:1;17207:15
Swarm Source
ipfs://d911cc0a7cb6dc58ad6b08e17ba1f8c9e657e372e4683d479d3ee1d8b73938e6
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.