Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 65 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 22406995 | 193 days ago | IN | 0 ETH | 0.00000731 | ||||
| Transfer | 22406990 | 193 days ago | IN | 0 ETH | 0.00000801 | ||||
| Transfer | 22406989 | 193 days ago | IN | 0 ETH | 0.00000848 | ||||
| Transfer | 22406982 | 193 days ago | IN | 0 ETH | 0.00000755 | ||||
| Transfer | 22406975 | 193 days ago | IN | 0 ETH | 0.00000805 | ||||
| Transfer | 22406973 | 193 days ago | IN | 0 ETH | 0.00000849 | ||||
| Transfer | 22406968 | 193 days ago | IN | 0 ETH | 0.00000887 | ||||
| Transfer | 22406965 | 193 days ago | IN | 0 ETH | 0.00000904 | ||||
| Transfer | 22406957 | 193 days ago | IN | 0 ETH | 0.00000851 | ||||
| Transfer | 22406954 | 193 days ago | IN | 0 ETH | 0.00000862 | ||||
| Transfer | 22406944 | 193 days ago | IN | 0 ETH | 0.00000794 | ||||
| Transfer | 22406942 | 193 days ago | IN | 0 ETH | 0.00000834 | ||||
| Transfer | 22406941 | 193 days ago | IN | 0 ETH | 0.00000842 | ||||
| Transfer | 22406934 | 193 days ago | IN | 0 ETH | 0.00000924 | ||||
| Transfer | 22406918 | 193 days ago | IN | 0 ETH | 0.00000797 | ||||
| Transfer | 22406910 | 193 days ago | IN | 0 ETH | 0.00000754 | ||||
| Transfer | 22406907 | 193 days ago | IN | 0 ETH | 0.00000746 | ||||
| Transfer | 22406906 | 193 days ago | IN | 0 ETH | 0.00000768 | ||||
| Transfer | 22406903 | 193 days ago | IN | 0 ETH | 0.00000758 | ||||
| Transfer | 22406900 | 193 days ago | IN | 0 ETH | 0.0000083 | ||||
| Transfer | 22406899 | 193 days ago | IN | 0 ETH | 0.00000873 | ||||
| Transfer | 22406893 | 193 days ago | IN | 0 ETH | 0.00000717 | ||||
| Transfer | 22406619 | 193 days ago | IN | 0 ETH | 0.00000765 | ||||
| Transfer | 22406608 | 193 days ago | IN | 0 ETH | 0.00000913 | ||||
| Transfer | 22406596 | 193 days ago | IN | 0 ETH | 0.00000713 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AnyswapV4ERC20
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-04-15
*/
/**
*Submitted for verification at BscScan.com on 2021-04-15
*/
/**
*Submitted for verification at BscScan.com on 2021-04-08
*/
/**
*Submitted for verification at hecoinfo.com on 2021-04-08
*/
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.2;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @dev Interface of the ERC2612 standard as defined in the EIP.
*
* Adds the {permit} method, which can be used to change one's
* {IERC20-allowance} without having to send a transaction, by signing a
* message. This allows users to spend tokens without having to hold Ether.
*
* See https://eips.ethereum.org/EIPS/eip-2612.
*/
interface IERC2612 {
/**
* @dev Returns the current ERC2612 nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
}
/// @dev Wrapped ERC-20 v10 (AnyswapV3ERC20) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an AnyswapV3ERC20 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from AnyswapV3ERC20, which will then burn AnyswapV3ERC20 token in your wallet. The amount of AnyswapV3ERC20 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IAnyswapV3ERC20 is IERC20, IERC2612 {
/// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
/// Emits {Approval} event.
/// Returns boolean value indicating whether operation succeeded.
/// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
/// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
/// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
/// Emits {Transfer} event.
/// Returns boolean value indicating whether operation succeeded.
/// Requirements:
/// - caller account must have at least `value` AnyswapV3ERC20 token.
/// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}
interface ITransferReceiver {
function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}
interface IApprovalReceiver {
function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != 0x0 && codehash != accountHash);
}
}
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint value) internal {
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function callOptionalReturn(IERC20 token, bytes memory data) private {
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
contract AnyswapV4ERC20 is IAnyswapV3ERC20 {
using SafeERC20 for IERC20;
string public name;
string public symbol;
uint8 public immutable override decimals;
address public immutable underlying;
bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
bytes32 public immutable DOMAIN_SEPARATOR;
/// @dev Records amount of AnyswapV3ERC20 token owned by account.
mapping (address => uint256) public override balanceOf;
uint256 private _totalSupply;
// init flag for setting immediate vault, needed for CREATE2 support
bool private _init;
// flag to enable/disable swapout vs vault.burn so multiple events are triggered
bool private _vaultOnly;
// configurable delay for timelock functions
uint public delay = 2*24*3600;
// set of minters, can be this bridge or other bridges
mapping(address => bool) public isMinter;
address[] public minters;
// primary controller of the token contract
address public vault;
address public pendingMinter;
uint public delayMinter;
address public pendingVault;
uint public delayVault;
uint public pendingDelay;
uint public delayDelay;
modifier onlyAuth() {
require(isMinter[msg.sender], "AnyswapV4ERC20: FORBIDDEN");
_;
}
modifier onlyVault() {
require(msg.sender == mpc(), "AnyswapV3ERC20: FORBIDDEN");
_;
}
function owner() public view returns (address) {
return mpc();
}
function mpc() public view returns (address) {
if (block.timestamp >= delayVault) {
return pendingVault;
}
return vault;
}
function setVaultOnly(bool enabled) external onlyVault {
_vaultOnly = enabled;
}
function initVault(address _vault) external onlyVault {
require(_init);
vault = _vault;
pendingVault = _vault;
isMinter[_vault] = true;
minters.push(_vault);
delayVault = block.timestamp;
_init = false;
}
function setMinter(address _auth) external onlyVault {
pendingMinter = _auth;
delayMinter = block.timestamp + delay;
}
function setVault(address _vault) external onlyVault {
pendingVault = _vault;
delayVault = block.timestamp + delay;
}
function applyVault() external onlyVault {
require(block.timestamp >= delayVault);
vault = pendingVault;
}
function applyMinter() external onlyVault {
require(block.timestamp >= delayMinter);
isMinter[pendingMinter] = true;
minters.push(pendingMinter);
}
// No time delay revoke minter emergency function
function revokeMinter(address _auth) external onlyVault {
isMinter[_auth] = false;
}
function getAllMinters() external view returns (address[] memory) {
return minters;
}
function changeVault(address newVault) external onlyVault returns (bool) {
require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
pendingVault = newVault;
delayVault = block.timestamp + delay;
emit LogChangeVault(vault, pendingVault, delayVault);
return true;
}
function changeMPCOwner(address newVault) public onlyVault returns (bool) {
require(newVault != address(0), "AnyswapV3ERC20: address(0x0)");
pendingVault = newVault;
delayVault = block.timestamp + delay;
emit LogChangeMPCOwner(vault, pendingVault, delayVault);
return true;
}
function mint(address to, uint256 amount) external onlyAuth returns (bool) {
_mint(to, amount);
return true;
}
function burn(address from, uint256 amount) external onlyAuth returns (bool) {
require(from != address(0), "AnyswapV3ERC20: address(0x0)");
_burn(from, amount);
return true;
}
function Swapin(bytes32 txhash, address account, uint256 amount) public onlyAuth returns (bool) {
_mint(account, amount);
emit LogSwapin(txhash, account, amount);
return true;
}
function Swapout(uint256 amount, address bindaddr) public returns (bool) {
require(!_vaultOnly, "AnyswapV4ERC20: onlyAuth");
require(bindaddr != address(0), "AnyswapV3ERC20: address(0x0)");
_burn(msg.sender, amount);
emit LogSwapout(msg.sender, bindaddr, amount);
return true;
}
/// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
/// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
mapping (address => uint256) public override nonces;
/// @dev Records number of AnyswapV3ERC20 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
mapping (address => mapping (address => uint256)) public override allowance;
event LogChangeVault(address indexed oldVault, address indexed newVault, uint indexed effectiveTime);
event LogChangeMPCOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveHeight);
event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
event LogSwapout(address indexed account, address indexed bindaddr, uint amount);
event LogAddAuth(address indexed auth, uint timestamp);
constructor(string memory _name, string memory _symbol, uint8 _decimals, address _underlying, address _vault) {
name = _name;
symbol = _symbol;
decimals = _decimals;
underlying = _underlying;
if (_underlying != address(0x0)) {
require(_decimals == IERC20(_underlying).decimals());
}
// Use init to allow for CREATE2 accross all chains
_init = true;
// Disable/Enable swapout for v1 tokens vs mint/burn for v3 tokens
_vaultOnly = false;
vault = _vault;
pendingVault = _vault;
delayVault = block.timestamp;
uint256 chainId;
assembly {chainId := chainid()}
DOMAIN_SEPARATOR = keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256(bytes("1")),
chainId,
address(this)));
}
/// @dev Returns the total supply of AnyswapV3ERC20 token as the ETH held in this contract.
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function depositWithPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
IERC20(underlying).permit(target, address(this), value, deadline, v, r, s);
IERC20(underlying).safeTransferFrom(target, address(this), value);
return _deposit(value, to);
}
function depositWithTransferPermit(address target, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to) external returns (uint) {
IERC20(underlying).transferWithPermit(target, address(this), value, deadline, v, r, s);
return _deposit(value, to);
}
function deposit() external returns (uint) {
uint _amount = IERC20(underlying).balanceOf(msg.sender);
IERC20(underlying).safeTransferFrom(msg.sender, address(this), _amount);
return _deposit(_amount, msg.sender);
}
function deposit(uint amount) external returns (uint) {
IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
return _deposit(amount, msg.sender);
}
function deposit(uint amount, address to) external returns (uint) {
IERC20(underlying).safeTransferFrom(msg.sender, address(this), amount);
return _deposit(amount, to);
}
function depositVault(uint amount, address to) external onlyVault returns (uint) {
return _deposit(amount, to);
}
function _deposit(uint amount, address to) internal returns (uint) {
require(underlying != address(0x0) && underlying != address(this));
_mint(to, amount);
return amount;
}
function withdraw() external returns (uint) {
return _withdraw(msg.sender, balanceOf[msg.sender], msg.sender);
}
function withdraw(uint amount) external returns (uint) {
return _withdraw(msg.sender, amount, msg.sender);
}
function withdraw(uint amount, address to) external returns (uint) {
return _withdraw(msg.sender, amount, to);
}
function withdrawVault(address from, uint amount, address to) external onlyVault returns (uint) {
return _withdraw(from, amount, to);
}
function _withdraw(address from, uint amount, address to) internal returns (uint) {
_burn(from, amount);
IERC20(underlying).safeTransfer(to, amount);
return amount;
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements
*
* - `to` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
balanceOf[account] += amount;
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
balanceOf[account] -= amount;
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
}
/// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token.
/// Emits {Approval} event.
/// Returns boolean value indicating whether operation succeeded.
function approve(address spender, uint256 value) external override returns (bool) {
// _approve(msg.sender, spender, value);
allowance[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
/// @dev Sets `value` as allowance of `spender` account over caller account's AnyswapV3ERC20 token,
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
/// Emits {Approval} event.
/// Returns boolean value indicating whether operation succeeded.
/// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
// _approve(msg.sender, spender, value);
allowance[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
}
/// @dev Sets `value` as allowance of `spender` account over `owner` account's AnyswapV3ERC20 token, given `owner` account's signed approval.
/// Emits {Approval} event.
/// Requirements:
/// - `deadline` must be timestamp in future.
/// - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
/// - the signature must use `owner` account's current nonce (see {nonces}).
/// - the signer cannot be zero address and must be `owner` account.
/// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
/// AnyswapV3ERC20 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");
bytes32 hashStruct = keccak256(
abi.encode(
PERMIT_TYPEHASH,
target,
spender,
value,
nonces[target]++,
deadline));
require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));
// _approve(owner, spender, value);
allowance[target][spender] = value;
emit Approval(target, spender, value);
}
function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override returns (bool) {
require(block.timestamp <= deadline, "AnyswapV3ERC20: Expired permit");
bytes32 hashStruct = keccak256(
abi.encode(
TRANSFER_TYPEHASH,
target,
to,
value,
nonces[target]++,
deadline));
require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));
require(to != address(0) || to != address(this));
uint256 balance = balanceOf[target];
require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");
balanceOf[target] = balance - value;
balanceOf[to] += value;
emit Transfer(target, to, value);
return true;
}
function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
bytes32 hash = keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR,
hashStruct));
address signer = ecrecover(hash, v, r, s);
return (signer != address(0) && signer == target);
}
function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal pure returns (bool) {
bytes32 hash = prefixed(hashStruct);
address signer = ecrecover(hash, v, r, s);
return (signer != address(0) && signer == target);
}
// Builds a prefixed hash to mimic the behavior of eth_sign.
function prefixed(bytes32 hash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
/// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`).
/// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
/// Emits {Transfer} event.
/// Returns boolean value indicating whether operation succeeded.
/// Requirements:
/// - caller account must have at least `value` AnyswapV3ERC20 token.
function transfer(address to, uint256 value) external override returns (bool) {
require(to != address(0) || to != address(this));
uint256 balance = balanceOf[msg.sender];
require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");
balanceOf[msg.sender] = balance - value;
balanceOf[to] += value;
emit Transfer(msg.sender, to, value);
return true;
}
/// @dev Moves `value` AnyswapV3ERC20 token from account (`from`) to account (`to`) using allowance mechanism.
/// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
/// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
/// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
/// unless allowance is set to `type(uint256).max`
/// Emits {Transfer} event.
/// Returns boolean value indicating whether operation succeeded.
/// Requirements:
/// - `from` account must have at least `value` balance of AnyswapV3ERC20 token.
/// - `from` account must have approved caller to spend at least `value` of AnyswapV3ERC20 token, unless `from` and caller are the same account.
function transferFrom(address from, address to, uint256 value) external override returns (bool) {
require(to != address(0) || to != address(this));
if (from != msg.sender) {
// _decreaseAllowance(from, msg.sender, value);
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max) {
require(allowed >= value, "AnyswapV3ERC20: request exceeds allowance");
uint256 reduced = allowed - value;
allowance[from][msg.sender] = reduced;
emit Approval(from, msg.sender, reduced);
}
}
uint256 balance = balanceOf[from];
require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");
balanceOf[from] = balance - value;
balanceOf[to] += value;
emit Transfer(from, to, value);
return true;
}
/// @dev Moves `value` AnyswapV3ERC20 token from caller's account to account (`to`),
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
/// A transfer to `address(0)` triggers an ETH withdraw matching the sent AnyswapV3ERC20 token in favor of caller.
/// Emits {Transfer} event.
/// Returns boolean value indicating whether operation succeeded.
/// Requirements:
/// - caller account must have at least `value` AnyswapV3ERC20 token.
/// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
require(to != address(0) || to != address(this));
uint256 balance = balanceOf[msg.sender];
require(balance >= value, "AnyswapV3ERC20: transfer amount exceeds balance");
balanceOf[msg.sender] = balance - value;
balanceOf[to] += value;
emit Transfer(msg.sender, to, value);
return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_underlying","type":"address"},{"internalType":"address","name":"_vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"auth","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LogAddAuth","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveHeight","type":"uint256"}],"name":"LogChangeMPCOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","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":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"applyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeMPCOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayMinter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"depositVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"depositWithTransferPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"initVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"revokeMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setVaultOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"underlying","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawVault","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60e06040526202a3006005553480156200001857600080fd5b5060405162002f7f38038062002f7f8339810160408190526200003b91620003c5565b8451620000509060009060208801906200023d565b508351620000669060019060208701906200023d565b507fff0000000000000000000000000000000000000000000000000000000000000060f884901b166080526001600160601b0319606083901b1660a0526001600160a01b038216156200013a57816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620000ed57600080fd5b505afa15801562000102573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000128919062000464565b60ff168360ff16146200013a57600080fd5b6004805461ff001960ff19909116600117169055600880546001600160a01b0383166001600160a01b03199182168117909255600b8054909116909117905542600c5560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90620001b29060009062000488565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c00160408051601f19818403018152919052805160209091012060c052506200057e945050505050565b8280546200024b906200052b565b90600052602060002090601f0160209004810192826200026f5760008555620002ba565b82601f106200028a57805160ff1916838001178555620002ba565b82800160010185558215620002ba579182015b82811115620002ba5782518255916020019190600101906200029d565b50620002c8929150620002cc565b5090565b5b80821115620002c85760008155600101620002cd565b80516001600160a01b0381168114620002fb57600080fd5b919050565b600082601f83011262000311578081fd5b81516001600160401b03808211156200032e576200032e62000568565b604051601f8301601f19908116603f0116810190828211818310171562000359576200035962000568565b8160405283815260209250868385880101111562000375578485fd5b8491505b8382101562000398578582018301518183018401529082019062000379565b83821115620003a957848385830101525b9695505050505050565b805160ff81168114620002fb57600080fd5b600080600080600060a08688031215620003dd578081fd5b85516001600160401b0380821115620003f4578283fd5b6200040289838a0162000300565b9650602088015191508082111562000418578283fd5b50620004278882890162000300565b9450506200043860408701620003b3565b92506200044860608701620002e3565b91506200045860808701620002e3565b90509295509295909350565b60006020828403121562000476578081fd5b6200048182620003b3565b9392505050565b8154600090819060028104600180831680620004a557607f831692505b6020808410821415620004c657634e487b7160e01b87526022600452602487fd5b818015620004dd5760018114620004ef576200051d565b60ff198616895284890196506200051d565b60008a815260209020885b86811015620005155781548b820152908501908301620004fa565b505084890196505b509498975050505050505050565b6002810460018216806200054057607f821691505b602082108114156200056257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160f81c60a05160601c60c05161297e620006016000396000818161048c0152611dda015260008181610590015281816113520152818161139e0152818161141e015281816116450152818161185a015281816118e301528181611bb001528181611ccd0152818161209601526120c901526000610453015261297e6000f3fe608060405234801561001057600080fd5b506004361061033f5760003560e01c80637ecebe00116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610774578063f954734e1461077c578063fbfa77cf1461078f578063fca3b5aa146107a25761033f565b8063d93f24451461072e578063dd62ed3e14610736578063ec126c77146107615761033f565b8063cae9ca51116100de578063cae9ca51146106ed578063cfbd488514610700578063d0e30db014610713578063d505accf1461071b5761033f565b8063bebbf4d0146106be578063c3081240146106d1578063c4b740f5146106da5761033f565b806395d89b4111610171578063a29dff721161014b578063a29dff721461066c578063a9059cbb14610675578063aa271e1a14610688578063b6b55f25146106ab5761033f565b806395d89b411461063c5780639dc29fac14610644578063a045442c146106575761033f565b80637ecebe00146105d257806381a37c18146105f25780638623ec7b1461060557806387689e28146106185780638da5cb5b1461062157806391c5df49146106295761033f565b80633ccfd60b1161029257806360e232a9116102305780636a42b8f81161020a5780636a42b8f81461056f5780636e553f65146105785780636f307dc31461058b57806370a08231146105b25761033f565b806360e232a914610536578063628d6cba146105495780636817031b1461055c5761033f565b80634ca8f0ed1161026c5780634ca8f0ed146104dc57806352113ba7146104e55780635f9b105d14610510578063605629d6146105235761033f565b80633ccfd60b146104ae5780634000aea0146104b657806340c10f19146104c95761033f565b806318160ddd116102ff5780632ebe3fbb116102d95780632ebe3fbb1461041457806330adf81f14610427578063313ce5671461044e5780633644e515146104875761033f565b806318160ddd146103e657806323b872dd146103ee5780632e1a7d4d146104015761033f565b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306fdde03146103a4578063095ea7b3146103b95780630d707df8146103dc575b600080fd5b610357610352366004612443565b6107b5565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f3660046125f5565b61080b565b6103ac61081f565b6040516103619190612709565b6103cc6103c736600461241a565b6108ad565b6040519015158152602001610361565b6103e4610907565b005b6103576109c3565b6103cc6103fc366004612376565b6109ca565b61035761040f3660046125c5565b610bb5565b6103e461042236600461232a565b610bca565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104757f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610361565b6103577f000000000000000000000000000000000000000000000000000000000000000081565b610357610ca1565b6103cc6104c436600461247e565b610cc2565b6103cc6104d736600461241a565b610e1b565b610357600d5481565b600b546104f8906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103cc61051e36600461232a565b610e5d565b6103cc6105313660046123b1565b610f31565b6103cc61054436600461232a565b611141565b6103cc6105573660046125f5565b611215565b6103e461056a36600461232a565b6112dd565b61035760055481565b6103576105863660046125f5565b611343565b6104f87f000000000000000000000000000000000000000000000000000000000000000081565b6103576105c036600461232a565b60026020526000908152604090205481565b6103576105e036600461232a565b600f6020526000908152604090205481565b610357610600366004612500565b611384565b6104f86106133660046125c5565b61145e565b610357600c5481565b6104f8611488565b6009546104f8906001600160a01b031681565b6103ac611492565b6103cc61065236600461241a565b61149f565b61065f6114fe565b60405161036191906126bc565b610357600e5481565b6103cc61068336600461241a565b611560565b6103cc61069636600461232a565b60066020526000908152604090205460ff1681565b6103576106b93660046125c5565b611636565b6103576106cc3660046125f5565b611677565b610357600a5481565b6103e46106e8366004612569565b6116b1565b6103cc6106fb36600461247e565b611703565b6103e461070e36600461232a565b6117df565b610357611838565b6103e46107293660046123b1565b61191b565b6103e4611a89565b610357610744366004612344565b601060209081526000928352604080842090915290825290205481565b6103cc61076f3660046125a1565b611af4565b6104f8611b69565b61035761078a366004612500565b611b96565b6008546104f8906001600160a01b031681565b6103e46107b036600461232a565b611c4e565b60006107bf611b69565b6001600160a01b0316336001600160a01b0316146107f85760405162461bcd60e51b81526004016107ef9061273c565b60405180910390fd5b610803848484611cb4565b949350505050565b6000610818338484611cb4565b9392505050565b6000805461082c9061288b565b80601f01602080910402602001604051908101604052809291908181526020018280546108589061288b565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612929833981519152906108f69086815260200190565b60405180910390a350600192915050565b61090f611b69565b6001600160a01b0316336001600160a01b03161461093f5760405162461bcd60e51b81526004016107ef9061273c565b600a5442101561094e57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b6003545b90565b60006001600160a01b0383161515806109ec57506001600160a01b0383163014155b6109f557600080fd5b6001600160a01b0384163314610aef576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610aed5782811015610a945760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ef565b6000610aa08483612848565b6001600160a01b03871660008181526010602090815260408083203380855290835292819020859055518481529394509092600080516020612929833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b285760405162461bcd60e51b81526004016107ef906127aa565b610b328382612848565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b68908490612830565b92505081905550836001600160a01b0316856001600160a01b031660008051602061290983398151915285604051610ba291815260200190565b60405180910390a3506001949350505050565b6000610bc2338333611cb4565b90505b919050565b610bd2611b69565b6001600160a01b0316336001600160a01b031614610c025760405162461bcd60e51b81526004016107ef9061273c565b60045460ff16610c1157600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610cbd9181611cb4565b905090565b60006001600160a01b038516151580610ce457506001600160a01b0385163014155b610ced57600080fd5b3360009081526002602052604090205484811015610d1d5760405162461bcd60e51b81526004016107ef906127aa565b610d278582612848565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d5a908490612830565b90915550506040518581526001600160a01b0387169033906000805160206129098339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610dbf903390899089908990600401612674565b602060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190612585565b9695505050505050565b3360009081526006602052604081205460ff16610e4a5760405162461bcd60e51b81526004016107ef906127f9565b610e548383611cfc565b50600192915050565b6000610e67611b69565b6001600160a01b0316336001600160a01b031614610e975760405162461bcd60e51b81526004016107ef9061273c565b6001600160a01b038216610ebd5760405162461bcd60e51b81526004016107ef90612773565b600b80546001600160a01b0319166001600160a01b038416179055600554610ee59042612830565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a4506001919050565b600084421115610f835760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610fd0836128c6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110318982878787611dca565b8061104457506110448982878787611eba565b61104d57600080fd5b6001600160a01b03881615158061106d57506001600160a01b0388163014155b61107657600080fd5b6001600160a01b038916600090815260026020526040902054878110156110af5760405162461bcd60e51b81526004016107ef906127aa565b6110b98882612848565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906110ef908490612830565b92505081905550886001600160a01b03168a6001600160a01b03166000805160206129098339815191528a60405161112991815260200190565b60405180910390a35060019998505050505050505050565b600061114b611b69565b6001600160a01b0316336001600160a01b03161461117b5760405162461bcd60e51b81526004016107ef9061273c565b6001600160a01b0382166111a15760405162461bcd60e51b81526004016107ef90612773565b600b80546001600160a01b0319166001600160a01b0384161790556005546111c99042612830565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112705760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c7941757468000000000000000060448201526064016107ef565b6001600160a01b0382166112965760405162461bcd60e51b81526004016107ef90612773565b6112a03384611f4f565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108f6565b6112e5611b69565b6001600160a01b0316336001600160a01b0316146113155760405162461bcd60e51b81526004016107ef9061273c565b600b80546001600160a01b0319166001600160a01b03831617905560055461133d9042612830565b600c5550565b600061137a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086612021565b6108188383612092565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d505accf906113df908b9030908c908c908c908c908c90600401612633565b600060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b506114489250506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016905089308a612021565b6114528783612092565b98975050505050505050565b6007818154811061146e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cbd611b69565b6001805461082c9061288b565b3360009081526006602052604081205460ff166114ce5760405162461bcd60e51b81526004016107ef906127f9565b6001600160a01b0383166114f45760405162461bcd60e51b81526004016107ef90612773565b610e548383611f4f565b6060600780548060200260200160405190810160405280929190818152602001828054801561155657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611538575b5050505050905090565b60006001600160a01b03831615158061158257506001600160a01b0383163014155b61158b57600080fd5b33600090815260026020526040902054828110156115bb5760405162461bcd60e51b81526004016107ef906127aa565b6115c58382612848565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906115f8908490612830565b90915550506040518381526001600160a01b038516903390600080516020612909833981519152906020015b60405180910390a35060019392505050565b600061166d6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085612021565b610bc28233612092565b6000611681611b69565b6001600160a01b0316336001600160a01b03161461137a5760405162461bcd60e51b81526004016107ef9061273c565b6116b9611b69565b6001600160a01b0316336001600160a01b0316146116e95760405162461bcd60e51b81526004016107ef9061273c565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b038916808552925280832087905551919290916000805160206129298339815191529061174c9088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f90611784903390889088908890600401612674565b602060405180830381600087803b15801561179e57600080fd5b505af11580156117b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d69190612585565b95945050505050565b6117e7611b69565b6001600160a01b0316336001600160a01b0316146118175760405162461bcd60e51b81526004016107ef9061273c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d491906125dd565b905061190b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612021565b6119158133612092565b91505090565b8342111561196b5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119b8836128c6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a198882868686611dca565b80611a2c5750611a2c8882868686611eba565b611a3557600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a90559051898152600080516020612929833981519152910160405180910390a35050505050505050565b611a91611b69565b6001600160a01b0316336001600160a01b031614611ac15760405162461bcd60e51b81526004016107ef9061273c565b600c54421015611ad057600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611b235760405162461bcd60e51b81526004016107ef906127f9565b611b2d8383611cfc565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161162491815260200190565b6000600c544210611b865750600b546001600160a01b03166109c7565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063605629d690611bf1908b9030908c908c908c908c908c90600401612633565b602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190612585565b506114528783612092565b611c56611b69565b6001600160a01b0316336001600160a01b031614611c865760405162461bcd60e51b81526004016107ef9061273c565b600980546001600160a01b0319166001600160a01b038316179055600554611cae9042612830565b600a5550565b6000611cc08484611f4f565b611cf46001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838561210f565b509092915050565b6001600160a01b038216611d525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ef565b8060036000828254611d649190612830565b90915550506001600160a01b03821660009081526002602052604081208054839290611d91908490612830565b90915550506040518181526001600160a01b03831690600090600080516020612909833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f0000000000000000000000000000000000000000000000000000000000000000602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611e79573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114525750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611f14866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611e57565b6001600160a01b038216611faf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ef565b6001600160a01b03821660009081526002602052604081208054839290611fd7908490612848565b925050819055508060036000828254611ff09190612848565b90915550506040518181526000906001600160a01b0384169060008051602061290983398151915290602001611dbe565b6040516001600160a01b038085166024830152831660448201526064810182905261208c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612144565b50505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158015906120f557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014155b6120fe57600080fd5b6121088284611cfc565b5090919050565b6040516001600160a01b03831660248201526044810182905261213f90849063a9059cbb60e01b90606401612055565b505050565b612156826001600160a01b03166122cb565b6121a25760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ef565b600080836001600160a01b0316836040516121bd9190612617565b6000604051808303816000865af19150503d80600081146121fa576040519150601f19603f3d011682016040523d82523d6000602084013e6121ff565b606091505b5091509150816122515760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ef565b80511561208c578080602001905181019061226c9190612585565b61208c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ef565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108035750141592915050565b80356001600160a01b0381168114610bc557600080fd5b803560ff81168114610bc557600080fd5b60006020828403121561233b578081fd5b61081882612302565b60008060408385031215612356578081fd5b61235f83612302565b915061236d60208401612302565b90509250929050565b60008060006060848603121561238a578081fd5b61239384612302565b92506123a160208501612302565b9150604084013590509250925092565b600080600080600080600060e0888a0312156123cb578283fd5b6123d488612302565b96506123e260208901612302565b955060408801359450606088013593506123fe60808901612319565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561242c578182fd5b61243583612302565b946020939093013593505050565b600080600060608486031215612457578283fd5b61246084612302565b92506020840135915061247560408501612302565b90509250925092565b60008060008060608587031215612493578384fd5b61249c85612302565b935060208501359250604085013567ffffffffffffffff808211156124bf578384fd5b818701915087601f8301126124d2578384fd5b8135818111156124e0578485fd5b8860208285010111156124f1578485fd5b95989497505060200194505050565b600080600080600080600060e0888a03121561251a578283fd5b61252388612302565b9650602088013595506040880135945061253f60608901612319565b93506080880135925060a0880135915061255b60c08901612302565b905092959891949750929550565b60006020828403121561257a578081fd5b8135610818816128f7565b600060208284031215612596578081fd5b8151610818816128f7565b6000806000606084860312156125b5578283fd5b833592506123a160208501612302565b6000602082840312156125d6578081fd5b5035919050565b6000602082840312156125ee578081fd5b5051919050565b60008060408385031215612607578182fd5b8235915061236d60208401612302565b6000825161262981846020870161285f565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156126fd5783516001600160a01b0316835292840192918401916001016126d8565b50909695505050505050565b600060208252825180602084015261272881604085016020870161285f565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b60008219821115612843576128436128e1565b500190565b60008282101561285a5761285a6128e1565b500390565b60005b8381101561287a578181015183820152602001612862565b8381111561208c5750506000910152565b60028104600182168061289f57607f821691505b602082108114156128c057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128da576128da6128e1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461290557600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212209e817beecb84d00bcd9dc2d88cbed72ee2b5da3aa984b4de0006c7cd9256da5964736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000000000000000000000000000000000000000000e44616920537461626c65636f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034441490000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061033f5760003560e01c80637ecebe00116101b8578063bebbf4d011610104578063d93f2445116100a2578063f75c26641161007c578063f75c266414610774578063f954734e1461077c578063fbfa77cf1461078f578063fca3b5aa146107a25761033f565b8063d93f24451461072e578063dd62ed3e14610736578063ec126c77146107615761033f565b8063cae9ca51116100de578063cae9ca51146106ed578063cfbd488514610700578063d0e30db014610713578063d505accf1461071b5761033f565b8063bebbf4d0146106be578063c3081240146106d1578063c4b740f5146106da5761033f565b806395d89b4111610171578063a29dff721161014b578063a29dff721461066c578063a9059cbb14610675578063aa271e1a14610688578063b6b55f25146106ab5761033f565b806395d89b411461063c5780639dc29fac14610644578063a045442c146106575761033f565b80637ecebe00146105d257806381a37c18146105f25780638623ec7b1461060557806387689e28146106185780638da5cb5b1461062157806391c5df49146106295761033f565b80633ccfd60b1161029257806360e232a9116102305780636a42b8f81161020a5780636a42b8f81461056f5780636e553f65146105785780636f307dc31461058b57806370a08231146105b25761033f565b806360e232a914610536578063628d6cba146105495780636817031b1461055c5761033f565b80634ca8f0ed1161026c5780634ca8f0ed146104dc57806352113ba7146104e55780635f9b105d14610510578063605629d6146105235761033f565b80633ccfd60b146104ae5780634000aea0146104b657806340c10f19146104c95761033f565b806318160ddd116102ff5780632ebe3fbb116102d95780632ebe3fbb1461041457806330adf81f14610427578063313ce5671461044e5780633644e515146104875761033f565b806318160ddd146103e657806323b872dd146103ee5780632e1a7d4d146104015761033f565b806239d6ec14610344578062bf26f41461036a578062f714ce1461039157806306fdde03146103a4578063095ea7b3146103b95780630d707df8146103dc575b600080fd5b610357610352366004612443565b6107b5565b6040519081526020015b60405180910390f35b6103577f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b61035761039f3660046125f5565b61080b565b6103ac61081f565b6040516103619190612709565b6103cc6103c736600461241a565b6108ad565b6040519015158152602001610361565b6103e4610907565b005b6103576109c3565b6103cc6103fc366004612376565b6109ca565b61035761040f3660046125c5565b610bb5565b6103e461042236600461232a565b610bca565b6103577f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104757f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610361565b6103577f320c79085b3f89236dbbdd5caf1f6cb8a597458d1973cfd329cd8679ae34bbe581565b610357610ca1565b6103cc6104c436600461247e565b610cc2565b6103cc6104d736600461241a565b610e1b565b610357600d5481565b600b546104f8906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b6103cc61051e36600461232a565b610e5d565b6103cc6105313660046123b1565b610f31565b6103cc61054436600461232a565b611141565b6103cc6105573660046125f5565b611215565b6103e461056a36600461232a565b6112dd565b61035760055481565b6103576105863660046125f5565b611343565b6104f87f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b6103576105c036600461232a565b60026020526000908152604090205481565b6103576105e036600461232a565b600f6020526000908152604090205481565b610357610600366004612500565b611384565b6104f86106133660046125c5565b61145e565b610357600c5481565b6104f8611488565b6009546104f8906001600160a01b031681565b6103ac611492565b6103cc61065236600461241a565b61149f565b61065f6114fe565b60405161036191906126bc565b610357600e5481565b6103cc61068336600461241a565b611560565b6103cc61069636600461232a565b60066020526000908152604090205460ff1681565b6103576106b93660046125c5565b611636565b6103576106cc3660046125f5565b611677565b610357600a5481565b6103e46106e8366004612569565b6116b1565b6103cc6106fb36600461247e565b611703565b6103e461070e36600461232a565b6117df565b610357611838565b6103e46107293660046123b1565b61191b565b6103e4611a89565b610357610744366004612344565b601060209081526000928352604080842090915290825290205481565b6103cc61076f3660046125a1565b611af4565b6104f8611b69565b61035761078a366004612500565b611b96565b6008546104f8906001600160a01b031681565b6103e46107b036600461232a565b611c4e565b60006107bf611b69565b6001600160a01b0316336001600160a01b0316146107f85760405162461bcd60e51b81526004016107ef9061273c565b60405180910390fd5b610803848484611cb4565b949350505050565b6000610818338484611cb4565b9392505050565b6000805461082c9061288b565b80601f01602080910402602001604051908101604052809291908181526020018280546108589061288b565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b505050505081565b3360008181526010602090815260408083206001600160a01b03871680855292528083208590555191929091600080516020612929833981519152906108f69086815260200190565b60405180910390a350600192915050565b61090f611b69565b6001600160a01b0316336001600160a01b03161461093f5760405162461bcd60e51b81526004016107ef9061273c565b600a5442101561094e57600080fd5b600980546001600160a01b039081166000908152600660205260408120805460ff1916600190811790915592546007805494850181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890920180546001600160a01b03191692909116919091179055565b6003545b90565b60006001600160a01b0383161515806109ec57506001600160a01b0383163014155b6109f557600080fd5b6001600160a01b0384163314610aef576001600160a01b03841660009081526010602090815260408083203384529091529020546000198114610aed5782811015610a945760405162461bcd60e51b815260206004820152602960248201527f416e7973776170563345524332303a2072657175657374206578636565647320604482015268616c6c6f77616e636560b81b60648201526084016107ef565b6000610aa08483612848565b6001600160a01b03871660008181526010602090815260408083203380855290835292819020859055518481529394509092600080516020612929833981519152910160405180910390a3505b505b6001600160a01b03841660009081526002602052604090205482811015610b285760405162461bcd60e51b81526004016107ef906127aa565b610b328382612848565b6001600160a01b038087166000908152600260205260408082209390935590861681529081208054859290610b68908490612830565b92505081905550836001600160a01b0316856001600160a01b031660008051602061290983398151915285604051610ba291815260200190565b60405180910390a3506001949350505050565b6000610bc2338333611cb4565b90505b919050565b610bd2611b69565b6001600160a01b0316336001600160a01b031614610c025760405162461bcd60e51b81526004016107ef9061273c565b60045460ff16610c1157600080fd5b600880546001600160a01b039092166001600160a01b03199283168117909155600b80548316821790556000818152600660205260408120805460ff1990811660019081179092556007805492830181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805490931690911790915542600c55600480549091169055565b336000818152600260205260408120549091610cbd9181611cb4565b905090565b60006001600160a01b038516151580610ce457506001600160a01b0385163014155b610ced57600080fd5b3360009081526002602052604090205484811015610d1d5760405162461bcd60e51b81526004016107ef906127aa565b610d278582612848565b33600090815260026020526040808220929092556001600160a01b03881681529081208054879290610d5a908490612830565b90915550506040518581526001600160a01b0387169033906000805160206129098339815191529060200160405180910390a3604051635260769b60e11b81526001600160a01b0387169063a4c0ed3690610dbf903390899089908990600401612674565b602060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e119190612585565b9695505050505050565b3360009081526006602052604081205460ff16610e4a5760405162461bcd60e51b81526004016107ef906127f9565b610e548383611cfc565b50600192915050565b6000610e67611b69565b6001600160a01b0316336001600160a01b031614610e975760405162461bcd60e51b81526004016107ef9061273c565b6001600160a01b038216610ebd5760405162461bcd60e51b81526004016107ef90612773565b600b80546001600160a01b0319166001600160a01b038416179055600554610ee59042612830565b600c819055600b546008546040516001600160a01b0392831692909116907f1d065115f314fb9bad9557bd5460b9e3c66f7223b1dd04e73e828f0bb5afe89f90600090a4506001919050565b600084421115610f835760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0388166000908152600f6020526040812080547f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd59918b918b918b919086610fd0836128c6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012090506110318982878787611dca565b8061104457506110448982878787611eba565b61104d57600080fd5b6001600160a01b03881615158061106d57506001600160a01b0388163014155b61107657600080fd5b6001600160a01b038916600090815260026020526040902054878110156110af5760405162461bcd60e51b81526004016107ef906127aa565b6110b98882612848565b6001600160a01b03808c1660009081526002602052604080822093909355908b16815290812080548a92906110ef908490612830565b92505081905550886001600160a01b03168a6001600160a01b03166000805160206129098339815191528a60405161112991815260200190565b60405180910390a35060019998505050505050505050565b600061114b611b69565b6001600160a01b0316336001600160a01b03161461117b5760405162461bcd60e51b81526004016107ef9061273c565b6001600160a01b0382166111a15760405162461bcd60e51b81526004016107ef90612773565b600b80546001600160a01b0319166001600160a01b0384161790556005546111c99042612830565b600c819055600b546008546040516001600160a01b0392831692909116907f5c364079e7102c27c608f9b237c735a1b7bfa0b67f27c2ad26bad447bf965cac90600090a4506001919050565b600454600090610100900460ff16156112705760405162461bcd60e51b815260206004820152601860248201527f416e7973776170563445524332303a206f6e6c7941757468000000000000000060448201526064016107ef565b6001600160a01b0382166112965760405162461bcd60e51b81526004016107ef90612773565b6112a03384611f4f565b6040518381526001600160a01b0383169033907f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c888906020016108f6565b6112e5611b69565b6001600160a01b0316336001600160a01b0316146113155760405162461bcd60e51b81526004016107ef9061273c565b600b80546001600160a01b0319166001600160a01b03831617905560055461133d9042612830565b600c5550565b600061137a6001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16333086612021565b6108188383612092565b60405163d505accf60e01b81526000906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f169063d505accf906113df908b9030908c908c908c908c908c90600401612633565b600060405180830381600087803b1580156113f957600080fd5b505af115801561140d573d6000803e3d6000fd5b506114489250506001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16905089308a612021565b6114528783612092565b98975050505050505050565b6007818154811061146e57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610cbd611b69565b6001805461082c9061288b565b3360009081526006602052604081205460ff166114ce5760405162461bcd60e51b81526004016107ef906127f9565b6001600160a01b0383166114f45760405162461bcd60e51b81526004016107ef90612773565b610e548383611f4f565b6060600780548060200260200160405190810160405280929190818152602001828054801561155657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611538575b5050505050905090565b60006001600160a01b03831615158061158257506001600160a01b0383163014155b61158b57600080fd5b33600090815260026020526040902054828110156115bb5760405162461bcd60e51b81526004016107ef906127aa565b6115c58382612848565b33600090815260026020526040808220929092556001600160a01b038616815290812080548592906115f8908490612830565b90915550506040518381526001600160a01b038516903390600080516020612909833981519152906020015b60405180910390a35060019392505050565b600061166d6001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16333085612021565b610bc28233612092565b6000611681611b69565b6001600160a01b0316336001600160a01b03161461137a5760405162461bcd60e51b81526004016107ef9061273c565b6116b9611b69565b6001600160a01b0316336001600160a01b0316146116e95760405162461bcd60e51b81526004016107ef9061273c565b600480549115156101000261ff0019909216919091179055565b3360008181526010602090815260408083206001600160a01b038916808552925280832087905551919290916000805160206129298339815191529061174c9088815260200190565b60405180910390a360405162ba451f60e01b81526001600160a01b0386169062ba451f90611784903390889088908890600401612674565b602060405180830381600087803b15801561179e57600080fd5b505af11580156117b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d69190612585565b95945050505050565b6117e7611b69565b6001600160a01b0316336001600160a01b0316146118175760405162461bcd60e51b81526004016107ef9061273c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6040516370a0823160e01b815233600482015260009081906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16906370a082319060240160206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d491906125dd565b905061190b6001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16333084612021565b6119158133612092565b91505090565b8342111561196b5760405162461bcd60e51b815260206004820152601e60248201527f416e7973776170563345524332303a2045787069726564207065726d6974000060448201526064016107ef565b6001600160a01b0387166000908152600f6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866119b8836128c6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050611a198882868686611dca565b80611a2c5750611a2c8882868686611eba565b611a3557600080fd5b6001600160a01b038881166000818152601060209081526040808320948c16808452948252918290208a90559051898152600080516020612929833981519152910160405180910390a35050505050505050565b611a91611b69565b6001600160a01b0316336001600160a01b031614611ac15760405162461bcd60e51b81526004016107ef9061273c565b600c54421015611ad057600080fd5b600b54600880546001600160a01b0319166001600160a01b03909216919091179055565b3360009081526006602052604081205460ff16611b235760405162461bcd60e51b81526004016107ef906127f9565b611b2d8383611cfc565b826001600160a01b0316847f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d618460405161162491815260200190565b6000600c544210611b865750600b546001600160a01b03166109c7565b506008546001600160a01b031690565b60405163302b14eb60e11b81526000906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f169063605629d690611bf1908b9030908c908c908c908c908c90600401612633565b602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190612585565b506114528783612092565b611c56611b69565b6001600160a01b0316336001600160a01b031614611c865760405162461bcd60e51b81526004016107ef9061273c565b600980546001600160a01b0319166001600160a01b038316179055600554611cae9042612830565b600a5550565b6000611cc08484611f4f565b611cf46001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16838561210f565b509092915050565b6001600160a01b038216611d525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107ef565b8060036000828254611d649190612830565b90915550506001600160a01b03821660009081526002602052604081208054839290611d91908490612830565b90915550506040518181526001600160a01b03831690600090600080516020612909833981519152906020015b60405180910390a35050565b60405161190160f01b60208201527f320c79085b3f89236dbbdd5caf1f6cb8a597458d1973cfd329cd8679ae34bbe5602282015260428101859052600090819060620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0015b6020604051602081039080840390855afa158015611e79573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906114525750876001600160a01b0316816001600160a01b03161498975050505050505050565b600080611f14866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6040805160008082526020820180845284905260ff89169282019290925260608101879052608081018690529192509060019060a001611e57565b6001600160a01b038216611faf5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016107ef565b6001600160a01b03821660009081526002602052604081208054839290611fd7908490612848565b925050819055508060036000828254611ff09190612848565b90915550506040518181526000906001600160a01b0384169060008051602061290983398151915290602001611dbe565b6040516001600160a01b038085166024830152831660448201526064810182905261208c9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612144565b50505050565b60007f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b0316158015906120f557507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b03163014155b6120fe57600080fd5b6121088284611cfc565b5090919050565b6040516001600160a01b03831660248201526044810182905261213f90849063a9059cbb60e01b90606401612055565b505050565b612156826001600160a01b03166122cb565b6121a25760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016107ef565b600080836001600160a01b0316836040516121bd9190612617565b6000604051808303816000865af19150503d80600081146121fa576040519150601f19603f3d011682016040523d82523d6000602084013e6121ff565b606091505b5091509150816122515760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016107ef565b80511561208c578080602001905181019061226c9190612585565b61208c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107ef565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906108035750141592915050565b80356001600160a01b0381168114610bc557600080fd5b803560ff81168114610bc557600080fd5b60006020828403121561233b578081fd5b61081882612302565b60008060408385031215612356578081fd5b61235f83612302565b915061236d60208401612302565b90509250929050565b60008060006060848603121561238a578081fd5b61239384612302565b92506123a160208501612302565b9150604084013590509250925092565b600080600080600080600060e0888a0312156123cb578283fd5b6123d488612302565b96506123e260208901612302565b955060408801359450606088013593506123fe60808901612319565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561242c578182fd5b61243583612302565b946020939093013593505050565b600080600060608486031215612457578283fd5b61246084612302565b92506020840135915061247560408501612302565b90509250925092565b60008060008060608587031215612493578384fd5b61249c85612302565b935060208501359250604085013567ffffffffffffffff808211156124bf578384fd5b818701915087601f8301126124d2578384fd5b8135818111156124e0578485fd5b8860208285010111156124f1578485fd5b95989497505060200194505050565b600080600080600080600060e0888a03121561251a578283fd5b61252388612302565b9650602088013595506040880135945061253f60608901612319565b93506080880135925060a0880135915061255b60c08901612302565b905092959891949750929550565b60006020828403121561257a578081fd5b8135610818816128f7565b600060208284031215612596578081fd5b8151610818816128f7565b6000806000606084860312156125b5578283fd5b833592506123a160208501612302565b6000602082840312156125d6578081fd5b5035919050565b6000602082840312156125ee578081fd5b5051919050565b60008060408385031215612607578182fd5b8235915061236d60208401612302565b6000825161262981846020870161285f565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0385168152602081018490526060604082018190528101829052600082846080840137818301608090810191909152601f909201601f191601019392505050565b6020808252825182820181905260009190848201906040850190845b818110156126fd5783516001600160a01b0316835292840192918401916001016126d8565b50909695505050505050565b600060208252825180602084015261272881604085016020870161285f565b601f01601f19169190910160400192915050565b60208082526019908201527f416e7973776170563345524332303a20464f5242494444454e00000000000000604082015260600190565b6020808252601c908201527f416e7973776170563345524332303a2061646472657373283078302900000000604082015260600190565b6020808252602f908201527f416e7973776170563345524332303a207472616e7366657220616d6f756e742060408201526e657863656564732062616c616e636560881b606082015260800190565b60208082526019908201527f416e7973776170563445524332303a20464f5242494444454e00000000000000604082015260600190565b60008219821115612843576128436128e1565b500190565b60008282101561285a5761285a6128e1565b500390565b60005b8381101561287a578181015183820152602001612862565b8381111561208c5750506000910152565b60028104600182168061289f57607f821691505b602082108114156128c057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156128da576128da6128e1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461290557600080fd5b5056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a26469706673582212209e817beecb84d00bcd9dc2d88cbed72ee2b5da3aa984b4de0006c7cd9256da5964736f6c63430008020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251000000000000000000000000000000000000000000000000000000000000000e44616920537461626c65636f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034441490000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Dai Stablecoin
Arg [1] : _symbol (string): DAI
Arg [2] : _decimals (uint8): 18
Arg [3] : _underlying (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [4] : _vault (address): 0xfA9dA51631268A30Ec3DDd1CcBf46c65FAD99251
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [4] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [6] : 44616920537461626c65636f696e000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4441490000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
5939:19150:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15063:149;;;;;;:::i;:::-;;:::i;:::-;;;9504:25:1;;;9492:2;9477:18;15063:149:0;;;;;;;;6312:136;;6356:92;6312:136;;14929:126;;;;;;:::i;:::-;;:::i;6022:18::-;;;:::i;:::-;;;;;;;:::i;16786:265::-;;;;;;:::i;:::-;;:::i;:::-;;;9331:14:1;;9324:22;9306:41;;9294:2;9279:18;16786:265:0;9261:92:1;8708:179:0;;;:::i;:::-;;12898:102;;;:::i;23009:927::-;;;;;;:::i;:::-;;:::i;14799:122::-;;;;;;:::i;:::-;;:::i;7994:272::-;;;;;;:::i;:::-;;:::i;6168:137::-;;6210:95;6168:137;;6074:41;;;;;;;;15778:4:1;15766:17;;;15748:36;;15736:2;15721:18;6074:41:0;15703:87:1;6455:41:0;;;;;14665:126;;;:::i;24563:523::-;;;;;;:::i;:::-;;:::i;9827:133::-;;;;;;:::i;:::-;;:::i;7333:24::-;;;;;;7268:27;;;;;-1:-1:-1;;;;;7268:27:0;;;;;;-1:-1:-1;;;;;6555:32:1;;;6537:51;;6525:2;6510:18;7268:27:0;6492:102:1;9494:325:0;;;;;;:::i;:::-;;:::i;19384:938::-;;;;;;:::i;:::-;;:::i;9165:321::-;;;;;;:::i;:::-;;:::i;10400:328::-;;;;;;:::i;:::-;;:::i;8423:140::-;;;;;;:::i;:::-;;:::i;6943:29::-;;;;;;14117:193;;;;;;:::i;:::-;;:::i;6124:35::-;;;;;6576:54;;;;;;:::i;:::-;;;;;;;;;;;;;;11000:51;;;;;;:::i;:::-;;;;;;;;;;;;;;13008:349;;;;;;:::i;:::-;;:::i;7090:24::-;;;;;;:::i;:::-;;:::i;7302:22::-;;;;;;7631:78;;;:::i;7201:28::-;;;;;-1:-1:-1;;;;;7201:28:0;;;6047:20;;;:::i;9968:207::-;;;;;;:::i;:::-;;:::i;9056:99::-;;;:::i;:::-;;;;;;;:::i;7364:22::-;;;;;;21682:438;;;;;;:::i;:::-;;:::i;7043:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13920:189;;;;;;:::i;:::-;;:::i;14318:127::-;;;;;;:::i;:::-;;:::i;7236:23::-;;;;;;7892:94;;;;;;:::i;:::-;;:::i;17472:356::-;;;;;;:::i;:::-;;:::i;8950:98::-;;;;;;:::i;:::-;;:::i;13666:246::-;;;:::i;18661:715::-;;;;;;:::i;:::-;;:::i;8571:129::-;;;:::i;11221:75::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10183:209;;;;;;:::i;:::-;;:::i;7717:167::-;;;:::i;13365:293::-;;;;;;:::i;:::-;;:::i;7172:20::-;;;;;-1:-1:-1;;;;;7172:20:0;;;8274:141;;;;;;:::i;:::-;;:::i;15063:149::-;15153:4;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;;;;;;;;;15177:27:::1;15187:4;15193:6;15201:2;15177:9;:27::i;:::-;15170:34:::0;15063:149;-1:-1:-1;;;;15063:149:0:o;14929:126::-;14990:4;15014:33;15024:10;15036:6;15044:2;15014:9;:33::i;:::-;15007:40;14929:126;-1:-1:-1;;;14929:126:0:o;6022:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16786:265::-;16939:10;16862:4;16929:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;16929:30:0;;;;;;;;;;:38;;;16983:36;16862:4;;16929:30;;-1:-1:-1;;;;;;;;;;;16983:36:0;;;16962:5;9504:25:1;;9492:2;9477:18;;9459:76;16983:36:0;;;;;;;;-1:-1:-1;17039:4:0;16786:265;;;;:::o;8708:179::-;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;8788:11:::1;;8769:15;:30;;8761:39;;;::::0;::::1;;8820:13;::::0;;-1:-1:-1;;;;;8820:13:0;;::::1;8811:23;::::0;;;:8:::1;:23;::::0;;;;:30;;-1:-1:-1;;8811:30:0::1;8837:4;8811:30:::0;;::::1;::::0;;;8865:13;;8852:7:::1;:27:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;8852:27:0::1;8865:13:::0;;;::::1;8852:27:::0;;;::::1;::::0;;8708:179::o;12898:102::-;12980:12;;12898:102;;:::o;23009:927::-;23099:4;-1:-1:-1;;;;;23124:16:0;;;;;:39;;-1:-1:-1;;;;;;23144:19:0;;23158:4;23144:19;;23124:39;23116:48;;;;;;-1:-1:-1;;;;;23179:18:0;;23187:10;23179:18;23175:477;;-1:-1:-1;;;;;23293:15:0;;23275;23293;;;:9;:15;;;;;;;;23309:10;23293:27;;;;;;;;-1:-1:-1;;23339:28:0;;23335:306;;23407:5;23396:7;:16;;23388:70;;;;-1:-1:-1;;;23388:70:0;;14085:2:1;23388:70:0;;;14067:21:1;14124:2;14104:18;;;14097:30;14163:34;14143:18;;;14136:62;-1:-1:-1;;;14214:18:1;;;14207:39;14263:19;;23388:70:0;14057:231:1;23388:70:0;23477:15;23495;23505:5;23495:7;:15;:::i;:::-;-1:-1:-1;;;;;23529:15:0;;;;;;:9;:15;;;;;;;;23545:10;23529:27;;;;;;;;;;:37;;;23590:35;9504:25:1;;;23529:37:0;;-1:-1:-1;23545:10:0;;-1:-1:-1;;;;;;;;;;;23590:35:0;9477:18:1;23590:35:0;;;;;;;23335:306;;23175:477;;-1:-1:-1;;;;;23682:15:0;;23664;23682;;;:9;:15;;;;;;23716:16;;;;23708:76;;;;-1:-1:-1;;;23708:76:0;;;;;;;:::i;:::-;23815:15;23825:5;23815:7;:15;:::i;:::-;-1:-1:-1;;;;;23797:15:0;;;;;;;:9;:15;;;;;;:33;;;;23841:13;;;;;;;;:22;;23858:5;;23797:15;23841:22;;23858:5;;23841:22;:::i;:::-;;;;;;;;23894:2;-1:-1:-1;;;;;23879:25:0;23888:4;-1:-1:-1;;;;;23879:25:0;-1:-1:-1;;;;;;;;;;;23898:5:0;23879:25;;;;9504::1;;9492:2;9477:18;;9459:76;23879:25:0;;;;;;;;-1:-1:-1;23924:4:0;;23009:927;-1:-1:-1;;;;23009:927:0:o;14799:122::-;14848:4;14872:41;14882:10;14894:6;14902:10;14872:9;:41::i;:::-;14865:48;;14799:122;;;;:::o;7994:272::-;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;8067:5:::1;::::0;::::1;;8059:14;;;::::0;::::1;;8084:5;:14:::0;;-1:-1:-1;;;;;8084:14:0;;::::1;-1:-1:-1::0;;;;;;8084:14:0;;::::1;::::0;::::1;::::0;;;8109:12:::1;:21:::0;;;::::1;::::0;::::1;::::0;;8084:5:::1;8141:16:::0;;;:8:::1;:16;::::0;;;;:23;;-1:-1:-1;;8141:23:0;;::::1;8084:14:::0;8141:23;;::::1;::::0;;;8175:7:::1;:20:::0;;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;8219:15:::1;8206:10;:28:::0;8245:5:::1;:13:::0;;;;::::1;::::0;;7994:272::o;14665:126::-;14737:10;14703:4;14749:21;;;:9;:21;;;;;;14703:4;;14727:56;;14737:10;14727:9;:56::i;:::-;14720:63;;14665:126;:::o;24563:523::-;24660:4;-1:-1:-1;;;;;24685:16:0;;;;;:39;;-1:-1:-1;;;;;;24705:19:0;;24719:4;24705:19;;24685:39;24677:48;;;;;;24766:10;24738:15;24756:21;;;:9;:21;;;;;;24796:16;;;;24788:76;;;;-1:-1:-1;;;24788:76:0;;;;;;;:::i;:::-;24901:15;24911:5;24901:7;:15;:::i;:::-;24887:10;24877:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;24927:13:0;;;;;;;:22;;24944:5;;24877:21;24927:22;;24944:5;;24927:22;:::i;:::-;;;;-1:-1:-1;;24965:31:0;;9504:25:1;;;-1:-1:-1;;;;;24965:31:0;;;24974:10;;-1:-1:-1;;;;;;;;;;;24965:31:0;9492:2:1;9477:18;24965:31:0;;;;;;;25016:62;;-1:-1:-1;;;25016:62:0;;-1:-1:-1;;;;;25016:37:0;;;;;:62;;25054:10;;25066:5;;25073:4;;;;25016:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25009:69;24563:523;-1:-1:-1;;;;;;24563:523:0:o;9827:133::-;7445:10;9896:4;7436:20;;;:8;:20;;;;;;;;7428:58;;;;-1:-1:-1;;;7428:58:0;;;;;;;:::i;:::-;9913:17:::1;9919:2;9923:6;9913:5;:17::i;:::-;-1:-1:-1::0;9948:4:0::1;9827:133:::0;;;;:::o;9494:325::-;9562:4;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9587:22:0;::::1;9579:63;;;;-1:-1:-1::0;;;9579:63:0::1;;;;;;;:::i;:::-;9653:12;:23:::0;;-1:-1:-1;;;;;;9653:23:0::1;-1:-1:-1::0;;;;;9653:23:0;::::1;;::::0;;9718:5:::1;::::0;9700:23:::1;::::0;:15:::1;:23;:::i;:::-;9687:10;:36:::0;;;9764:12:::1;::::0;9757:5:::1;::::0;9739:50:::1;::::0;-1:-1:-1;;;;;9764:12:0;;::::1;::::0;9757:5;;::::1;::::0;9739:50:::1;::::0;9764:12:::1;::::0;9739:50:::1;-1:-1:-1::0;9807:4:0::1;9494:325:::0;;;:::o;19384:938::-;19531:4;19575:8;19556:15;:27;;19548:70;;;;-1:-1:-1;;;19548:70:0;;12617:2:1;19548:70:0;;;12599:21:1;12656:2;12636:18;;;12629:30;12695:32;12675:18;;;12668:60;12745:18;;19548:70:0;12589:180:1;19548:70:0;-1:-1:-1;;;;;19811:14:0;;19631:18;19811:14;;;:6;:14;;;;;:16;;6356:92;;19741:6;;19766:2;;19787:5;;19811:16;19631:18;19811:16;;;:::i;:::-;;;;-1:-1:-1;19676:179:0;;;;;;9827:25:1;;;;-1:-1:-1;;;;;9926:15:1;;;9906:18;;;9899:43;9978:15;;;;9958:18;;;9951:43;10010:18;;;10003:34;10053:19;;;10046:35;10097:19;;;10090:35;;;9799:19;;19676:179:0;;;;;;;;;;;;19652:204;;;;;;19631:225;;19877:41;19890:6;19898:10;19910:1;19913;19916;19877:12;:41::i;:::-;:92;;;;19922:47;19941:6;19949:10;19961:1;19964;19967;19922:18;:47::i;:::-;19869:101;;;;;;-1:-1:-1;;;;;19991:16:0;;;;;:39;;-1:-1:-1;;;;;;20011:19:0;;20025:4;20011:19;;19991:39;19983:48;;;;;;-1:-1:-1;;;;;20062:17:0;;20044:15;20062:17;;;:9;:17;;;;;;20098:16;;;;20090:76;;;;-1:-1:-1;;;20090:76:0;;;;;;;:::i;:::-;20199:15;20209:5;20199:7;:15;:::i;:::-;-1:-1:-1;;;;;20179:17:0;;;;;;;:9;:17;;;;;;:35;;;;20225:13;;;;;;;;:22;;20242:5;;20179:17;20225:22;;20242:5;;20225:22;:::i;:::-;;;;;;;;20280:2;-1:-1:-1;;;;;20263:27:0;20272:6;-1:-1:-1;;;;;20263:27:0;-1:-1:-1;;;;;;;;;;;20284:5:0;20263:27;;;;9504:25:1;;9492:2;9477:18;;9459:76;20263:27:0;;;;;;;;-1:-1:-1;20310:4:0;;19384:938;-1:-1:-1;;;;;;;;;19384:938:0:o;9165:321::-;9232:4;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9257:22:0;::::1;9249:63;;;;-1:-1:-1::0;;;9249:63:0::1;;;;;;;:::i;:::-;9323:12;:23:::0;;-1:-1:-1;;;;;;9323:23:0::1;-1:-1:-1::0;;;;;9323:23:0;::::1;;::::0;;9388:5:::1;::::0;9370:23:::1;::::0;:15:::1;:23;:::i;:::-;9357:10;:36:::0;;;9431:12:::1;::::0;9424:5:::1;::::0;9409:47:::1;::::0;-1:-1:-1;;;;;9431:12:0;;::::1;::::0;9424:5;;::::1;::::0;9409:47:::1;::::0;9431:12:::1;::::0;9409:47:::1;-1:-1:-1::0;9474:4:0::1;9165:321:::0;;;:::o;10400:328::-;10493:10;;10467:4;;10493:10;;;;;10492:11;10484:48;;;;-1:-1:-1;;;10484:48:0;;12976:2:1;10484:48:0;;;12958:21:1;13015:2;12995:18;;;12988:30;13054:26;13034:18;;;13027:54;13098:18;;10484:48:0;12948:174:1;10484:48:0;-1:-1:-1;;;;;10551:22:0;;10543:63;;;;-1:-1:-1;;;10543:63:0;;;;;;;:::i;:::-;10617:25;10623:10;10635:6;10617:5;:25::i;:::-;10658:40;;9504:25:1;;;-1:-1:-1;;;;;10658:40:0;;;10669:10;;10658:40;;9492:2:1;9477:18;10658:40:0;9459:76:1;8423:140:0;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;8487:12:::1;:21:::0;;-1:-1:-1;;;;;;8487:21:0::1;-1:-1:-1::0;;;;;8487:21:0;::::1;;::::0;;8550:5:::1;::::0;8532:23:::1;::::0;:15:::1;:23;:::i;:::-;8519:10;:36:::0;-1:-1:-1;8423:140:0:o;14117:193::-;14177:4;14194:70;-1:-1:-1;;;;;14201:10:0;14194:35;14230:10;14250:4;14257:6;14194:35;:70::i;:::-;14282:20;14291:6;14299:2;14282:8;:20::i;13008:349::-;13162:74;;-1:-1:-1;;;13162:74:0;;13145:4;;-1:-1:-1;;;;;13169:10:0;13162:25;;;;:74;;13188:6;;13204:4;;13211:5;;13218:8;;13228:1;;13231;;13234;;13162:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13247:65:0;;-1:-1:-1;;;;;;;13254:10:0;13247:35;;-1:-1:-1;13283:6:0;13299:4;13306:5;13247:35;:65::i;:::-;13330:19;13339:5;13346:2;13330:8;:19::i;:::-;13323:26;13008:349;-1:-1:-1;;;;;;;;13008:349:0:o;7090:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7090:24:0;;-1:-1:-1;7090:24:0;:::o;7631:78::-;7669:7;7696:5;:3;:5::i;6047:20::-;;;;;;;:::i;9968:207::-;7445:10;10039:4;7436:20;;;:8;:20;;;;;;;;7428:58;;;;-1:-1:-1;;;7428:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10064:18:0;::::1;10056:59;;;;-1:-1:-1::0;;;10056:59:0::1;;;;;;;:::i;:::-;10126:19;10132:4;10138:6;10126:5;:19::i;9056:99::-:0;9104:16;9140:7;9133:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9133:14:0;;;;;;;;;;;;;;;;;;;;;;;9056:99;:::o;21682:438::-;21754:4;-1:-1:-1;;;;;21779:16:0;;;;;:39;;-1:-1:-1;;;;;;21799:19:0;;21813:4;21799:19;;21779:39;21771:48;;;;;;21858:10;21830:15;21848:21;;;:9;:21;;;;;;21888:16;;;;21880:76;;;;-1:-1:-1;;;21880:76:0;;;;;;;:::i;:::-;21993:15;22003:5;21993:7;:15;:::i;:::-;21979:10;21969:21;;;;:9;:21;;;;;;:39;;;;-1:-1:-1;;;;;22019:13:0;;;;;;;:22;;22036:5;;21969:21;22019:22;;22036:5;;22019:22;:::i;:::-;;;;-1:-1:-1;;22057:31:0;;9504:25:1;;;-1:-1:-1;;;;;22057:31:0;;;22066:10;;-1:-1:-1;;;;;;;;;;;22057:31:0;9492:2:1;9477:18;22057:31:0;;;;;;;;-1:-1:-1;22108:4:0;;21682:438;-1:-1:-1;;;21682:438:0:o;13920:189::-;13968:4;13985:70;-1:-1:-1;;;;;13992:10:0;13985:35;14021:10;14041:4;14048:6;13985:35;:70::i;:::-;14073:28;14082:6;14090:10;14073:8;:28::i;14318:127::-;14393:4;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;7892:94::-;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;7958:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;7958:20:0;;::::1;::::0;;;::::1;::::0;;7892:94::o;17472:356::-;17653:10;17576:4;17643:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;17643:30:0;;;;;;;;;;:38;;;17697:36;17576:4;;17643:30;;-1:-1:-1;;;;;;;;;;;17697:36:0;;;17676:5;9504:25:1;;9492:2;9477:18;;9459:76;17697:36:0;;;;;;;;17753:67;;-1:-1:-1;;;17753:67:0;;-1:-1:-1;;;;;17753:42:0;;;;;:67;;17796:10;;17808:5;;17815:4;;;;17753:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17746:74;17472:356;-1:-1:-1;;;;;17472:356:0:o;8950:98::-;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9017:15:0::1;9035:5;9017:15:::0;;;:8:::1;:15;::::0;;;;:23;;-1:-1:-1;;9017:23:0::1;::::0;;8950:98::o;13666:246::-;13735:40;;-1:-1:-1;;;13735:40:0;;13764:10;13735:40;;;6537:51:1;13703:4:0;;;;-1:-1:-1;;;;;13742:10:0;13735:28;;;;6510:18:1;;13735:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13720:55;-1:-1:-1;13786:71:0;-1:-1:-1;;;;;13793:10:0;13786:35;13822:10;13842:4;13720:55;13786:35;:71::i;:::-;13875:29;13884:7;13893:10;13875:8;:29::i;:::-;13868:36;;;13666:246;:::o;18661:715::-;18830:8;18811:15;:27;;18803:70;;;;-1:-1:-1;;;18803:70:0;;12617:2:1;18803:70:0;;;12599:21:1;12656:2;12636:18;;;12629:30;12695:32;12675:18;;;12668:60;12745:18;;18803:70:0;12589:180:1;18803:70:0;-1:-1:-1;;;;;19069:14:0;;18886:18;19069:14;;;:6;:14;;;;;:16;;6210:95;;18994:6;;19019:7;;19045:5;;19069:16;18886:18;19069:16;;;:::i;:::-;;;;-1:-1:-1;18931:182:0;;;;;;9827:25:1;;;;-1:-1:-1;;;;;9926:15:1;;;9906:18;;;9899:43;9978:15;;;;9958:18;;;9951:43;10010:18;;;10003:34;10053:19;;;10046:35;10097:19;;;10090:35;;;9799:19;;18931:182:0;;;;;;;;;;;;18907:207;;;;;;18886:228;;19135:41;19148:6;19156:10;19168:1;19171;19174;19135:12;:41::i;:::-;:92;;;;19180:47;19199:6;19207:10;19219:1;19222;19225;19180:18;:47::i;:::-;19127:101;;;;;;-1:-1:-1;;;;;19286:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;19336:32;;9504:25:1;;;-1:-1:-1;;;;;;;;;;;19336:32:0;9477:18:1;19336:32:0;;;;;;;18661:715;;;;;;;;:::o;8571:129::-;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;8650:10:::1;;8631:15;:29;;8623:38;;;::::0;::::1;;8680:12;::::0;8672:5:::1;:20:::0;;-1:-1:-1;;;;;;8672:20:0::1;-1:-1:-1::0;;;;;8680:12:0;;::::1;8672:20:::0;;;::::1;::::0;;8571:129::o;10183:209::-;7445:10;10273:4;7436:20;;;:8;:20;;;;;;;;7428:58;;;;-1:-1:-1;;;7428:58:0;;;;;;;:::i;:::-;10290:22:::1;10296:7;10305:6;10290:5;:22::i;:::-;10346:7;-1:-1:-1::0;;;;;10328:34:0::1;10338:6;10328:34;10355:6;10328:34;;;;9504:25:1::0;;9492:2;9477:18;;9459:76;7717:167:0;7753:7;7796:10;;7777:15;:29;7773:81;;-1:-1:-1;7830:12:0;;-1:-1:-1;;;;;7830:12:0;7823:19;;7773:81;-1:-1:-1;7871:5:0;;-1:-1:-1;;;;;7871:5:0;7717:167;:::o;13365:293::-;13527:86;;-1:-1:-1;;;13527:86:0;;13510:4;;-1:-1:-1;;;;;13534:10:0;13527:37;;;;:86;;13565:6;;13581:4;;13588:5;;13595:8;;13605:1;;13608;;13611;;13527:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13631:19;13640:5;13647:2;13631:8;:19::i;8274:141::-;7568:5;:3;:5::i;:::-;-1:-1:-1;;;;;7554:19:0;:10;-1:-1:-1;;;;;7554:19:0;;7546:57;;;;-1:-1:-1;;;7546:57:0;;;;;;;:::i;:::-;8338:13:::1;:21:::0;;-1:-1:-1;;;;;;8338:21:0::1;-1:-1:-1::0;;;;;8338:21:0;::::1;;::::0;;8402:5:::1;::::0;8384:23:::1;::::0;:15:::1;:23;:::i;:::-;8370:11;:37:::0;-1:-1:-1;8274:141:0:o;15220:198::-;15296:4;15313:19;15319:4;15325:6;15313:5;:19::i;:::-;15343:43;-1:-1:-1;;;;;15350:10:0;15343:31;15375:2;15379:6;15343:31;:43::i;:::-;-1:-1:-1;15404:6:0;;15220:198;-1:-1:-1;;15220:198:0:o;15699:268::-;-1:-1:-1;;;;;15775:21:0;;15767:65;;;;-1:-1:-1;;;15767:65:0;;15266:2:1;15767:65:0;;;15248:21:1;15305:2;15285:18;;;15278:30;15344:33;15324:18;;;15317:61;15395:18;;15767:65:0;15238:181:1;15767:65:0;15861:6;15845:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15878:18:0;;;;;;:9;:18;;;;;:28;;15900:6;;15878:18;:28;;15900:6;;15878:28;:::i;:::-;;;;-1:-1:-1;;15922:37:0;;9504:25:1;;;-1:-1:-1;;;;;15922:37:0;;;15939:1;;-1:-1:-1;;;;;;;;;;;15922:37:0;9492:2:1;9477:18;15922:37:0;;;;;;;;15699:268;;:::o;20330:399::-;20498:110;;-1:-1:-1;;;20498:110:0;;;6252:27:1;20562:16:0;6295:11:1;;;6288:27;6331:12;;;6324:28;;;20442:4:0;;;;6368:12:1;;20498:110:0;;;-1:-1:-1;;20498:110:0;;;;;;;;;20474:135;;20498:110;20474:135;;;;20620:14;20637:24;;;;;;;;;10363:25:1;;;10436:4;10424:17;;10404:18;;;10397:45;;;;10458:18;;;10451:34;;;10501:18;;;10494:34;;;20474:135:0;;-1:-1:-1;20620:14:0;20637:24;;10335:19:1;;20637:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20637:24:0;;-1:-1:-1;;20637:24:0;;;-1:-1:-1;;;;;;;20680:20:0;;;;;;:40;;;20714:6;-1:-1:-1;;;;;20704:16:0;:6;-1:-1:-1;;;;;20704:16:0;;20672:49;20330:399;-1:-1:-1;;;;;;;;20330:399:0:o;20737:290::-;20855:4;20872:12;20887:20;20896:10;21193:58;;5851:66:1;21193:58:0;;;5839:79:1;5934:12;;;5927:28;;;21156:7:0;;5971:12:1;;21193:58:0;;;;;;;;;;;;21183:69;;;;;;21176:76;;21101:159;;;;20887:20;20935:24;;;20918:14;20935:24;;;;;;;;;10363:25:1;;;10436:4;10424:17;;10404:18;;;10397:45;;;;10458:18;;;10451:34;;;10501:18;;;10494:34;;;20872:35:0;;-1:-1:-1;20918:14:0;20935:24;;10335:19:1;;20935:24:0;10317:217:1;16299:270:0;-1:-1:-1;;;;;16375:21:0;;16367:67;;;;-1:-1:-1;;;16367:67:0;;13683:2:1;16367:67:0;;;13665:21:1;13722:2;13702:18;;;13695:30;13761:34;13741:18;;;13734:62;-1:-1:-1;;;13812:18:1;;;13805:31;13853:19;;16367:67:0;13655:223:1;16367:67:0;-1:-1:-1;;;;;16447:18:0;;;;;;:9;:18;;;;;:28;;16469:6;;16447:18;:28;;16469:6;;16447:28;:::i;:::-;;;;;;;;16502:6;16486:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16524:37:0;;9504:25:1;;;16550:1:0;;-1:-1:-1;;;;;16524:37:0;;;-1:-1:-1;;;;;;;;;;;16524:37:0;9492:2:1;9477:18;16524:37:0;9459:76:1;4775:201:0;4899:68;;-1:-1:-1;;;;;6857:15:1;;;4899:68:0;;;6839:34:1;6909:15;;6889:18;;;6882:43;6941:18;;;6934:34;;;4873:95:0;;4892:5;;-1:-1:-1;;;4922:27:0;6774:18:1;;4899:68:0;;;;-1:-1:-1;;4899:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;4899:68:0;-1:-1:-1;;;;;;4899:68:0;;;;;;;;;;4873:18;:95::i;:::-;4775:201;;;;:::o;14453:204::-;14514:4;14539:10;-1:-1:-1;;;;;14539:26:0;;;;;:57;;-1:-1:-1;14569:10:0;-1:-1:-1;;;;;14569:27:0;14591:4;14569:27;;14539:57;14531:66;;;;;;14608:17;14614:2;14618:6;14608:5;:17::i;:::-;-1:-1:-1;14643:6:0;;14453:204;-1:-1:-1;14453:204:0:o;4594:173::-;4700:58;;-1:-1:-1;;;;;7846:32:1;;4700:58:0;;;7828:51:1;7895:18;;;7888:34;;;4674:85:0;;4693:5;;-1:-1:-1;;;4723:23:0;7801:18:1;;4700:58:0;7783:145:1;4674:85:0;4594:173;;;:::o;5334:598::-;5422:27;5430:5;-1:-1:-1;;;;;5422:25:0;;:27::i;:::-;5414:71;;;;-1:-1:-1;;;5414:71:0;;14906:2:1;5414:71:0;;;14888:21:1;14945:2;14925:18;;;14918:30;14984:33;14964:18;;;14957:61;15035:18;;5414:71:0;14878:181:1;5414:71:0;5559:12;5573:23;5608:5;-1:-1:-1;;;;;5600:19:0;5620:4;5600:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5558:67;;;;5644:7;5636:52;;;;-1:-1:-1;;;5636:52:0;;11840:2:1;5636:52:0;;;11822:21:1;;;11859:18;;;11852:30;11918:34;11898:18;;;11891:62;11970:18;;5636:52:0;11812:182:1;5636:52:0;5705:17;;:21;5701:224;;5847:10;5836:30;;;;;;;;;;;;:::i;:::-;5828:85;;;;-1:-1:-1;;;5828:85:0;;14495:2:1;5828:85:0;;;14477:21:1;14534:2;14514:18;;;14507:30;14573:34;14553:18;;;14546:62;-1:-1:-1;;;14624:18:1;;;14617:40;14674:19;;5828:85:0;14467:232:1;4154:374:0;4214:4;4437:20;;4280:66;4477:15;;;;;:42;;-1:-1:-1;4496:23:0;;;4469:51;-1:-1:-1;;4154:374:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:156;258:20;;318:4;307:16;;297:27;;287:2;;338:1;335;328:12;353:196;;465:2;453:9;444:7;440:23;436:32;433:2;;;486:6;478;471:22;433:2;514:29;533:9;514:29;:::i;554:270::-;;;683:2;671:9;662:7;658:23;654:32;651:2;;;704:6;696;689:22;651:2;732:29;751:9;732:29;:::i;:::-;722:39;;780:38;814:2;803:9;799:18;780:38;:::i;:::-;770:48;;641:183;;;;;:::o;829:338::-;;;;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1024:29;1043:9;1024:29;:::i;:::-;1014:39;;1072:38;1106:2;1095:9;1091:18;1072:38;:::i;:::-;1062:48;;1157:2;1146:9;1142:18;1129:32;1119:42;;933:234;;;;;:::o;1172:616::-;;;;;;;;1384:3;1372:9;1363:7;1359:23;1355:33;1352:2;;;1406:6;1398;1391:22;1352:2;1434:29;1453:9;1434:29;:::i;:::-;1424:39;;1482:38;1516:2;1505:9;1501:18;1482:38;:::i;:::-;1472:48;;1567:2;1556:9;1552:18;1539:32;1529:42;;1618:2;1607:9;1603:18;1590:32;1580:42;;1641:37;1673:3;1662:9;1658:19;1641:37;:::i;:::-;1631:47;;1725:3;1714:9;1710:19;1697:33;1687:43;;1777:3;1766:9;1762:19;1749:33;1739:43;;1342:446;;;;;;;;;;:::o;1793:264::-;;;1922:2;1910:9;1901:7;1897:23;1893:32;1890:2;;;1943:6;1935;1928:22;1890:2;1971:29;1990:9;1971:29;:::i;:::-;1961:39;2047:2;2032:18;;;;2019:32;;-1:-1:-1;;;1880:177:1:o;2062:338::-;;;;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2229:6;2221;2214:22;2176:2;2257:29;2276:9;2257:29;:::i;:::-;2247:39;;2333:2;2322:9;2318:18;2305:32;2295:42;;2356:38;2390:2;2379:9;2375:18;2356:38;:::i;:::-;2346:48;;2166:234;;;;;:::o;2405:783::-;;;;;2570:2;2558:9;2549:7;2545:23;2541:32;2538:2;;;2591:6;2583;2576:22;2538:2;2619:29;2638:9;2619:29;:::i;:::-;2609:39;;2695:2;2684:9;2680:18;2667:32;2657:42;;2750:2;2739:9;2735:18;2722:32;2773:18;2814:2;2806:6;2803:14;2800:2;;;2835:6;2827;2820:22;2800:2;2878:6;2867:9;2863:22;2853:32;;2923:7;2916:4;2912:2;2908:13;2904:27;2894:2;;2950:6;2942;2935:22;2894:2;2995;2982:16;3021:2;3013:6;3010:14;3007:2;;;3042:6;3034;3027:22;3007:2;3092:7;3087:2;3078:6;3074:2;3070:15;3066:24;3063:37;3060:2;;;3118:6;3110;3103:22;3060:2;2528:660;;;;-1:-1:-1;;3154:2:1;3146:11;;-1:-1:-1;;;2528:660:1:o;3193:616::-;;;;;;;;3405:3;3393:9;3384:7;3380:23;3376:33;3373:2;;;3427:6;3419;3412:22;3373:2;3455:29;3474:9;3455:29;:::i;:::-;3445:39;;3531:2;3520:9;3516:18;3503:32;3493:42;;3582:2;3571:9;3567:18;3554:32;3544:42;;3605:36;3637:2;3626:9;3622:18;3605:36;:::i;:::-;3595:46;;3688:3;3677:9;3673:19;3660:33;3650:43;;3740:3;3729:9;3725:19;3712:33;3702:43;;3764:39;3798:3;3787:9;3783:19;3764:39;:::i;:::-;3754:49;;3363:446;;;;;;;;;;:::o;3814:251::-;;3923:2;3911:9;3902:7;3898:23;3894:32;3891:2;;;3944:6;3936;3929:22;3891:2;3988:9;3975:23;4007:28;4029:5;4007:28;:::i;4070:255::-;;4190:2;4178:9;4169:7;4165:23;4161:32;4158:2;;;4211:6;4203;4196:22;4158:2;4248:9;4242:16;4267:28;4289:5;4267:28;:::i;4330:332::-;;;;4476:2;4464:9;4455:7;4451:23;4447:32;4444:2;;;4497:6;4489;4482:22;4444:2;4538:9;4525:23;4515:33;;4567:38;4601:2;4590:9;4586:18;4567:38;:::i;4667:190::-;;4779:2;4767:9;4758:7;4754:23;4750:32;4747:2;;;4800:6;4792;4785:22;4747:2;-1:-1:-1;4828:23:1;;4737:120;-1:-1:-1;4737:120:1:o;4862:194::-;;4985:2;4973:9;4964:7;4960:23;4956:32;4953:2;;;5006:6;4998;4991:22;4953:2;-1:-1:-1;5034:16:1;;4943:113;-1:-1:-1;4943:113:1:o;5061:264::-;;;5190:2;5178:9;5169:7;5165:23;5161:32;5158:2;;;5211:6;5203;5196:22;5158:2;5252:9;5239:23;5229:33;;5281:38;5315:2;5304:9;5300:18;5281:38;:::i;5330:274::-;;5497:6;5491:13;5513:53;5559:6;5554:3;5547:4;5539:6;5535:17;5513:53;:::i;:::-;5582:16;;;;;5467:137;-1:-1:-1;;5467:137:1:o;6979:670::-;-1:-1:-1;;;;;7346:15:1;;;7328:34;;7398:15;;;;7393:2;7378:18;;7371:43;7445:2;7430:18;;7423:34;;;;7488:2;7473:18;;7466:34;;;;7549:4;7537:17;7531:3;7516:19;;7509:46;7308:3;7571:19;;7564:35;7630:3;7615:19;;7608:35;;;;7277:3;7262:19;;7244:405::o;7933:562::-;-1:-1:-1;;;;;8146:32:1;;8128:51;;8210:2;8195:18;;8188:34;;;8258:2;8253;8238:18;;8231:30;;;8277:18;;8270:34;;;7933:562;8297:6;8347;8341:3;8326:19;;8313:49;8382:22;;;8406:3;8378:32;;;8371:46;;;;8478:2;8457:15;;;-1:-1:-1;;8453:29:1;8438:45;8434:55;;8118:377;-1:-1:-1;;;8118:377:1:o;8500:661::-;8671:2;8723:21;;;8793:13;;8696:18;;;8815:22;;;8500:661;;8671:2;8894:15;;;;8868:2;8853:18;;;8500:661;8940:195;8954:6;8951:1;8948:13;8940:195;;;9019:13;;-1:-1:-1;;;;;9015:39:1;9003:52;;9110:15;;;;9075:12;;;;9051:1;8969:9;8940:195;;;-1:-1:-1;9152:3:1;;8651:510;-1:-1:-1;;;;;;8651:510:1:o;10539:383::-;;10688:2;10677:9;10670:21;10720:6;10714:13;10763:6;10758:2;10747:9;10743:18;10736:34;10779:66;10838:6;10833:2;10822:9;10818:18;10813:2;10805:6;10801:15;10779:66;:::i;:::-;10906:2;10885:15;-1:-1:-1;;10881:29:1;10866:45;;;;10913:2;10862:54;;10660:262;-1:-1:-1;;10660:262:1:o;10927:349::-;11129:2;11111:21;;;11168:2;11148:18;;;11141:30;11207:27;11202:2;11187:18;;11180:55;11267:2;11252:18;;11101:175::o;11281:352::-;11483:2;11465:21;;;11522:2;11502:18;;;11495:30;11561;11556:2;11541:18;;11534:58;11624:2;11609:18;;11455:178::o;11999:411::-;12201:2;12183:21;;;12240:2;12220:18;;;12213:30;12279:34;12274:2;12259:18;;12252:62;-1:-1:-1;;;12345:2:1;12330:18;;12323:45;12400:3;12385:19;;12173:237::o;13127:349::-;13329:2;13311:21;;;13368:2;13348:18;;;13341:30;13407:27;13402:2;13387:18;;13380:55;13467:2;13452:18;;13301:175::o;15795:128::-;;15866:1;15862:6;15859:1;15856:13;15853:2;;;15872:18;;:::i;:::-;-1:-1:-1;15908:9:1;;15843:80::o;15928:125::-;;15996:1;15993;15990:8;15987:2;;;16001:18;;:::i;:::-;-1:-1:-1;16038:9:1;;15977:76::o;16058:258::-;16130:1;16140:113;16154:6;16151:1;16148:13;16140:113;;;16230:11;;;16224:18;16211:11;;;16204:39;16176:2;16169:10;16140:113;;;16271:6;16268:1;16265:13;16262:2;;;-1:-1:-1;;16306:1:1;16288:16;;16281:27;16111:205::o;16321:380::-;16406:1;16396:12;;16453:1;16443:12;;;16464:2;;16518:4;16510:6;16506:17;16496:27;;16464:2;16571;16563:6;16560:14;16540:18;16537:38;16534:2;;;16617:10;16612:3;16608:20;16605:1;16598:31;16652:4;16649:1;16642:15;16680:4;16677:1;16670:15;16534:2;;16376:325;;;:::o;16706:135::-;;-1:-1:-1;;16766:17:1;;16763:2;;;16786:18;;:::i;:::-;-1:-1:-1;16833:1:1;16822:13;;16753:88::o;16846:127::-;16907:10;16902:3;16898:20;16895:1;16888:31;16938:4;16935:1;16928:15;16962:4;16959:1;16952:15;16978:118;17064:5;17057:13;17050:21;17043:5;17040:32;17030:2;;17086:1;17083;17076:12;17030:2;17020:76;:::o
Swarm Source
ipfs://9e817beecb84d00bcd9dc2d88cbed72ee2b5da3aa984b4de0006c7cd9256da59
Loading...
Loading
Loading...
Loading
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.