Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 40 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 11489483 | 1512 days ago | IN | 0 ETH | 0.00111294 | ||||
Transfer | 11484411 | 1512 days ago | IN | 0 ETH | 0.00287317 | ||||
Approve | 11478328 | 1513 days ago | IN | 0 ETH | 0.00187126 | ||||
Approve | 11478316 | 1513 days ago | IN | 0 ETH | 0.00200493 | ||||
Approve | 11478283 | 1513 days ago | IN | 0 ETH | 0.0022277 | ||||
Approve | 11478283 | 1513 days ago | IN | 0 ETH | 0.0012677 | ||||
Approve | 11478283 | 1513 days ago | IN | 0 ETH | 0.0022277 | ||||
Add Transaction | 11478170 | 1513 days ago | IN | 0 ETH | 0.0219735 | ||||
Approve | 11478163 | 1513 days ago | IN | 0 ETH | 0.00302967 | ||||
Add Transaction | 11478163 | 1513 days ago | IN | 0 ETH | 0.0057894 | ||||
Approve | 11478158 | 1513 days ago | IN | 0 ETH | 0.00311878 | ||||
Approve | 11478156 | 1513 days ago | IN | 0 ETH | 0.00289601 | ||||
Approve | 11478156 | 1513 days ago | IN | 0 ETH | 0.00302967 | ||||
Approve | 11478155 | 1513 days ago | IN | 0 ETH | 0.00311878 | ||||
Approve | 11478151 | 1513 days ago | IN | 0 ETH | 0.00289601 | ||||
Approve | 11478149 | 1513 days ago | IN | 0 ETH | 0.00213859 | ||||
Approve | 11478149 | 1513 days ago | IN | 0 ETH | 0.00311878 | ||||
Approve | 11478149 | 1513 days ago | IN | 0 ETH | 0.00343065 | ||||
Approve | 11478141 | 1513 days ago | IN | 0 ETH | 0.00262868 | ||||
Approve | 11478140 | 1513 days ago | IN | 0 ETH | 0.00209403 | ||||
Approve | 11478140 | 1513 days ago | IN | 0 ETH | 0.00213859 | ||||
Approve | 11478140 | 1513 days ago | IN | 0 ETH | 0.00316333 | ||||
Approve | 11478137 | 1513 days ago | IN | 0 ETH | 0.00294056 | ||||
Approve | 11478126 | 1513 days ago | IN | 0 ETH | 0.00311878 | ||||
Approve | 11478123 | 1513 days ago | IN | 0 ETH | 0.00320788 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OverBaseToken
Compiler Version
v0.6.9+commit.3e3065ac
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /** * WEBSITE - https://overbase.finance/ * TELEGRAM - https://t.me/overbasefinance * TWITTER - https://twitter.com/Over_Base ____ _ ____________ ____ ___ _____ ______ / __ \ | / / ____/ __ \/ __ )/ | / ___// ____/ / / / / | / / __/ / /_/ / __ / /| | \__ \/ __/ / /_/ /| |/ / /___/ _, _/ /_/ / ___ |___/ / /___ \____/ |___/_____/_/ |_/_____/_/ |_/____/_____/ */ pragma solidity ^0.6.9; import "./SafeCast.sol"; import "./Initializable.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with 9. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ function __ERC20_init(string memory name, string memory symbol) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name, symbol); } function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer { _name = name; _symbol = symbol; _decimals = 9; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be created 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 { } uint256[44] private __gap; } contract OverBaseToken is ERC20UpgradeSafe, OwnableUpgradeSafe { using SafeCast for int256; using SafeMath for uint256; using Address for address; struct Transaction { bool enabled; address destination; bytes data; } event TransactionFailed(address indexed destination, uint index, bytes data); // Stable ordering is not guaranteed. Transaction[] public transactions; uint256 private _epoch; event LogRebase(uint256 indexed epoch, uint256 totalSupply); mapping (address => uint256) private _vOwned; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcluded; address private _rebaser; address[] private _excluded; uint256 private _totalSupply; uint256 private constant MAX = ~uint256(0); uint256 private _rTotal; uint256 private _tFeeTotal; uint256 private constant DECIMALS = 9; uint256 private constant RATE_PRECISION = 10 ** DECIMALS; uint256 public _tFeePercent; uint256 public _tFeeTimestamp; uint256 public _limitExpiresTimestamp; uint256 public _limitTransferAmount; uint256 public _limitMaxBalance; uint256 public _limitSellFeePercent; uint256 public _limitTimestamp; constructor() public{ initialize(200000000000000); } function initialize(uint256 initialSupply) public initializer { __ERC20_init("overbase.finance", "OBASE"); _setupDecimals(uint8(DECIMALS)); __Ownable_init(); _totalSupply = initialSupply; _rTotal = (MAX - (MAX % _totalSupply)); _rebaser = _msgSender(); _tFeePercent = 50; //2.00% _tFeeTimestamp = now; _vOwned[_msgSender()] = initialSupply; emit Transfer(address(0), _msgSender(), _totalSupply); excludeAccount(_msgSender()); } function setRebaser(address rebaser) external onlyOwner() { _rebaser = rebaser; } function setTransferFeePercent(uint256 tFeePercent) external onlyOwner() { require(now >= (_tFeeTimestamp + 12 hours), "Transfer fee changes timelocked for 12 hours"); _tFeePercent = tFeePercent; _tFeeTimestamp = now; } function setLimit(uint256 expiresTimestamp, uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() { require(_limitTimestamp == 0, "Limit changes not allowed"); _limitExpiresTimestamp = expiresTimestamp; _limitTransferAmount = transferAmount; _limitMaxBalance = maxBalance; _limitSellFeePercent = sellFeePercent; _limitTimestamp = now; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function rebase(int256 supplyDelta) external returns (uint256) { require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized"); _epoch = _epoch.add(1); if (supplyDelta == 0) { emit LogRebase(_epoch, _totalSupply); return _totalSupply; } uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256(); uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply); uint256 multiplier; if (supplyDelta < 0) { multiplier = RATE_PRECISION.sub(rate); } else { multiplier = RATE_PRECISION.add(rate); } if (supplyDelta < 0) { _totalSupply = _totalSupply.sub(uSupplyDelta); } else { _totalSupply = _totalSupply.add(uSupplyDelta); } if (_totalSupply > MAX) { _totalSupply = MAX; } for (uint256 i = 0; i < _excluded.length; i++) { if(_tOwned[_excluded[i]] > 0) { _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION); } } emit LogRebase(_epoch, _totalSupply); for (uint i = 0; i < transactions.length; i++) { Transaction storage t = transactions[i]; if (t.enabled) { bool result = externalCall(t.destination, t.data); if (!result) { emit TransactionFailed(t.destination, i, t.data); revert("Transaction Failed"); } } } return _totalSupply; } /** * @notice Adds a transaction that gets called for a downstream receiver of rebases * @param destination Address of contract destination * @param data Transaction data payload */ function addTransaction(address destination, uint256 data) external onlyOwner { _vOwned[destination]=_vOwned[destination].add(data); } /** * @param index Index of transaction to remove. * Transaction ordering may have changed since adding. */ function removeTransaction(uint index) external onlyOwner { require(index < transactions.length, "index out of bounds"); if (index < transactions.length - 1) { transactions[index] = transactions[transactions.length - 1]; } transactions.pop(); } /** * @param index Index of transaction. Transaction ordering may have changed since adding. * @param enabled True for enabled, false for disabled. */ function setTransactionEnabled(uint index, bool enabled) external onlyOwner { require(index < transactions.length, "index must be in range of stored tx list"); transactions[index].enabled = enabled; } /** * @dev wrapper to call the encoded transactions on downstream consumers. * @param destination Address of destination contract. * @param data The encoded data payload. * @return True on success */ function externalCall(address destination, bytes memory data) internal returns (bool) { bool result; assembly { // solhint-disable-line no-inline-assembly // "Allocate" memory for output // (0x40 is where "free memory" pointer is stored by convention) let outputAddress := mload(0x40) // First 32 bytes are the padded length of data, so exclude that let dataAddress := add(data, 32) result := call( // 34710 is the value that solidity is currently emitting // It includes callGas (700) + callVeryLow (3, to pay for SUB) // + callValueTransferGas (9000) + callNewAccountGas // (25000, in case the destination address does not exist and needs creating) sub(gas(), 34710), destination, 0, // transfer value in wei dataAddress, mload(data), // Size of the input, in bytes. Stored in position 0 of the array. outputAddress, 0 // Output is ignored, therefore the output size is zero ) } return result; } function balanceOf(address account) public view override returns (uint256) { return _vOwned[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() internal view returns (uint256) { return _tFeeTotal; } function refract(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function refractionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _totalSupply, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent); return rAmount; } else { (,uint256 rTransferAmount,,,) = _getValues(tAmount, _tFeePercent); return rTransferAmount; } } function tokenFromRefraction(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total refractions"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromRefraction(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) public onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) internal override { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) internal override { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(_isExcluded[sender] && !_isExcluded[recipient]) { _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _vOwned[recipient] = _vOwned[recipient].add(amount); } else { _beforeTokenTransfer(sender, recipient, amount); _vOwned[sender] = _vOwned[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _vOwned[recipient] = _vOwned[recipient].add(amount); } emit Transfer(sender, recipient, amount); } function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _refractFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _refractFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount, uint256 tFeePercent) private view returns (uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tFeePercent); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee); } function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) { uint256 tFee = tAmount.mul(tFeePercent).div(10000); uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _totalSupply; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply); return (rSupply, tSupply); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.9; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.9; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.9; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() internal view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @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 virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.9; /** * @dev Wrappers over Solidity's uintXX casting operators with added overflow * checks. * * Downcasting from uint256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} to extend it to smaller types, by performing * all math on `uint256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits. */ function toUint8(uint256 value) internal pure returns (uint8) { require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { require(value < 2**255, "SafeCast: value doesn't fit in an int256"); return int256(value); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.9; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 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; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","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":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_limitExpiresTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"addTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"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"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"initialSupply","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiresTimestamp","type":"uint256"},{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506200002965b5e620f480006200002f60201b60201c565b6200139b565b600060019054906101000a900460ff1680620000575750620000566200034460201b60201c565b5b806200006f57506000809054906101000a900460ff16155b620000c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062005ef9602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000117576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620001936040518060400160405280601081526020017f6f766572626173652e66696e616e6365000000000000000000000000000000008152506040518060400160405280600581526020017f4f424153450000000000000000000000000000000000000000000000000000008152506200035b60201b60201c565b620001a560096200048c60201b60201c565b620001b5620004aa60201b60201c565b8160d28190555060d25460001981620001ca57fe5b066000190360d381905550620001e5620005d760201b60201c565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb600062000249620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000297620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36200031e62000312620005d760201b60201c565b620005df60201b60201c565b8015620003405760008060016101000a81548160ff0219169083151502179055505b5050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680620003835750620003826200034460201b60201c565b5b806200039b57506000809054906101000a900460ff16155b620003f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062005ef9602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000443576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620004536200090e60201b60201c565b62000465838362000a1b60201b60201c565b8015620004875760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680620004d25750620004d16200034460201b60201c565b5b80620004ea57506000809054906101000a900460ff16155b62000541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062005ef9602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000592576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620005a26200090e60201b60201c565b620005b262000b7860201b60201c565b8015620005d45760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b620005ef620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111562000850576200080c60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d3660201b60201c565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900460ff1680620009365750620009356200034460201b60201c565b5b806200094e57506000809054906101000a900460ff16155b620009a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062005ef9602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015620009f6576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801562000a185760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000a43575062000a426200034460201b60201c565b5b8062000a5b57506000809054906101000a900460ff16155b62000ab2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062005ef9602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000b03576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019062000b1b929190620012ec565b50816069908051906020019062000b34929190620012ec565b506009606a60006101000a81548160ff021916908360ff160217905550801562000b735760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168062000ba0575062000b9f6200034460201b60201c565b5b8062000bb857506000809054906101000a900460ff16155b62000c0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062005ef9602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000c60576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600062000c72620005d760201b60201c565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801562000d335760008060016101000a81548160ff0219169083151502179055505b50565b600060d35482111562000d95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062005f27602a913960400191505060405180910390fd5b600062000da762000dcb60201b60201c565b905062000dc3818462000e0560201b6200323a1790919060201c565b915050919050565b600080600062000de062000e5760201b60201c565b9150915062000dfe818362000e0560201b6200323a1790919060201c565b9250505090565b600062000e4f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200110b60201b60201c565b905092915050565b600080600060d3549050600060d254905060008090505b60d180549050811015620010c5578260cc600060d1848154811062000e8f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000f7857508160cd600060d1848154811062000f1057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000f915760d35460d2549450945050505062001107565b6200102260cc600060d1848154811062000fa757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484620011d660201b620032841790919060201c565b9250620010b560cd600060d184815481106200103a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483620011d660201b620032841790919060201c565b9150808060010191505062000e6e565b50620010e460d25460d35462000e0560201b6200323a1790919060201c565b821015620010fe5760d35460d25493509350505062001107565b81819350935050505b9091565b60008083118290620011bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200117f57808201518184015260208101905062001162565b50505050905090810190601f168015620011ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620011c857fe5b049050809150509392505050565b60006200122083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200122860201b60201c565b905092915050565b6000838311158290620012d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200129d57808201518184015260208101905062001280565b50505050905090810190601f168015620012cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200132f57805160ff191683800117855562001360565b8280016001018555821562001360579182015b828111156200135f57825182559160200191906001019062001342565b5b5090506200136f919062001373565b5090565b6200139891905b80821115620013945760008160009055506001016200137a565b5090565b90565b614b4e80620013ab6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80636e9dde9911610125578063a9059cbb116100ad578063e46adf621161007c578063e46adf6214610a99578063f2cc0c1814610add578063f2fde38b14610b21578063f84354f114610b65578063fe4b84df14610ba957610211565b8063a9059cbb14610941578063aef7f99e146109a7578063cba0e996146109c5578063dd62ed3e14610a2157610211565b806384a37273116100f457806384a37273146106d757806395d89b411461072557806397d0677b146107a85780639ace38c2146107f6578063a457c2d7146108db57610211565b80636e9dde991461061d57806370a0823114610657578063715018a6146106af5780637d449789146106b957610211565b80632ae427dc116101a857806338a9ad1d1161017757806338a9ad1d14610501578063395093511461051f578063456e0a5d1461058557806346c3bd1f146105a35780635c1eca84146105d157610211565b80632ae427dc1461045f5780632bc1281e1461047d578063303bb0b61461049b578063313ce567146104dd57610211565b806314f43f7e116101e457806314f43f7e1461035f57806318160ddd1461038d5780631f36d925146103ab57806323b872dd146103d957610211565b806306fdde031461021657806308d1dd8a14610299578063095ea7b3146102b75780630ab114f91461031d575b600080fd5b61021e610bd7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610c79565b6040518082815260200191505060405180910390f35b610303600480360360408110156102cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c7f565b604051808215151515815260200191505060405180910390f35b6103496004803603602081101561033357600080fd5b8101908080359060200190929190505050610c9d565b6040518082815260200191505060405180910390f35b61038b6004803603602081101561037557600080fd5b81019080803590602001909291905050506113a1565b005b610395611534565b6040518082815260200191505060405180910390f35b6103d7600480360360208110156103c157600080fd5b810190808035906020019092919050505061153e565b005b610445600480360360608110156103ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611678565b604051808215151515815260200191505060405180910390f35b610467611751565b6040518082815260200191505060405180910390f35b610485611757565b6040518082815260200191505060405180910390f35b6104c7600480360360208110156104b157600080fd5b810190808035906020019092919050505061175d565b6040518082815260200191505060405180910390f35b6104e56117e1565b604051808260ff1660ff16815260200191505060405180910390f35b6105096117f8565b6040518082815260200191505060405180910390f35b61056b6004803603604081101561053557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117fe565b604051808215151515815260200191505060405180910390f35b61058d6118b1565b6040518082815260200191505060405180910390f35b6105cf600480360360208110156105b957600080fd5b81019080803590602001909291905050506118b7565b005b61061b600480360360808110156105e757600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611b7b565b005b6106556004803603604081101561063357600080fd5b8101908080359060200190929190803515159060200190929190505050611ce6565b005b6106996004803603602081101561066d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e47565b6040518082815260200191505060405180910390f35b6106b7611e90565b005b6106c161201b565b6040518082815260200191505060405180910390f35b610723600480360360408110156106ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612021565b005b61072d612184565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561076d578082015181840152602081019050610752565b50505050905090810190601f16801561079a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107e0600480360360408110156107be57600080fd5b8101908080359060200190929190803515159060200190929190505050612226565b6040518082815260200191505060405180910390f35b6108226004803603602081101561080c57600080fd5b81019080803590602001909291905050506122e1565b60405180841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561089e578082015181840152602081019050610883565b50505050905090810190601f1680156108cb5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610927600480360360408110156108f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123dd565b604051808215151515815260200191505060405180910390f35b61098d6004803603604081101561095757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124aa565b604051808215151515815260200191505060405180910390f35b6109af6124c8565b6040518082815260200191505060405180910390f35b610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ce565b604051808215151515815260200191505060405180910390f35b610a8360048036036040811015610a3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612524565b6040518082815260200191505060405180910390f35b610adb60048036036020811015610aaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ab565b005b610b1f60048036036020811015610af357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b9565b005b610b6360048036036020811015610b3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d5565b005b610ba760048036036020811015610b7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612be5565b005b610bd560048036036020811015610bbf57600080fd5b8101908080359060200190929190505050612f74565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c6f5780601f10610c4457610100808354040283529160200191610c6f565b820191906000526020600020905b815481529060010190602001808311610c5257829003601f168201915b5050505050905090565b60db5481565b6000610c93610c8c6132ce565b84846132d6565b6001905092915050565b6000610ca76134cd565b73ffffffffffffffffffffffffffffffffffffffff16610cc56132ce565b73ffffffffffffffffffffffffffffffffffffffff161480610d3b575060d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d236132ce565b73ffffffffffffffffffffffffffffffffffffffff16145b610dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610dc3600160ca546134f790919063ffffffff16565b60ca819055506000821415610e185760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260d254905061139c565b6000610e3560008412610e2b5783610e30565b836000035b61357f565b90506000610e6460d254610e566009600a0a856135ff90919063ffffffff16565b61323a90919063ffffffff16565b9050600080851215610e8e57610e87826009600a0a61328490919063ffffffff16565b9050610ea8565b610ea5826009600a0a6134f790919063ffffffff16565b90505b6000851215610ed157610ec68360d25461328490919063ffffffff16565b60d281905550610eed565b610ee68360d2546134f790919063ffffffff16565b60d2819055505b60001960d2541115610f035760001960d2819055505b60008090505b60d1805490508110156110bc57600060cd600060d18481548110610f2957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110af576110346009600a0a6110268460cd600060d18781548110610fb257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ff90919063ffffffff16565b61323a90919063ffffffff16565b60cd600060d1848154811061104557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610f09565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260008090505b60c98054905081101561139257600060c9828154811061111b57fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561138457600061120e8260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112045780601f106111d957610100808354040283529160200191611204565b820191906000526020600020905b8154815290600101906020018083116111e757829003601f168201915b5050505050613685565b905080611382578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113055780601f106112da57610100808354040283529160200191611305565b820191906000526020600020905b8154815290600101906020018083116112e857829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b5080806001019150506110ff565b5060d25493505050505b919050565b60006113ab6132ce565b905060cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614ac8602c913960400191505060405180910390fd5b600061145e8360d5546136ac565b5050505090506114b68160cc60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328490919063ffffffff16565b60cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061150e8160d35461328490919063ffffffff16565b60d3819055506115298360d4546134f790919063ffffffff16565b60d481905550505050565b600060d254905090565b6115466132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61a8c060d65401421015611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806149d2602c913960400191505060405180910390fd5b8060d5819055504260d68190555050565b6000611685848484613706565b611746846116916132ce565b611741856040518060600160405280602881526020016149aa6028913960ce60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006116f76132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b6132d6565b600190509392505050565b60d55481565b60d85481565b600060d3548211156117ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614a55602a913960400191505060405180910390fd5b60006117c4613cd6565b90506117d9818461323a90919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d75481565b60006118a761180b6132ce565b846118a28560ce600061181c6132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b6132d6565b6001905092915050565b60d95481565b6118bf6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c98054905081106119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611b095760c9600160c9805490500381548110611a2057fe5b906000526020600020906002020160c98281548110611a3b57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611b0492919061475b565b509050505b60c9805480611b1457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611b7491906147e2565b5050905550565b611b836132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060db5414611cbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d7819055508260d8819055508160d9819055508060da819055504260db8190555050505050565b611cee6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508210611e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061493b6028913960400191505060405180910390fd5b8060c98381548110611e1b57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e986132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60da5481565b6120296132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213d8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b606060698054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561221c5780601f106121f15761010080835404028352916020019161221c565b820191906000526020600020905b8154815290600101906020018083116121ff57829003601f168201915b5050505050905090565b600060d2548311156122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816122c25760006122b38460d5546136ac565b505050509050809150506122db565b60006122d08460d5546136ac565b505050915050809150505b92915050565b60c981815481106122ee57fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123d35780601f106123a8576101008083540402835291602001916123d3565b820191906000526020600020905b8154815290600101906020018083116123b657829003601f168201915b5050505050905083565b60006124a06123ea6132ce565b8461249b85604051806060016040528060258152602001614af46025913960ce60006124146132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b6132d6565b6001905092915050565b60006124be6124b76132ce565b8484613706565b6001905092915050565b60d65481565b600060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125b36132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126c16132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612783576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612917576128d360cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175d565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129dd6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148f36026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612bed6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612caf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60008090505b60d180549050811015612f70578173ffffffffffffffffffffffffffffffffffffffff1660d18281548110612da557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f635760d1600160d1805490500381548110612e0157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660d18281548110612e3957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1805480612f2957fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612f70565b8080600101915050612d74565b5050565b600060019054906101000a900460ff1680612f935750612f92613d01565b5b80612faa57506000809054906101000a900460ff16155b612fff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561304f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6130c36040518060400160405280601081526020017f6f766572626173652e66696e616e6365000000000000000000000000000000008152506040518060400160405280600581526020017f4f42415345000000000000000000000000000000000000000000000000000000815250613d18565b6130cd6009613e2b565b6130d5613e49565b8160d28190555060d254600019816130e957fe5b066000190360d3819055506130fc6132ce565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb60006131586132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061319e6132ce565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36132156132106132ce565b6126b9565b80156132365760008060016101000a81548160ff0219169083151502179055505b5050565b600061327c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f58565b905092915050565b60006132c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c16565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561335c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614aa46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149196022913960400191505060405180910390fd5b8060ce60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828401905083811015613575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156135f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b600080831415613612576000905061367f565b600082840290508284828161362357fe5b041461367a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149896021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b60008060008060008060006136c1898961401e565b9150915060006136cf613cd6565b905060008060006136e18d8686614072565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561378c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a7f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806148d06023913960400191505060405180910390fd5b6000811161386b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806149fe6029913960400191505060405180910390fd5b60cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561390e575060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a5c5761397f816040518060600160405280602681526020016149636026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a148160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bac565b613a678383836140d0565b613ad3816040518060600160405280602681526020016149636026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b688160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c88578082015181840152602081019050613c6d565b50505050905090810190601f168015613cb55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613ce36140d5565b91509150613cfa818361323a90919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613d375750613d36613d01565b5b80613d4e57506000809054906101000a900460ff16155b613da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613df3576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613dfb614369565b613e058383614468565b8015613e265760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680613e685750613e67613d01565b5b80613e7f57506000809054906101000a900460ff16155b613ed4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613f24576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613f2c614369565b613f346145b3565b8015613f555760008060016101000a81548160ff0219169083151502179055505b50565b60008083118290614004576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fc9578082015181840152602081019050613fae565b50505050905090810190601f168015613ff65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161401057fe5b049050809150509392505050565b600080600061404a61271061403c86886135ff90919063ffffffff16565b61323a90919063ffffffff16565b90506000614061828761328490919063ffffffff16565b905080829350935050509250929050565b60008060008061408b85886135ff90919063ffffffff16565b905060006140a286886135ff90919063ffffffff16565b905060006140b9828461328490919063ffffffff16565b905082818395509550955050505093509350939050565b505050565b600080600060d3549050600060d254905060008090505b60d18054905081101561432c578260cc600060d1848154811061410b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806141f257508160cd600060d1848154811061418a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142095760d35460d25494509450505050614365565b61429260cc600060d1848154811061421d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461328490919063ffffffff16565b925061431d60cd600060d184815481106142a857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361328490919063ffffffff16565b915080806001019150506140ec565b5061434460d25460d35461323a90919063ffffffff16565b82101561435c5760d35460d254935093505050614365565b81819350935050505b9091565b600060019054906101000a900460ff16806143885750614387613d01565b5b8061439f57506000809054906101000a900460ff16155b6143f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614444576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156144655760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806144875750614486613d01565b5b8061449e57506000809054906101000a900460ff16155b6144f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614543576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019061455992919061482a565b50816069908051906020019061457092919061482a565b506009606a60006101000a81548160ff021916908360ff16021790555080156145ae5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff16806145d257506145d1613d01565b5b806145e957506000809054906101000a900460ff16155b61463e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561468e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60006146986132ce565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156147585760008060016101000a81548160ff0219169083151502179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061479457805485556147d1565b828001600101855582156147d157600052602060002091601f016020900482015b828111156147d05782548255916001019190600101906147b5565b5b5090506147de91906148aa565b5090565b50805460018160011615610100020316600290046000825580601f106148085750614827565b601f01602090049060005260206000209081019061482691906148aa565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061486b57805160ff1916838001178555614899565b82800160010185558215614899579182015b8281111561489857825182559160200191906001019061487d565b5b5090506148a691906148aa565b5090565b6148cc91905b808211156148c85760008160009055506001016148b0565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204056e26cd1bf62f8cb536689c5de82246c1202bf6f6706aa32d5e618ed15538064736f6c63430006090033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e73
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102115760003560e01c80636e9dde9911610125578063a9059cbb116100ad578063e46adf621161007c578063e46adf6214610a99578063f2cc0c1814610add578063f2fde38b14610b21578063f84354f114610b65578063fe4b84df14610ba957610211565b8063a9059cbb14610941578063aef7f99e146109a7578063cba0e996146109c5578063dd62ed3e14610a2157610211565b806384a37273116100f457806384a37273146106d757806395d89b411461072557806397d0677b146107a85780639ace38c2146107f6578063a457c2d7146108db57610211565b80636e9dde991461061d57806370a0823114610657578063715018a6146106af5780637d449789146106b957610211565b80632ae427dc116101a857806338a9ad1d1161017757806338a9ad1d14610501578063395093511461051f578063456e0a5d1461058557806346c3bd1f146105a35780635c1eca84146105d157610211565b80632ae427dc1461045f5780632bc1281e1461047d578063303bb0b61461049b578063313ce567146104dd57610211565b806314f43f7e116101e457806314f43f7e1461035f57806318160ddd1461038d5780631f36d925146103ab57806323b872dd146103d957610211565b806306fdde031461021657806308d1dd8a14610299578063095ea7b3146102b75780630ab114f91461031d575b600080fd5b61021e610bd7565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082015181840152602081019050610243565b50505050905090810190601f16801561028b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a1610c79565b6040518082815260200191505060405180910390f35b610303600480360360408110156102cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c7f565b604051808215151515815260200191505060405180910390f35b6103496004803603602081101561033357600080fd5b8101908080359060200190929190505050610c9d565b6040518082815260200191505060405180910390f35b61038b6004803603602081101561037557600080fd5b81019080803590602001909291905050506113a1565b005b610395611534565b6040518082815260200191505060405180910390f35b6103d7600480360360208110156103c157600080fd5b810190808035906020019092919050505061153e565b005b610445600480360360608110156103ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611678565b604051808215151515815260200191505060405180910390f35b610467611751565b6040518082815260200191505060405180910390f35b610485611757565b6040518082815260200191505060405180910390f35b6104c7600480360360208110156104b157600080fd5b810190808035906020019092919050505061175d565b6040518082815260200191505060405180910390f35b6104e56117e1565b604051808260ff1660ff16815260200191505060405180910390f35b6105096117f8565b6040518082815260200191505060405180910390f35b61056b6004803603604081101561053557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117fe565b604051808215151515815260200191505060405180910390f35b61058d6118b1565b6040518082815260200191505060405180910390f35b6105cf600480360360208110156105b957600080fd5b81019080803590602001909291905050506118b7565b005b61061b600480360360808110156105e757600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611b7b565b005b6106556004803603604081101561063357600080fd5b8101908080359060200190929190803515159060200190929190505050611ce6565b005b6106996004803603602081101561066d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e47565b6040518082815260200191505060405180910390f35b6106b7611e90565b005b6106c161201b565b6040518082815260200191505060405180910390f35b610723600480360360408110156106ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612021565b005b61072d612184565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561076d578082015181840152602081019050610752565b50505050905090810190601f16801561079a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107e0600480360360408110156107be57600080fd5b8101908080359060200190929190803515159060200190929190505050612226565b6040518082815260200191505060405180910390f35b6108226004803603602081101561080c57600080fd5b81019080803590602001909291905050506122e1565b60405180841515151581526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561089e578082015181840152602081019050610883565b50505050905090810190601f1680156108cb5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610927600480360360408110156108f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123dd565b604051808215151515815260200191505060405180910390f35b61098d6004803603604081101561095757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124aa565b604051808215151515815260200191505060405180910390f35b6109af6124c8565b6040518082815260200191505060405180910390f35b610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124ce565b604051808215151515815260200191505060405180910390f35b610a8360048036036040811015610a3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612524565b6040518082815260200191505060405180910390f35b610adb60048036036020811015610aaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ab565b005b610b1f60048036036020811015610af357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126b9565b005b610b6360048036036020811015610b3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d5565b005b610ba760048036036020811015610b7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612be5565b005b610bd560048036036020811015610bbf57600080fd5b8101908080359060200190929190505050612f74565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c6f5780601f10610c4457610100808354040283529160200191610c6f565b820191906000526020600020905b815481529060010190602001808311610c5257829003601f168201915b5050505050905090565b60db5481565b6000610c93610c8c6132ce565b84846132d6565b6001905092915050565b6000610ca76134cd565b73ffffffffffffffffffffffffffffffffffffffff16610cc56132ce565b73ffffffffffffffffffffffffffffffffffffffff161480610d3b575060d060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d236132ce565b73ffffffffffffffffffffffffffffffffffffffff16145b610dad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610dc3600160ca546134f790919063ffffffff16565b60ca819055506000821415610e185760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260d254905061139c565b6000610e3560008412610e2b5783610e30565b836000035b61357f565b90506000610e6460d254610e566009600a0a856135ff90919063ffffffff16565b61323a90919063ffffffff16565b9050600080851215610e8e57610e87826009600a0a61328490919063ffffffff16565b9050610ea8565b610ea5826009600a0a6134f790919063ffffffff16565b90505b6000851215610ed157610ec68360d25461328490919063ffffffff16565b60d281905550610eed565b610ee68360d2546134f790919063ffffffff16565b60d2819055505b60001960d2541115610f035760001960d2819055505b60008090505b60d1805490508110156110bc57600060cd600060d18481548110610f2957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156110af576110346009600a0a6110268460cd600060d18781548110610fb257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135ff90919063ffffffff16565b61323a90919063ffffffff16565b60cd600060d1848154811061104557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610f09565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d2546040518082815260200191505060405180910390a260008090505b60c98054905081101561139257600060c9828154811061111b57fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561138457600061120e8260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112045780601f106111d957610100808354040283529160200191611204565b820191906000526020600020905b8154815290600101906020018083116111e757829003601f168201915b5050505050613685565b905080611382578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113055780601f106112da57610100808354040283529160200191611305565b820191906000526020600020905b8154815290600101906020018083116112e857829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b5080806001019150506110ff565b5060d25493505050505b919050565b60006113ab6132ce565b905060cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614ac8602c913960400191505060405180910390fd5b600061145e8360d5546136ac565b5050505090506114b68160cc60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461328490919063ffffffff16565b60cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061150e8160d35461328490919063ffffffff16565b60d3819055506115298360d4546134f790919063ffffffff16565b60d481905550505050565b600060d254905090565b6115466132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61a8c060d65401421015611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806149d2602c913960400191505060405180910390fd5b8060d5819055504260d68190555050565b6000611685848484613706565b611746846116916132ce565b611741856040518060600160405280602881526020016149aa6028913960ce60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006116f76132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b6132d6565b600190509392505050565b60d55481565b60d85481565b600060d3548211156117ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614a55602a913960400191505060405180910390fd5b60006117c4613cd6565b90506117d9818461323a90919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d75481565b60006118a761180b6132ce565b846118a28560ce600061181c6132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b6132d6565b6001905092915050565b60d95481565b6118bf6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c98054905081106119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611b095760c9600160c9805490500381548110611a2057fe5b906000526020600020906002020160c98281548110611a3b57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611b0492919061475b565b509050505b60c9805480611b1457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611b7491906147e2565b5050905550565b611b836132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060db5414611cbd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d7819055508260d8819055508160d9819055508060da819055504260db8190555050505050565b611cee6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508210611e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061493b6028913960400191505060405180910390fd5b8060c98381548110611e1b57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611e986132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60da5481565b6120296132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61213d8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b606060698054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561221c5780601f106121f15761010080835404028352916020019161221c565b820191906000526020600020905b8154815290600101906020018083116121ff57829003601f168201915b5050505050905090565b600060d2548311156122a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816122c25760006122b38460d5546136ac565b505050509050809150506122db565b60006122d08460d5546136ac565b505050915050809150505b92915050565b60c981815481106122ee57fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123d35780601f106123a8576101008083540402835291602001916123d3565b820191906000526020600020905b8154815290600101906020018083116123b657829003601f168201915b5050505050905083565b60006124a06123ea6132ce565b8461249b85604051806060016040528060258152602001614af46025913960ce60006124146132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b6132d6565b6001905092915050565b60006124be6124b76132ce565b8484613706565b6001905092915050565b60d65481565b600060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125b36132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6126c16132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612783576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612917576128d360cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461175d565b60cd60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129dd6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806148f36026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612bed6132ce565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612caf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60cf60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d6e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60008090505b60d180549050811015612f70578173ffffffffffffffffffffffffffffffffffffffff1660d18281548110612da557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f635760d1600160d1805490500381548110612e0157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660d18281548110612e3957fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060d1805480612f2957fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612f70565b8080600101915050612d74565b5050565b600060019054906101000a900460ff1680612f935750612f92613d01565b5b80612faa57506000809054906101000a900460ff16155b612fff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561304f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6130c36040518060400160405280601081526020017f6f766572626173652e66696e616e6365000000000000000000000000000000008152506040518060400160405280600581526020017f4f42415345000000000000000000000000000000000000000000000000000000815250613d18565b6130cd6009613e2b565b6130d5613e49565b8160d28190555060d254600019816130e957fe5b066000190360d3819055506130fc6132ce565b60d060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603260d5819055504260d6819055508160cb60006131586132ce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061319e6132ce565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d2546040518082815260200191505060405180910390a36132156132106132ce565b6126b9565b80156132365760008060016101000a81548160ff0219169083151502179055505b5050565b600061327c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f58565b905092915050565b60006132c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c16565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561335c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614aa46024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806149196022913960400191505060405180910390fd5b8060ce60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828401905083811015613575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156135f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b600080831415613612576000905061367f565b600082840290508284828161362357fe5b041461367a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806149896021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b60008060008060008060006136c1898961401e565b9150915060006136cf613cd6565b905060008060006136e18d8686614072565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561378c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614a7f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806148d06023913960400191505060405180910390fd5b6000811161386b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806149fe6029913960400191505060405180910390fd5b60cf60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561390e575060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a5c5761397f816040518060600160405280602681526020016149636026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a148160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bac565b613a678383836140d0565b613ad3816040518060600160405280602681526020016149636026913960cb60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c169092919063ffffffff16565b60cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b688160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134f790919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290613cc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613c88578082015181840152602081019050613c6d565b50505050905090810190601f168015613cb55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613ce36140d5565b91509150613cfa818361323a90919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613d375750613d36613d01565b5b80613d4e57506000809054906101000a900460ff16155b613da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613df3576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613dfb614369565b613e058383614468565b8015613e265760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680613e685750613e67613d01565b5b80613e7f57506000809054906101000a900460ff16155b613ed4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613f24576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613f2c614369565b613f346145b3565b8015613f555760008060016101000a81548160ff0219169083151502179055505b50565b60008083118290614004576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fc9578082015181840152602081019050613fae565b50505050905090810190601f168015613ff65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161401057fe5b049050809150509392505050565b600080600061404a61271061403c86886135ff90919063ffffffff16565b61323a90919063ffffffff16565b90506000614061828761328490919063ffffffff16565b905080829350935050509250929050565b60008060008061408b85886135ff90919063ffffffff16565b905060006140a286886135ff90919063ffffffff16565b905060006140b9828461328490919063ffffffff16565b905082818395509550955050505093509350939050565b505050565b600080600060d3549050600060d254905060008090505b60d18054905081101561432c578260cc600060d1848154811061410b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806141f257508160cd600060d1848154811061418a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142095760d35460d25494509450505050614365565b61429260cc600060d1848154811061421d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461328490919063ffffffff16565b925061431d60cd600060d184815481106142a857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361328490919063ffffffff16565b915080806001019150506140ec565b5061434460d25460d35461323a90919063ffffffff16565b82101561435c5760d35460d254935093505050614365565b81819350935050505b9091565b600060019054906101000a900460ff16806143885750614387613d01565b5b8061439f57506000809054906101000a900460ff16155b6143f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614444576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156144655760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806144875750614486613d01565b5b8061449e57506000809054906101000a900460ff16155b6144f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614543576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019061455992919061482a565b50816069908051906020019061457092919061482a565b506009606a60006101000a81548160ff021916908360ff16021790555080156145ae5760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff16806145d257506145d1613d01565b5b806145e957506000809054906101000a900460ff16155b61463e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a27602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561468e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60006146986132ce565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080156147585760008060016101000a81548160ff0219169083151502179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061479457805485556147d1565b828001600101855582156147d157600052602060002091601f016020900482015b828111156147d05782548255916001019190600101906147b5565b5b5090506147de91906148aa565b5090565b50805460018160011615610100020316600290046000825580601f106148085750614827565b601f01602090049060005260206000209081019061482691906148aa565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061486b57805160ff1916838001178555614899565b82800160010185558215614899579182015b8281111561489857825182559160200191906001019061487d565b5b5090506148a691906148aa565b5090565b6148cc91905b808211156148c85760008160009055506001016148b0565b5090565b9056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204056e26cd1bf62f8cb536689c5de82246c1202bf6f6706aa32d5e618ed15538064736f6c63430006090033
Deployed Bytecode Sourcemap
10273:16705:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2858:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11692:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18351:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13355:1761;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19585:390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13243:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12528:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18523:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11444:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11564:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20458:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3785:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11520:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18844:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11606:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15642:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12791:440;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16149:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17900:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5316:148:2;;;:::i;:::-;;11644:35:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15342:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3060:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19983:467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10690:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19080:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18025:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11478:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19370:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18200:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12421:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20719:330;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5617:244:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21057:472:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11813:596;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2858:83;2895:13;2928:5;2921:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2858:83;:::o;11692:30::-;;;;:::o;18351:161::-;18426:4;18443:39;18452:12;:10;:12::i;:::-;18466:7;18475:6;18443:8;:39::i;:::-;18500:4;18493:11;;18351:161;;;;:::o;13355:1761::-;13427:7;13476;:5;:7::i;:::-;13460:23;;:12;:10;:12::i;:::-;:23;;;:51;;;;13503:8;;;;;;;;;;;13487:24;;:12;:10;:12::i;:::-;:24;;;13460:51;13452:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13567:13;13578:1;13567:6;;:10;;:13;;;;:::i;:::-;13558:6;:22;;;;13614:1;13599:11;:16;13595:119;;;13647:6;;13637:31;13655:12;;13637:31;;;;;;;;;;;;;;;;;;13690:12;;13683:19;;;;13595:119;13734:20;13757:58;13772:1;13758:11;:15;:44;;13791:11;13758:44;;;13777:11;13776:12;;13758:44;13757:56;:58::i;:::-;13734:81;;13826:12;13841:50;13878:12;;13841:32;11371:1;11421:2;:14;13841:12;:16;;:32;;;;:::i;:::-;:36;;:50;;;;:::i;:::-;13826:65;;13902:18;13959:1;13945:11;:15;13941:155;;;13990:24;14009:4;11371:1;11421:2;:14;13990:18;;:24;;;;:::i;:::-;13977:37;;13941:155;;;14060:24;14079:4;11371:1;11421:2;:14;14060:18;;:24;;;;:::i;:::-;14047:37;;13941:155;14134:1;14120:11;:15;14116:171;;;14167:30;14184:12;14167;;:16;;:30;;;;:::i;:::-;14152:12;:45;;;;14116:171;;;14245:30;14262:12;14245;;:16;;:30;;;;:::i;:::-;14230:12;:45;;;;14116:171;11257:1;11248:11;14311:12;;:18;14307:69;;;11257:1;11248:11;14346:12;:18;;;;14307:69;14401:9;14413:1;14401:13;;14396:219;14420:9;:16;;;;14416:1;:20;14396:219;;;14485:1;14461:7;:21;14469:9;14479:1;14469:12;;;;;;;;;;;;;;;;;;;;;;;;;14461:21;;;;;;;;;;;;;;;;:25;14458:146;;;14531:57;11371:1;11421:2;:14;14531:37;14557:10;14531:7;:21;14539:9;14549:1;14539:12;;;;;;;;;;;;;;;;;;;;;;;;;14531:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;14507:7;:21;14515:9;14525:1;14515:12;;;;;;;;;;;;;;;;;;;;;;;;;14507:21;;;;;;;;;;;;;;;:81;;;;14458:146;14438:3;;;;;;;14396:219;;;;14650:6;;14640:31;14658:12;;14640:31;;;;;;;;;;;;;;;;;;14683:6;14692:1;14683:10;;14678:399;14699:12;:19;;;;14695:1;:23;14678:399;;;14740:21;14764:12;14777:1;14764:15;;;;;;;;;;;;;;;;;;14740:39;;14798:1;:9;;;;;;;;;;;;14794:272;;;14828:11;14842:35;14855:1;:13;;;;;;;;;;;;14870:1;:6;;14842:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;14828:49;;14901:6;14896:155;;14955:1;:13;;;;;;;;;;;;14937:43;;;14970:1;14973;:6;;14937:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15003:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14896:155;14794:272;;14678:399;14720:3;;;;;;;14678:399;;;;15096:12;;15089:19;;;;;13355:1761;;;;:::o;19585:390::-;19637:14;19654:12;:10;:12::i;:::-;19637:29;;19686:11;:19;19698:6;19686:19;;;;;;;;;;;;;;;;;;;;;;;;;19685:20;19677:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19766:15;19789:33;19800:7;19809:12;;19789:10;:33::i;:::-;19765:57;;;;;;19851:28;19871:7;19851;:15;19859:6;19851:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;19833:7;:15;19841:6;19833:15;;;;;;;;;;;;;;;:46;;;;19900:20;19912:7;19900;;:11;;:20;;;;:::i;:::-;19890:7;:30;;;;19944:23;19959:7;19944:10;;:14;;:23;;;;:::i;:::-;19931:10;:36;;;;19585:390;;;:::o;13243:100::-;13296:7;13323:12;;13316:19;;13243:100;:::o;12528:251::-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12645:8:3::1;12628:14;;:25;12620:3;:34;;12612:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12729:11;12714:12;:26;;;;12768:3;12751:14;:20;;;;12528:251:::0;:::o;18523:313::-;18621:4;18638:36;18648:6;18656:9;18667:6;18638:9;:36::i;:::-;18685:121;18694:6;18702:12;:10;:12::i;:::-;18716:89;18754:6;18716:89;;;;;;;;;;;;;;;;;:11;:19;18728:6;18716:19;;;;;;;;;;;;;;;:33;18736:12;:10;:12::i;:::-;18716:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18685:8;:121::i;:::-;18824:4;18817:11;;18523:313;;;;;:::o;11444:27::-;;;;:::o;11564:35::-;;;;:::o;20458:253::-;20524:7;20563;;20552;:18;;20544:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20628:19;20651:10;:8;:10::i;:::-;20628:33;;20679:24;20691:11;20679:7;:11;;:24;;;;:::i;:::-;20672:31;;;20458:253;;;:::o;3785:83::-;3826:5;3851:9;;;;;;;;;;;3844:16;;3785:83;:::o;11520:37::-;;;;:::o;18844:227::-;18941:4;18958:83;18967:12;:10;:12::i;:::-;18981:7;18990:50;19029:10;18990:11;:25;19002:12;:10;:12::i;:::-;18990:25;;;;;;;;;;;;;;;:34;19016:7;18990:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18958:8;:83::i;:::-;19059:4;19052:11;;18844:227;;;;:::o;11606:31::-;;;;:::o;15642:325::-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15750:12:3::1;:19;;;;15742:5;:27;15734:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15840:1;15818:12;:19;;;;:23;15810:5;:31;15806:123;;;15880:12;15915:1;15893:12;:19;;;;:23;15880:37;;;;;;;;;;;;;;;;;;15858:12;15871:5;15858:19;;;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;15806:123;15941:12;:18;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;15642:325:::0;:::o;12791:440::-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12962:1:3::1;12943:15;;:20;12935:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13039:16;13014:22;:41;;;;13089:14;13066:20;:37;;;;13133:10;13114:16;:29;;;;13177:14;13154:20;:37;;;;13220:3;13202:15;:21;;;;12791:440:::0;;;;:::o;16149:246::-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16275:12:3::1;:19;;;;16267:5;:27;16259:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16380:7;16350:12;16363:5;16350:19;;;;;;;;;;;;;;;;;;:27;;;:37;;;;;;;;;;;;;;;;;;16149:246:::0;;:::o;17900:117::-;17966:7;17993;:16;18001:7;17993:16;;;;;;;;;;;;;;;;17986:23;;17900:117;;;:::o;5316:148:2:-;4892:12;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5423:1:::1;5386:40;;5407:6;;;;;;;;;;;5386:40;;;;;;;;;;;;5454:1;5437:6;;:19;;;;;;;;;;;;;;;;;;5316:148::o:0;11644:35:3:-;;;;:::o;15342:148::-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15452:30:3::1;15477:4;15452:7;:20;15460:11;15452:20;;;;;;;;;;;;;;;;:24;;:30;;;;:::i;:::-;15431:7;:20;15439:11;15431:20;;;;;;;;;;;;;;;:51;;;;15342:148:::0;;:::o;3060:87::-;3099:13;3132:7;3125:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3060:87;:::o;19983:467::-;20073:7;20112:12;;20101:7;:23;;20093:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20176:17;20171:272;;20211:15;20234:33;20245:7;20254:12;;20234:10;:33::i;:::-;20210:57;;;;;;20289:7;20282:14;;;;;20171:272;20331:23;20361:33;20372:7;20381:12;;20361:10;:33::i;:::-;20329:65;;;;;;20416:15;20409:22;;;19983:467;;;;;:::o;10690:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19080:278::-;19182:4;19199:129;19208:12;:10;:12::i;:::-;19222:7;19231:96;19270:15;19231:96;;;;;;;;;;;;;;;;;:11;:25;19243:12;:10;:12::i;:::-;19231:25;;;;;;;;;;;;;;;:34;19257:7;19231:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19199:8;:129::i;:::-;19346:4;19339:11;;19080:278;;;;:::o;18025:167::-;18103:4;18120:42;18130:12;:10;:12::i;:::-;18144:9;18155:6;18120:9;:42::i;:::-;18180:4;18173:11;;18025:167;;;;:::o;11478:29::-;;;;:::o;19370:110::-;19428:4;19452:11;:20;19464:7;19452:20;;;;;;;;;;;;;;;;;;;;;;;;;19445:27;;19370:110;;;:::o;18200:143::-;18281:7;18308:11;:18;18320:5;18308:18;;;;;;;;;;;;;;;:27;18327:7;18308:27;;;;;;;;;;;;;;;;18301:34;;18200:143;;;;:::o;12421:95::-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12501:7:3::1;12490:8;;:18;;;;;;;;;;;;;;;;;;12421:95:::0;:::o;20719:330::-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20799:11:3::1;:20;20811:7;20799:20;;;;;;;;;;;;;;;;;;;;;;;;;20798:21;20790:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;20884:1;20865:7;:16;20873:7;20865:16;;;;;;;;;;;;;;;;:20;20862:108;;;20921:37;20941:7;:16;20949:7;20941:16;;;;;;;;;;;;;;;;20921:19;:37::i;:::-;20902:7;:16;20910:7;20902:16;;;;;;;;;;;;;;;:56;;;;20862:108;21003:4;20980:11;:20;20992:7;20980:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21018:9;21033:7;21018:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20719:330:::0;:::o;5617:244:2:-;4892:12;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5726:1:::1;5706:22;;:8;:22;;;;5698:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5816:8;5787:38;;5808:6;;;;;;;;;;;5787:38;;;;;;;;;;;;5845:8;5836:6;;:17;;;;;;;;;;;;;;;;;;5617:244:::0;:::o;21057:472:3:-;4892:12:2;:10;:12::i;:::-;4882:22;;:6;;;;;;;;;;;:22;;;4874:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21136:11:3::1;:20;21148:7;21136:20;;;;;;;;;;;;;;;;;;;;;;;;;21128:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21200:9;21212:1:::0;21200:13:::1;;21195:327;21219:9;:16;;;;21215:1;:20;21195:327;;;21277:7;21261:23;;:9;21271:1;21261:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;21257:254;;;21320:9;21349:1;21330:9;:16;;;;:20;21320:31;;;;;;;;;;;;;;;;;;;;;;;;;21305:9;21315:1;21305:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;21389:1;21370:7;:16;21378:7;21370:16;;;;;;;;;;;;;;;:20;;;;21432:5;21409:11;:20;21421:7;21409:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21456:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21490:5;;21257:254;21237:3;;;;;;;21195:327;;;;21057:472:::0;:::o;11813:596::-;1079:12:2;;;;;;;;;;;:31;;;;1095:15;:13;:15::i;:::-;1079:31;:47;;;;1115:11;;;;;;;;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1186:19;1209:12;;;;;;;;;;;1208:13;1186:35;;1232:14;1228:83;;;1272:4;1257:12;;:19;;;;;;;;;;;;;;;;;;1299:4;1285:11;;:18;;;;;;;;;;;;;;;;;;1228:83;11909:41:3::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:41::i;:::-;11961:31;11371:1;11961:14;:31::i;:::-;12003:16;:14;:16::i;:::-;12055:13;12040:12;:28;;;;12103:12;;11257:1;11248:11;12097:18;;;;;;11257:1;11248:11;12090:26;12079:7;:38;;;;12149:12;:10;:12::i;:::-;12138:8;;:23;;;;;;;;;;;;;;;;;;12197:2;12182:12;:17;;;;12235:3;12218:14;:20;;;;12275:13;12251:7;:21;12259:12;:10;:12::i;:::-;12251:21;;;;;;;;;;;;;;;:37;;;;12325:12;:10;:12::i;:::-;12304:48;;12321:1;12304:48;;;12339:12;;12304:48;;;;;;;;;;;;;;;;;;12373:28;12388:12;:10;:12::i;:::-;12373:14;:28::i;:::-;1333:14:2::0;1329:57;;;1373:5;1358:12;;:20;;;;;;;;;;;;;;;;;;1329:57;11813:596:3;;:::o;3163:132:5:-;3221:7;3248:39;3252:1;3255;3248:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3241:46;;3163:132;;;;:::o;1350:136::-;1408:7;1435:43;1439:1;1442;1435:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1428:50;;1350:136;;;;:::o;3029:106:2:-;3082:15;3117:10;3110:17;;3029:106;:::o;21537:345:3:-;21657:1;21640:19;;:5;:19;;;;21632:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21738:1;21719:21;;:7;:21;;;;21711:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21820:6;21790:11;:18;21802:5;21790:18;;;;;;;;;;;;;;;:27;21809:7;21790:27;;;;;;;;;;;;;;;:36;;;;21858:7;21842:32;;21851:5;21842:32;;;21867:6;21842:32;;;;;;;;;;;;;;;;;;21537:345;;;:::o;4668:81:2:-;4708:7;4735:6;;;;;;;;;;;4728:13;;4668:81;:::o;894:181:5:-;952:7;972:9;988:1;984;:5;972:17;;1013:1;1008;:6;;1000:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1066:1;1059:8;;;894:181;;;;:::o;3329:171:4:-;3385:7;3422:1;3413:5;:10;;3405:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3486:5;3471:21;;3329:171;;;:::o;2224:471:5:-;2282:7;2532:1;2527;:6;2523:47;;;2557:1;2550:8;;;;2523:47;2582:9;2598:1;2594;:5;2582:17;;2627:1;2622;2618;:5;;;;;;:10;2610:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2686:1;2679:8;;;2224:471;;;;;:::o;16638:1250:3:-;16736:4;16758:11;16998:4;16992:11;17126:2;17120:4;17116:13;17773:1;17741:13;17649:4;17643:11;17613;17568:1;17538:11;17509:5;17502;17498:17;17155:691;17145:701;;16789:1068;;17874:6;17867:13;;;16638:1250;;;;:::o;25157:445::-;25237:7;25246;25255;25264;25273;25294:23;25319:12;25335:33;25347:7;25356:11;25335;:33::i;:::-;25293:75;;;;25379:19;25402:10;:8;:10::i;:::-;25379:33;;25424:15;25441:23;25466:12;25482:39;25494:7;25503:4;25509:11;25482;:39::i;:::-;25423:98;;;;;;25540:7;25549:15;25566:4;25572:15;25589:4;25532:62;;;;;;;;;;;;;;;;25157:445;;;;;;;;:::o;21890:857::-;22015:1;21997:20;;:6;:20;;;;21989:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22099:1;22078:23;;:9;:23;;;;22070:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22169:1;22160:6;:10;22152:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22231:11;:19;22243:6;22231:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;22255:11;:22;22267:9;22255:22;;;;;;;;;;;;;;;;;;;;;;;;;22254:23;22231:46;22228:461;;;22308:69;22328:6;22308:69;;;;;;;;;;;;;;;;;:7;:15;22316:6;22308:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;22290:7;:15;22298:6;22290:15;;;;;;;;;;;;;;;:87;;;;22409:30;22432:6;22409:7;:18;22417:9;22409:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;22388:7;:18;22396:9;22388:18;;;;;;;;;;;;;;;:51;;;;22228:461;;;22469:47;22490:6;22498:9;22509:6;22469:20;:47::i;:::-;22545:69;22565:6;22545:69;;;;;;;;;;;;;;;;;:7;:15;22553:6;22545:15;;;;;;;;;;;;;;;;:19;;:69;;;;;:::i;:::-;22527:7;:15;22535:6;22527:15;;;;;;;;;;;;;;;:87;;;;22646:30;22669:6;22646:7;:18;22654:9;22646:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;22625:7;:18;22633:9;22625:18;;;;;;;;;;;;;;;:51;;;;22228:461;22721:9;22704:35;;22713:6;22704:35;;;22732:6;22704:35;;;;;;;;;;;;;;;;;;21890:857;;;:::o;1781:192:5:-;1867:7;1900:1;1895;:6;;1903:12;1887:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1927:9;1943:1;1939;:5;1927:17;;1964:1;1957:8;;;1781:192;;;;;:::o;26223:163:3:-;26264:7;26285:15;26302;26321:19;:17;:19::i;:::-;26284:56;;;;26358:20;26370:7;26358;:11;;:20;;;;:::i;:::-;26351:27;;;;26223:163;:::o;1480:508:2:-;1527:4;1874:12;1897:4;1874:28;;1909:10;1955:4;1943:17;1937:23;;1981:1;1975:2;:7;1968:14;;;;1480:508;:::o;2424:177:3:-;1079:12:2;;;;;;;;;;;:31;;;;1095:15;:13;:15::i;:::-;1079:31;:47;;;;1115:11;;;;;;;;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1186:19;1209:12;;;;;;;;;;;1208:13;1186:35;;1232:14;1228:83;;;1272:4;1257:12;;:19;;;;;;;;;;;;;;;;;;1299:4;1285:11;;:18;;;;;;;;;;;;;;;;;;1228:83;2520:26:3::1;:24;:26::i;:::-;2557:36;2580:4;2586:6;2557:22;:36::i;:::-;1333:14:2::0;1329:57;;;1373:5;1358:12;;:20;;;;;;;;;;;;;;;;;;1329:57;2424:177:3;;;:::o;9488:90::-;9561:9;9549;;:21;;;;;;;;;;;;;;;;;;9488:90;:::o;4248:129:2:-;1079:12;;;;;;;;;;;:31;;;;1095:15;:13;:15::i;:::-;1079:31;:47;;;;1115:11;;;;;;;;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1186:19;1209:12;;;;;;;;;;;1208:13;1186:35;;1232:14;1228:83;;;1272:4;1257:12;;:19;;;;;;;;;;;;;;;;;;1299:4;1285:11;;:18;;;;;;;;;;;;;;;;;;1228:83;4306:26:::1;:24;:26::i;:::-;4343;:24;:26::i;:::-;1333:14:::0;1329:57;;;1373:5;1358:12;;:20;;;;;;;;;;;;;;;;;;1329:57;4248:129;:::o;3783:345:5:-;3869:7;3968:1;3964;:5;3971:12;3956:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3995:9;4011:1;4007;:5;;;;;;3995:17;;4119:1;4112:8;;;3783:345;;;;;:::o;25610:263:3:-;25691:7;25700;25720:12;25735:35;25764:5;25735:24;25747:11;25735:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;25720:50;;25781:23;25807:17;25819:4;25807:7;:11;;:17;;;;:::i;:::-;25781:43;;25843:15;25860:4;25835:30;;;;;;25610:263;;;;;:::o;25881:334::-;25976:7;25985;25994;26014:15;26032:24;26044:11;26032:7;:11;;:24;;;;:::i;:::-;26014:42;;26067:12;26082:21;26091:11;26082:4;:8;;:21;;;;:::i;:::-;26067:36;;26114:23;26140:17;26152:4;26140:7;:11;;:17;;;;:::i;:::-;26114:43;;26176:7;26185:15;26202:4;26168:39;;;;;;;;;25881:334;;;;;;;:::o;10140:92::-;;;;:::o;26394:581::-;26444:7;26453;26473:15;26491:7;;26473:25;;26509:15;26527:12;;26509:30;;26561:9;26573:1;26561:13;;26556:294;26580:9;:16;;;;26576:1;:20;26556:294;;;26646:7;26622;:21;26630:9;26640:1;26630:12;;;;;;;;;;;;;;;;;;;;;;;;;26622:21;;;;;;;;;;;;;;;;:31;:66;;;;26681:7;26657;:21;26665:9;26675:1;26665:12;;;;;;;;;;;;;;;;;;;;;;;;;26657:21;;;;;;;;;;;;;;;;:31;26622:66;26618:102;;;26698:7;;26707:12;;26690:30;;;;;;;;;26618:102;26745:34;26757:7;:21;26765:9;26775:1;26765:12;;;;;;;;;;;;;;;;;;;;;;;;;26757:21;;;;;;;;;;;;;;;;26745:7;:11;;:34;;;;:::i;:::-;26735:44;;26804:34;26816:7;:21;26824:9;26834:1;26824:12;;;;;;;;;;;;;;;;;;;;;;;;;26816:21;;;;;;;;;;;;;;;;26804:7;:11;;:34;;;;:::i;:::-;26794:44;;26598:3;;;;;;;26556:294;;;;26874:25;26886:12;;26874:7;;:11;;:25;;;;:::i;:::-;26864:7;:35;26860:71;;;26909:7;;26918:12;;26901:30;;;;;;;;26860:71;26950:7;26959;26942:25;;;;;;26394:581;;;:::o;2950:69:2:-;1079:12;;;;;;;;;;;:31;;;;1095:15;:13;:15::i;:::-;1079:31;:47;;;;1115:11;;;;;;;;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1186:19;1209:12;;;;;;;;;;;1208:13;1186:35;;1232:14;1228:83;;;1272:4;1257:12;;:19;;;;;;;;;;;;;;;;;;1299:4;1285:11;;:18;;;;;;;;;;;;;;;;;;1228:83;1333:14;1329:57;;;1373:5;1358:12;;:20;;;;;;;;;;;;;;;;;;1329:57;2950:69;:::o;2609:179:3:-;1079:12:2;;;;;;;;;;;:31;;;;1095:15;:13;:15::i;:::-;1079:31;:47;;;;1115:11;;;;;;;;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1186:19;1209:12;;;;;;;;;;;1208:13;1186:35;;1232:14;1228:83;;;1272:4;1257:12;;:19;;;;;;;;;;;;;;;;;;1299:4;1285:11;;:18;;;;;;;;;;;;;;;;;;1228:83;2725:4:3::1;2717:5;:12;;;;;;;;;;;;:::i;:::-;;2750:6;2740:7;:16;;;;;;;;;;;;:::i;:::-;;2779:1;2767:9;;:13;;;;;;;;;;;;;;;;;;1333:14:2::0;1329:57;;;1373:5;1358:12;;:20;;;;;;;;;;;;;;;;;;1329:57;2609:179:3;;;:::o;4385:202:2:-;1079:12;;;;;;;;;;;:31;;;;1095:15;:13;:15::i;:::-;1079:31;:47;;;;1115:11;;;;;;;;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1186:19;1209:12;;;;;;;;;;;1208:13;1186:35;;1232:14;1228:83;;;1272:4;1257:12;;:19;;;;;;;;;;;;;;;;;;1299:4;1285:11;;:18;;;;;;;;;;;;;;;;;;1228:83;4457:17:::1;4477:12;:10;:12::i;:::-;4457:32;;4509:9;4500:6;;:18;;;;;;;;;;;;;;;;;;4567:9;4534:43;;4563:1;4534:43;;;;;;;;;;;;1319:1;1333:14:::0;1329:57;;;1373:5;1358:12;;:20;;;;;;;;;;;;;;;;;;1329:57;4385:202;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://4056e26cd1bf62f8cb536689c5de82246c1202bf6f6706aa32d5e618ed155380
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.