Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11291446 | 1438 days ago | IN | 0 ETH | 0.13904769 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
COREForkMigrator
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-19 */ // Sources flattened with hardhat v2.0.1 https://hardhat.org // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File @uniswap/lib/contracts/libraries/[email protected] // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.5.0; library AddressStringUtil { // converts an address to the uppercase hex string, extracting only len bytes (up to 20, multiple of 2) function toAsciiString(address addr, uint len) pure internal returns (string memory) { require(len % 2 == 0 && len > 0 && len <= 40, "AddressStringUtil: INVALID_LEN"); bytes memory s = new bytes(len); uint addrNum = uint(addr); for (uint i = 0; i < len / 2; i++) { // shift right and truncate all but the least significant byte to extract the byte at position 19-i uint8 b = uint8(addrNum >> (8 * (19 - i))); // first hex character is the most significant 4 bits uint8 hi = b >> 4; // second hex character is the least significant 4 bits uint8 lo = b - (hi << 4); s[2 * i] = char(hi); s[2 * i + 1] = char(lo); } return string(s); } // hi and lo are only 4 bits and between 0 and 16 // this method converts those values to the unicode/ascii code point for the hex representation // uses upper case for the characters function char(uint8 b) pure private returns (byte c) { if (b < 10) { return byte(b + 0x30); } else { return byte(b + 0x37); } } } // File @uniswap/lib/contracts/libraries/[email protected] pragma solidity >=0.5.0; // produces token descriptors from inconsistent or absent ERC20 symbol implementations that can return string or bytes32 // this library will always produce a string symbol to represent the token library SafeERC20Namer { function bytes32ToString(bytes32 x) pure private returns (string memory) { bytes memory bytesString = new bytes(32); uint charCount = 0; for (uint j = 0; j < 32; j++) { byte char = x[j]; if (char != 0) { bytesString[charCount] = char; charCount++; } } bytes memory bytesStringTrimmed = new bytes(charCount); for (uint j = 0; j < charCount; j++) { bytesStringTrimmed[j] = bytesString[j]; } return string(bytesStringTrimmed); } // assumes the data is in position 2 function parseStringData(bytes memory b) pure private returns (string memory) { uint charCount = 0; // first parse the charCount out of the data for (uint i = 32; i < 64; i++) { charCount <<= 8; charCount += uint8(b[i]); } bytes memory bytesStringTrimmed = new bytes(charCount); for (uint i = 0; i < charCount; i++) { bytesStringTrimmed[i] = b[i + 64]; } return string(bytesStringTrimmed); } // uses a heuristic to produce a token name from the address // the heuristic returns the full hex of the address string in upper case function addressToName(address token) pure private returns (string memory) { return AddressStringUtil.toAsciiString(token, 40); } // uses a heuristic to produce a token symbol from the address // the heuristic returns the first 6 hex of the address string in upper case function addressToSymbol(address token) pure private returns (string memory) { return AddressStringUtil.toAsciiString(token, 6); } // calls an external view token contract method that returns a symbol or name, and parses the output into a string function callAndParseStringReturn(address token, bytes4 selector) view private returns (string memory) { (bool success, bytes memory data) = token.staticcall(abi.encodeWithSelector(selector)); // if not implemented, or returns empty data, return empty string if (!success || data.length == 0) { return ""; } // bytes32 data always has length 32 if (data.length == 32) { bytes32 decoded = abi.decode(data, (bytes32)); return bytes32ToString(decoded); } else if (data.length > 64) { return abi.decode(data, (string)); } return ""; } // attempts to extract the token symbol. if it does not implement symbol, returns a symbol derived from the address function tokenSymbol(address token) internal view returns (string memory) { // 0x95d89b41 = bytes4(keccak256("symbol()")) string memory symbol = callAndParseStringReturn(token, 0x95d89b41); if (bytes(symbol).length == 0) { // fallback to 6 uppercase hex of address return addressToSymbol(token); } return symbol; } // attempts to extract the token name. if it does not implement name, returns a name derived from the address function tokenName(address token) internal view returns (string memory) { // 0x06fdde03 = bytes4(keccak256("name()")) string memory name = callAndParseStringReturn(token, 0x06fdde03); if (bytes(name).length == 0) { // fallback to full hex of address return addressToName(token); } return name; } } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File contracts/v612/ICOREGlobals.sol // COPYRIGHT cVault.finance TEAM // NO COPY // COPY = BAD // This code is provided with no assurances or guarantees of any kind. Use at your own responsibility. interface ICOREGlobals { function CORETokenAddress() external view returns (address); function COREGlobalsAddress() external view returns (address); function COREDelegatorAddress() external view returns (address); function COREVaultAddress() external returns (address); function COREWETHUniPair() external view returns (address); function UniswapFactory() external view returns (address); function TransferHandler() external view returns (address); function addDelegatorStateChangePermission(address that, bool status) external; function isStateChangeApprovedContract(address that) external view returns (bool); } // File @openzeppelin/contracts-ethereum-package/contracts/token/ERC20/[email protected] pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts-ethereum-package/contracts/math/[email protected] pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File @openzeppelin/contracts-ethereum-package/contracts/[email protected] pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File @openzeppelin/contracts-ethereum-package/contracts/GSN/[email protected] pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File @openzeppelin/contracts-ethereum-package/contracts/access/[email protected] pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File contracts/v612/COREForkMigrator.sol pragma solidity 0.6.12; // import "@openzeppelin/contracts/access/Ownable.sol"; interface ICOREVault { function addPendingRewards(uint256 _) external; } interface IUNICORE { function viewGovernanceLevel(address) external returns (uint8); function setVault(address) external; function burnFromUni(uint256) external; function viewUNIv2() external returns (address); function viewUniBurnRatio() external returns (uint256); function setGovernanceLevel(address, uint8) external; function balanceOf(address) external returns (uint256); function setUniBurnRatio(uint256) external; function viewwWrappedUNIv2() external returns (address); function burnToken(uint256) external; function totalSupply() external returns (uint256); } interface IUNICOREVault { function userInfo(uint,address) external view returns (uint256, uint256); } interface IProxyAdmin { function owner() external returns (address); function transferOwnership(address) external; function upgrade(address, address) external; } interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } interface ILGE { function claimLP() external; } interface ITransferContract { function run(address) external; } interface ICORE { function setShouldTransferChecker(address) external; } interface ITimelockVault { function LPContributed(address) external view returns (uint256); } contract TENSFeeApproverPermanent { address public tokenETHPair; constructor() public { tokenETHPair = 0xB1b537B7272BA1EDa0086e2f480AdCA72c0B511C; } function calculateAmountsAfterFee( address sender, address recipient, uint256 amount ) public returns (uint256 transferToAmount, uint256 transferToFeeDistributorAmount, uint256 burn) { // Will block all buys and liquidity removals if(sender == tokenETHPair || recipient == tokenETHPair) { // This is how a legend dies require(false, "TENS is deprecated."); } // No fees // school is out transferToAmount = amount; } } contract COREForkMigrator is OwnableUpgradeSafe { using SafeMath for uint256; /// EVENTS event ETHSendToLGE(uint256); ///Variables bool public LPClaimedFromLGE; bool private locked; IERC20 public CORE; ICOREVault public coreVault; IUniswapV2Factory public uniswapFactory; IWETH wETH; address public CORExWETHPair; address payable public CORE_MULTISIG; address public postLGELPTokenAddress; address public Fee_Approver_Permanent; address public Vault_Permanent; uint256 public totalLPClaimed; uint256 public totalETHSent; uint256 contractStartTimestamp; mapping (address => bool) LPClaimed; //// UNICORE Specific Variables bool public UNICORE_Migrated; bool public UNICORE_Liquidity_Transfered; address public UNICORE_Vault; address public UNICORE_Token; address public UNICORE_Reactor_Token; // Slit token for liquidity uint256 public UNICORE_Snapshot_Block; uint256 public Ether_Total_For_UNICORE_LP; uint256 public UNICORE_Total_LP_Supply; mapping (address => uint256) balanceUNICOREReactor; mapping (address => uint256) balanceUNICOREReactorInVaultOnSnapshot; // ENCORE Specific variables bool public ENCORE_Liquidity_Transfered; bool public ENCORE_Transfers_Closed; address public ENCORE_Vault; address public ENCORE_Vault_Timelock; address public ENCORE_Fee_Approver; address public ENCORE_Token; address public ENCORE_Timelock_Vault; address public ENCORE_Proxy_Admin; address public ENCORE_LP_Token; address public ENCORE_Migrator; uint256 public Ether_Credit_Per_ENCORE_LP; uint256 public Ether_Total_For_Encore_LP; uint256 public ENCORE_Total_LP_Supply; mapping (address => uint256) balanceENCORELP; // No need for snapshot /// TENS Specific functions and variables bool public TENS_Liquidity_Transfered; address public TENS_Vault; address public TENS_Token; address public TENS_Proxy_Admin; address public TENS_LP_Token; address public TENS_Fee_Approver_Permanent; uint256 public Ether_Total_For_TENS_LP; uint256 public TENS_Total_LP_Supply; mapping (address => uint256) balanceTENSLP; // No need for snapshot /// Reentrancy modifier modifier lock() { require(locked == false, 'CORE Migrator: Execution Locked'); locked = true; _; locked = false; } // Constructor function initialize() initializer public{ require(tx.origin == 0x5A16552f59ea34E44ec81E58b3817833E9fD5436); require(msg.sender == 0x5A16552f59ea34E44ec81E58b3817833E9fD5436); OwnableUpgradeSafe.__Ownable_init(); CORE_MULTISIG = 0x5A16552f59ea34E44ec81E58b3817833E9fD5436; contractStartTimestamp = block.timestamp; // Permanent vault and fee approver Vault_Permanent = 0xfeD4Ec1348a4068d4934E09492428FD92E399e5c; Fee_Approver_Permanent = 0x43Dd7026284Ac8f95Eb02bB1bd68D0699B0Ae9cA; //UNICORE UNICORE_Vault = 0x6F31ECD8110bcBc679AEfb74c7608241D1B78949; UNICORE_Token = 0x5506861bbb104Baa8d8575e88E22084627B192D8; //TENS TENS_Vault = 0xf983EcF91195bD63DE8445997082680E688749BC; TENS_Token = 0x776CA7dEd9474829ea20AD4a5Ab7a6fFdB64C796; TENS_Proxy_Admin = 0x2d0C48C5BF930A09F8CD6fae5aC5A16b24e1723a; TENS_LP_Token = 0xB1b537B7272BA1EDa0086e2f480AdCA72c0B511C; TENS_Fee_Approver_Permanent = 0x22C91cDd1E00cD4d7D029f0dB94020Fce3C486e3; ENCORE_Proxy_Admin = 0x1964784ba40c9fD5EED1070c1C38cd5D1d5F9f55; ENCORE_Token = 0xe0E4839E0c7b2773c58764F9Ec3B9622d01A0428; ENCORE_LP_Token = 0x2e0721E6C951710725997928DcAAa05DaaFa031B; ENCORE_Fee_Approver = 0xF3c3ff0ea59d15e82b9620Ed7406fa3f6A261f98; ENCORE_Vault = 0xdeF7BdF8eCb450c1D93C5dB7C8DBcE5894CCDaa9; ENCORE_Vault_Timelock = 0xC2Cb86437355f36d42Fb8D979ab28b9816ac0545; Ether_Credit_Per_ENCORE_LP = uint256(1 ether).div(2).mul(10724).div(10000); // Account for 7.24% fee on LGE ICOREGlobals globals = ICOREGlobals(0x255CA4596A963883Afe0eF9c85EA071Cc050128B); CORE = IERC20(globals.CORETokenAddress()); uniswapFactory = IUniswapV2Factory(globals.UniswapFactory()); coreVault = ICOREVault(globals.COREVaultAddress()); CORExWETHPair = globals.COREWETHUniPair(); wETH = IWETH(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); } //Enables recieving eth receive() external payable{} function setLPTokenAddress(address _token) onlyOwner public { postLGELPTokenAddress = _token; } function claimLP() lock public { require(LPClaimedFromLGE == true, "Nothing to claim yet"); require(getOwedLP(msg.sender) > 0, "nothing to claim"); require(IERC20(postLGELPTokenAddress).transfer(msg.sender, getOwedLP(msg.sender))); LPClaimed[msg.sender] = true; } function getOwedLP(address user) public view returns (uint256 LPDebtForUser) { if(postLGELPTokenAddress == address (0)) return 0; if(LPClaimedFromLGE == false) return 0; if(LPClaimed[msg.sender] == true) return 0; uint256 balanceUNICORE = viewCreditedUNICOREReactors(user); uint256 balanceENCORE = viewCreditedENCORETokens(user); uint256 balanceTENS = viewCreditedTENSTokens(user); if(balanceUNICORE == 0 && balanceENCORE == 0 && balanceTENS == 0) return 0; uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); uint256 totalETHEquivalent; if(balanceUNICORE > 0){ totalETHEquivalent = Ether_Total_For_UNICORE_LP.div(UNICORE_Total_LP_Supply).mul(balanceUNICORE); } if(balanceENCORE > 0){ totalETHEquivalent = totalETHEquivalent.add(Ether_Total_For_Encore_LP).div(ENCORE_Total_LP_Supply).mul(balanceENCORE); } if(balanceTENS > 0){ totalETHEquivalent = totalETHEquivalent.add(Ether_Total_For_TENS_LP).div(TENS_Total_LP_Supply).mul(balanceTENS); } LPDebtForUser = totalETHEquivalent.mul(totalLPClaimed).div(totalETH).div(1e18); } //////////// /// Unicore specific functions ////////// function snapshotUNICORE(address[] memory _addresses, uint256[] memory balances) onlyOwner public { require(UNICORE_Migrated == true, "UNICORE Deposits are still not closed"); uint256 length = _addresses.length; require(length == balances.length, "Wrong input"); for (uint256 i = 0; i < length; i++) { balanceUNICOREReactorInVaultOnSnapshot[_addresses[i]] = balances[i]; } } function viewCreditedUNICOREReactors(address person) public view returns (uint256) { if(UNICORE_Migrated) { return balanceUNICOREReactorInVaultOnSnapshot[person].add(balanceUNICOREReactor[person]); } else { (uint256 userAmount, ) = IUNICOREVault(UNICORE_Vault).userInfo(0, person); return balanceUNICOREReactor[person].add(userAmount); } } function addUNICOREReactors() lock public { require(UNICORE_Migrated == false, "UNICORE Deposits closed"); uint256 amtAdded = transferTokenHereSupportingFeeOnTransferTokens(UNICORE_Reactor_Token, IERC20(UNICORE_Reactor_Token).balanceOf(msg.sender)); balanceUNICOREReactor[msg.sender] = balanceUNICOREReactor[msg.sender].add(amtAdded); } // Unicore migraiton is special and a-typical // Because of the extensive changes to the code-base. function transferUNICORELiquidity() onlyOwner public { require(ENCORE_Liquidity_Transfered == true, "ENCORE has to go first"); require(UNICORE_Liquidity_Transfered == false, "UNICORE already transfered"); // Make sure we have the proper permissions. require(IUNICORE(UNICORE_Token).viewGovernanceLevel(address(this)) == 2, "Incorrectly set governance level, can't proceed"); require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0x5A16552f59ea34E44ec81E58b3817833E9fD5436) == 2, "Incorrectly set governance level, can't proceed"); require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0x05957F3344255fDC9fE172E30016ee148D684313) == 0, "Incorrectly set governance level, can't proceed"); require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0xE6f32f17BE3Bf031B4B6150689C1f17cEcA375C8) == 0, "Incorrectly set governance level, can't proceed"); require(IUNICORE(UNICORE_Token).viewGovernanceLevel(0xF4D7a0E8a68345442172F45cAbD272c25320AA96) == 0, "Incorrectly set governance level, can't proceed"); require(address(this).balance >= 1e18, " Feed me eth"); IUNICORE unicore = IUNICORE(UNICORE_Token); wETH.deposit{value: 1e18}(); IUniswapV2Pair pair = IUniswapV2Pair(unicore.viewUNIv2()); bool token0IsWETH = pair.token0() == address(wETH); (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); wETH.transfer(address(pair), 1e18); uint256 amtUnicore; if(token0IsWETH){ amtUnicore = getAmountOut(1e18, reserve0, reserve1); pair.swap(0, amtUnicore, address(this), ""); } else{ amtUnicore = getAmountOut(1e18, reserve1, reserve0); pair.swap(amtUnicore, 0, address(this), ""); } unicore.setVault(address(this)); unicore.setUniBurnRatio(100); uint256 balUnicoreOfUniPair = unicore.balanceOf(unicore.viewUNIv2()); uint256 totalSupplywraps = IERC20(unicore.viewwWrappedUNIv2()).totalSupply(); UNICORE_Total_LP_Supply = totalSupplywraps; uint256 input = (balUnicoreOfUniPair-1).mul(totalSupplywraps).div(balUnicoreOfUniPair); unicore.burnFromUni(input); { (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); uint256 amtWETH; uint256 previousPairBalance = unicore.balanceOf(address(pair)); IERC20(address(unicore)).transfer(address(pair), unicore.balanceOf(address(this))); uint256 nowPairBalance = unicore.balanceOf(address(pair)); if(token0IsWETH){ amtWETH = getAmountOut(nowPairBalance- previousPairBalance, reserve1, reserve0); pair.swap(amtWETH, 0, address(this), ""); ( reserve0, reserve1, ) = pair.getReserves(); require(reserve0 < 1e18, " Burn not sufficient"); } else{ amtWETH = getAmountOut(nowPairBalance- previousPairBalance, reserve0, reserve1); pair.swap(0, amtWETH, address(this), ""); ( reserve0, reserve1, ) = pair.getReserves(); require(reserve1 < 1e18, " Burn not sufficient"); } uint256 UNICORETotalSupply = unicore.totalSupply(); // 0.6 eth per is the floor we should get more here require(amtWETH > UNICORETotalSupply.mul(60).div(100), " Didn't get enough ETH "); require(amtWETH > 500 ether, " Didn't get enough ETH"); // sanity Ether_Total_For_UNICORE_LP = amtWETH .mul(Ether_Credit_Per_ENCORE_LP) .div(1e18); wETH.withdraw(amtWETH); unicore.setGovernanceLevel(address(this), 1); UNICORE_Liquidity_Transfered = true; } } //////////// /// ENCORE specific functions ////////// function viewCreditedENCORETokens(address person) public view returns (uint256) { (uint256 userAmount, ) = IUNICOREVault(ENCORE_Vault).userInfo(0, person); uint256 userAmountTimelock = ITimelockVault(ENCORE_Vault_Timelock).LPContributed(person); return balanceENCORELP[person].add(userAmount).add(userAmountTimelock); } // Add LP to balance here function addENCORELPTokens() lock public { require(ENCORE_Transfers_Closed == false, "ENCORE LP transfers closed"); uint256 amtAdded = transferTokenHereSupportingFeeOnTransferTokens(ENCORE_LP_Token, IERC20(ENCORE_LP_Token).balanceOf(msg.sender)); balanceENCORELP[msg.sender] = balanceENCORELP[msg.sender].add(amtAdded); } function closeENCORETransfers() onlyOwner public { require(block.timestamp >= contractStartTimestamp.add(2 days), "2 day grace ongoing"); ENCORE_Transfers_Closed = true; } function transferENCORELiquidity(address privateTransferContract) onlyOwner public { require(ENCORE_Transfers_Closed == true, "ENCORE LP transfers still ongoing"); require(ENCORE_Liquidity_Transfered == false, "Already transfered liquidity"); require(IProxyAdmin(ENCORE_Proxy_Admin).owner() == address(this), "Set me as the proxy owner for ENCORE"); require(privateTransferContract != address(0)); IProxyAdmin(ENCORE_Proxy_Admin).transferOwnership(privateTransferContract); // We check 2 contracts with burned LP uint256 burnedLPTokens = IERC20(ENCORE_LP_Token).balanceOf(ENCORE_Token) .add(IERC20(ENCORE_LP_Token).balanceOf(0x2a997EaD7478885a66e6961ac0837800A07492Fc)); ENCORE_Total_LP_Supply = IERC20(ENCORE_LP_Token).totalSupply() - burnedLPTokens; // We calculate total owed to ENCORE LPs Ether_Total_For_Encore_LP = ENCORE_Total_LP_Supply // burned ~100 .mul(Ether_Credit_Per_ENCORE_LP) .div(1e18); // We send out all LP tokens we have IERC20(ENCORE_LP_Token) .transfer(ENCORE_LP_Token, IERC20(ENCORE_LP_Token).balanceOf(address(this))); uint256 ethBalBefore = address(this).balance; ITransferContract(privateTransferContract).run(ENCORE_LP_Token); uint256 newETH = address(this).balance.sub(ethBalBefore); // Make sure we got eth require(newETH > 9200 ether, "Did not recieve enough ether"); //60% max require(newETH.mul(60).div(100) > Ether_Total_For_Encore_LP, "Too much for encore LP"); require(ENCORE_Proxy_Admin != address(0) && Fee_Approver_Permanent != address(0) && Vault_Permanent != address(0), "Sanity check failue"); IProxyAdmin(ENCORE_Proxy_Admin).upgrade(ENCORE_Fee_Approver, Fee_Approver_Permanent); IProxyAdmin(ENCORE_Proxy_Admin).upgrade(ENCORE_Vault, Vault_Permanent); _sendENCOREProxyAdminBackToMultisig(); ENCORE_Liquidity_Transfered = true; } function sendENCOREProxyAdminBackToMultisig() onlyOwner public { return _sendENCOREProxyAdminBackToMultisig(); } function _sendENCOREProxyAdminBackToMultisig() internal { IProxyAdmin(ENCORE_Proxy_Admin).transferOwnership(CORE_MULTISIG); require(IProxyAdmin(ENCORE_Proxy_Admin).owner() == CORE_MULTISIG, "Proxy Ownership Transfer Not Successfull"); } //////////// /// TENS specific functions ////////// function addTENSLPTokens() lock public { require(ENCORE_Transfers_Closed == false, "TENS LP transfers still ongoing"); uint256 amtAdded = transferTokenHereSupportingFeeOnTransferTokens(TENS_LP_Token, IERC20(TENS_LP_Token).balanceOf(msg.sender)); balanceTENSLP[msg.sender] = balanceTENSLP[msg.sender].add(amtAdded); } function viewCreditedTENSTokens(address person) public view returns (uint256) { (uint256 userAmount, ) = IUNICOREVault(TENS_Vault).userInfo(0, person); return balanceTENSLP[person].add(userAmount); } function transferTENSLiquidity(address privateTransferContract) onlyOwner public { require(TENS_Liquidity_Transfered == false, "Already transfered"); require(ENCORE_Liquidity_Transfered == true, "ENCORE has to go first"); require(IProxyAdmin(TENS_Proxy_Admin).owner() == address(this), "Set me as the proxy owner for TENS"); require(IProxyAdmin(TENS_Token).owner() == address(this), "Set me as the owner for TENS"); // same interface require(privateTransferContract != address(0)); IProxyAdmin(TENS_Proxy_Admin).transferOwnership(privateTransferContract); IProxyAdmin(TENS_Token).transferOwnership(privateTransferContract); TENS_Total_LP_Supply = IERC20(TENS_LP_Token).totalSupply(); // We send out all LP tokens we have IERC20(TENS_LP_Token) .transfer(TENS_LP_Token, IERC20(TENS_LP_Token).balanceOf(address(this))); uint256 ethBalBefore = address(this).balance; ITransferContract(privateTransferContract).run(TENS_LP_Token); uint256 newETH = address(this).balance.sub(ethBalBefore); require(newETH > 130 ether, "Did not recieve enough ether"); require(TENS_Fee_Approver_Permanent != address(0) && Vault_Permanent != address(0), "Sanity check failue"); IProxyAdmin(TENS_Proxy_Admin).upgrade(TENS_Vault, Vault_Permanent); TENS_Fee_Approver_Permanent = address ( new TENSFeeApproverPermanent() ); ICORE(TENS_Token).setShouldTransferChecker(TENS_Fee_Approver_Permanent); Ether_Total_For_TENS_LP = newETH .mul(Ether_Credit_Per_ENCORE_LP) .div(1e18); _sendOwnershipOfTENSBackToMultisig(); TENS_Liquidity_Transfered = true; } function sendOwnershipOfTENSBackToMultisig() onlyOwner public { return _sendOwnershipOfTENSBackToMultisig(); } function _sendOwnershipOfTENSBackToMultisig() internal { IProxyAdmin(TENS_Token).transferOwnership(CORE_MULTISIG); require(IProxyAdmin(TENS_Token).owner() == CORE_MULTISIG, "Multisig not owner of token"); // same interface IProxyAdmin(TENS_Proxy_Admin).transferOwnership(CORE_MULTISIG); require(IProxyAdmin(TENS_Proxy_Admin).owner() == CORE_MULTISIG, "Multisig not owner of proxyadmin"); } /////////////////// //// Helper functions ////////////////// function sendETH(address payable to, uint256 amt) internal { // // throw exception on failure to.transfer(amt); } function safeTransfer(address token, address to, uint256 value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'FA Controller: TRANSFER_FAILED'); } function transferTokenHereSupportingFeeOnTransferTokens(address token,uint256 amountTransfer) internal returns (uint256 amtAdded) { uint256 balBefore = IERC20(token).balanceOf(address(this)); require(IERC20(token).transferFrom(msg.sender, address(this), amountTransfer)); amtAdded = IERC20(token).balanceOf(address(this)).sub(balBefore); } function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) internal pure returns (uint256 amountOut) { require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // A function that lets owner remove any tokens from this addrss // note this address shoudn't hold any tokens // And if it does that means someting already went wrong or someone send them to this address function rescueUnsupportedTokens(address token, uint256 amt) public onlyOwner { IERC20(token).transfer(CORE_MULTISIG, amt); } function sendETHToLGE(uint256 amt, address payable lgeContract) onlyOwner public { uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); totalETHSent = totalETHSent.add(amt); require(totalETHSent <= totalETH, "Too much sent"); require(lgeContract != address(0)," no "); sendETH(lgeContract, amt); emit ETHSendToLGE(amt); } function sendETHToTreasury(uint256 amt, address payable to) onlyOwner public { uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); require(totalETHSent == totalETH, "Still money to send to LGE"); require(to != address(0)," no "); sendETH(to, amt); } function getETHLeftToDepositToLGE() public view returns (uint256) { uint256 totalETH = Ether_Total_For_TENS_LP.add(Ether_Total_For_UNICORE_LP).add(Ether_Total_For_Encore_LP); return totalETH - totalETHSent; } function claimLPFromLGE(address lgeContract) onlyOwner public { require(postLGELPTokenAddress != address(0), "LP token address not set."); ILGE(lgeContract).claimLP(); LPClaimedFromLGE = true; totalLPClaimed = IERC20(postLGELPTokenAddress).balanceOf(address(this)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ETHSendToLGE","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"CORE","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CORE_MULTISIG","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CORExWETHPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Fee_Approver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_LP_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Liquidity_Transfered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Proxy_Admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Timelock_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Total_LP_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Transfers_Closed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENCORE_Vault_Timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Credit_Per_ENCORE_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Total_For_Encore_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Total_For_TENS_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Ether_Total_For_UNICORE_LP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Fee_Approver_Permanent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPClaimedFromLGE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Fee_Approver_Permanent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_LP_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Liquidity_Transfered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Proxy_Admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Total_LP_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TENS_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Liquidity_Transfered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Migrated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Reactor_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Snapshot_Block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Total_LP_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNICORE_Vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Vault_Permanent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addENCORELPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addTENSLPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addUNICOREReactors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lgeContract","type":"address"}],"name":"claimLPFromLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeENCORETransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coreVault","outputs":[{"internalType":"contract ICOREVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHLeftToDepositToLGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOwedLP","outputs":[{"internalType":"uint256","name":"LPDebtForUser","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLGELPTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"rescueUnsupportedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendENCOREProxyAdminBackToMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"address payable","name":"lgeContract","type":"address"}],"name":"sendETHToLGE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"sendETHToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendOwnershipOfTENSBackToMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setLPTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"name":"snapshotUNICORE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalETHSent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"privateTransferContract","type":"address"}],"name":"transferENCORELiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"privateTransferContract","type":"address"}],"name":"transferTENSLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferUNICORELiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapFactory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"person","type":"address"}],"name":"viewCreditedENCORETokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"person","type":"address"}],"name":"viewCreditedTENSTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"person","type":"address"}],"name":"viewCreditedUNICOREReactors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506158ea80620000216000396000f3fe6080604052600436106103d25760003560e01c80637d8a5f07116101fd578063cf28f39a11610118578063e853c035116100ab578063f42d20581161007a578063f42d205814610b89578063f42ebbe014610b9e578063f7a3cbc214610bd1578063fc70712e14610be6578063ffd6265614610bfb576103d9565b8063e853c03514610af3578063eefe92a814610b08578063f20edcad14610b1d578063f2fde38b14610b56576103d9565b8063db716042116100e7578063db71604214610a9f578063de44391a14610ab4578063e79459e514610ac9578063e80a120114610ade576103d9565b8063cf28f39a14610a2d578063d5e3e7e814610a60578063d7b65c7d14610a75578063d7bb5dd214610a8a576103d9565b8063a1b07c8311610190578063b948ac7a1161015f578063b948ac7a146109b5578063c36bcc94146109ca578063ca342058146109df578063cbb4b9c214610a18576103d9565b8063a1b07c831461093d578063ae1a331814610952578063af8b242f1461098b578063b636e449146109a0576103d9565b80638da5cb5b116101cc5780638da5cb5b146108e95780639030062b146108fe57806397875697146109135780639a78948214610928576103d9565b80637d8a5f07146108775780637f9d0752146108aa5780638129fc1c146108bf5780638bdb2afa146108d4576103d9565b80634fd6f586116102ed5780636afa77c21161028057806376203ff91161024f57806376203ff9146108235780637c673e27146108385780637c6f419c1461084d5780637d17ccb314610862576103d9565b80636afa77c2146107b15780636b6c0774146107c6578063715018a6146107db578063752f9214146107f0576103d9565b806358551d09116102bc57806358551d091461075d5780635b5a0e7014610772578063674ce1b51461078757806368903aec1461079c576103d9565b80634fd6f586146105cc57806352ffe699146105e157806357e589b114610715578063582cca6014610748576103d9565b80633658ede5116103655780633c82559f116103345780633c82559f146105785780633f0deeb91461058d5780633f4128f6146105a25780634be5a97f146105b7576103d9565b80633658ede5146104e657806338abdd77146104fb57806339bdf7e4146105305780633a53a56d14610563576103d9565b80632c978105116103a15780632c978105146104625780632d6a37c1146104775780632f0619ca1461048c578063352339cd146104d1576103d9565b806302c4eea4146103de578063050f1f0b146104075780631a0cd28e146104385780631df878701461044d576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610c10565b604080519115158252519081900360200190f35b34801561041357600080fd5b5061041c610c19565b604080516001600160a01b039092168252519081900360200190f35b34801561044457600080fd5b5061041c610c28565b34801561045957600080fd5b5061041c610c3d565b34801561046e57600080fd5b5061041c610c4c565b34801561048357600080fd5b5061041c610c5b565b34801561049857600080fd5b506104bf600480360360208110156104af57600080fd5b50356001600160a01b0316610c6a565b60408051918252519081900360200190f35b3480156104dd57600080fd5b5061041c610d20565b3480156104f257600080fd5b5061041c610d34565b34801561050757600080fd5b5061052e6004803603602081101561051e57600080fd5b50356001600160a01b0316610d43565b005b34801561053c57600080fd5b5061052e6004803603602081101561055357600080fd5b50356001600160a01b0316610ed5565b34801561056f57600080fd5b506104bf611678565b34801561058457600080fd5b506104bf61167e565b34801561059957600080fd5b506104bf611684565b3480156105ae57600080fd5b5061041c61168a565b3480156105c357600080fd5b5061052e611699565b3480156105d857600080fd5b5061052e61180a565b3480156105ed57600080fd5b5061052e6004803603604081101561060457600080fd5b81019060208101813564010000000081111561061f57600080fd5b82018360208201111561063157600080fd5b8035906020019184602083028401116401000000008311171561065357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106a357600080fd5b8201836020820111156106b557600080fd5b803590602001918460208302840111640100000000831117156106d757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061194e945050505050565b34801561072157600080fd5b5061052e6004803603602081101561073857600080fd5b50356001600160a01b0316611a92565b34801561075457600080fd5b506103f3612205565b34801561076957600080fd5b506103f361220e565b34801561077e57600080fd5b5061041c61221c565b34801561079357600080fd5b5061041c61222b565b3480156107a857600080fd5b506104bf61223a565b3480156107bd57600080fd5b506104bf612240565b3480156107d257600080fd5b5061041c612246565b3480156107e757600080fd5b5061052e61225b565b3480156107fc57600080fd5b506104bf6004803603602081101561081357600080fd5b50356001600160a01b03166122fd565b34801561082f57600080fd5b5061041c612470565b34801561084457600080fd5b506103f361247f565b34801561085957600080fd5b5061041c61248d565b34801561086e57600080fd5b506104bf61249c565b34801561088357600080fd5b506104bf6004803603602081101561089a57600080fd5b50356001600160a01b03166124a2565b3480156108b657600080fd5b506103f3612596565b3480156108cb57600080fd5b5061052e61259f565b3480156108e057600080fd5b5061041c612b09565b3480156108f557600080fd5b5061041c612b18565b34801561090a57600080fd5b506104bf612b27565b34801561091f57600080fd5b5061041c612b2d565b34801561093457600080fd5b5061041c612b3c565b34801561094957600080fd5b5061041c612b51565b34801561095e57600080fd5b5061052e6004803603604081101561097557600080fd5b506001600160a01b038135169060200135612b60565b34801561099757600080fd5b506103f3612c38565b3480156109ac57600080fd5b5061052e612c41565b3480156109c157600080fd5b5061052e612ca3565b3480156109d657600080fd5b5061041c612d03565b3480156109eb57600080fd5b5061052e60048036036040811015610a0257600080fd5b50803590602001356001600160a01b0316612d12565b348015610a2457600080fd5b506104bf612e34565b348015610a3957600080fd5b506104bf60048036036020811015610a5057600080fd5b50356001600160a01b0316612e3a565b348015610a6c57600080fd5b5061041c612f75565b348015610a8157600080fd5b5061052e612f84565b348015610a9657600080fd5b5061041c6130c8565b348015610aab57600080fd5b5061041c6130d7565b348015610ac057600080fd5b5061052e6130e6565b348015610ad557600080fd5b506104bf61329f565b348015610aea57600080fd5b5061052e6132ca565b348015610aff57600080fd5b5061041c61338d565b348015610b1457600080fd5b5061052e61339c565b348015610b2957600080fd5b5061052e60048036036040811015610b4057600080fd5b50803590602001356001600160a01b0316614741565b348015610b6257600080fd5b5061052e60048036036020811015610b7957600080fd5b50356001600160a01b0316614897565b348015610b9557600080fd5b506104bf614990565b348015610baa57600080fd5b5061052e60048036036020811015610bc157600080fd5b50356001600160a01b0316614996565b348015610bdd57600080fd5b5061041c614a10565b348015610bf257600080fd5b5061041c614a1f565b348015610c0757600080fd5b506104bf614a2e565b60a45460ff1681565b60a6546001600160a01b031681565b60ac546201000090046001600160a01b031681565b60ba546001600160a01b031681565b60af546001600160a01b031681565b60ae546001600160a01b031681565b60b854604080516393f1a40b60e01b81526000600482018190526001600160a01b038581166024840152835191948594610100909104909116926393f1a40b9260448083019392829003018186803b158015610cc557600080fd5b505afa158015610cd9573d6000803e3d6000fd5b505050506040513d6040811015610cef57600080fd5b50516001600160a01b038416600090815260bf6020526040902054909150610d179082614a34565b9150505b919050565b60b85461010090046001600160a01b031681565b609e546001600160a01b031681565b610d4b614a97565b6065546001600160a01b03908116911614610d9b576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b609d546001600160a01b0316610df8576040805162461bcd60e51b815260206004820152601960248201527f4c5020746f6b656e2061646472657373206e6f74207365742e00000000000000604482015290519081900360640190fd5b806001600160a01b031663de44391a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e3357600080fd5b505af1158015610e47573d6000803e3d6000fd5b50506097805460ff191660011790555050609d54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610ea357600080fd5b505afa158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b505160a05550565b610edd614a97565b6065546001600160a01b03908116911614610f2d576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60ac5460ff610100909104161515600114610f795760405162461bcd60e51b81526004018080602001828103825260218152602001806158946021913960400191505060405180910390fd5b60ac5460ff1615610fd1576040805162461bcd60e51b815260206004820152601c60248201527f416c7265616479207472616e736665726564206c697175696469747900000000604482015290519081900360640190fd5b60b15460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505050506040513d602081101561104157600080fd5b50516001600160a01b0316146110885760405162461bcd60e51b81526004018080602001828103825260248152602001806158456024913960400191505060405180910390fd5b6001600160a01b03811661109b57600080fd5b60b1546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b505060b254604080516370a0823160e01b8152732a997ead7478885a66e6961ac0837800a07492fc600482015290516000945061121593506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561116757600080fd5b505afa15801561117b573d6000803e3d6000fd5b505050506040513d602081101561119157600080fd5b505160b25460af54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b1580156111e357600080fd5b505afa1580156111f7573d6000803e3d6000fd5b505050506040513d602081101561120d57600080fd5b505190614a34565b90508060b260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d602081101561129057600080fd5b50510360b681905560b4546112b991670de0b6b3a7640000916112b39190614a9b565b90614af4565b60b55560b254604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b15801561131057600080fd5b505afa158015611324573d6000803e3d6000fd5b505050506040513d602081101561133a57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d60208110156113b557600080fd5b505060b2546040805163148aedc160e21b81526001600160a01b0392831660048201529051479285169163522bb70491602480830192600092919082900301818387803b15801561140557600080fd5b505af1158015611419573d6000803e3d6000fd5b5050505060006114328247614b3690919063ffffffff16565b90506901f2bba5d84f99c000008111611492576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60b5546114a560646112b384603c614a9b565b116114f0576040805162461bcd60e51b81526020600482015260166024820152750546f6f206d75636820666f7220656e636f7265204c560541b604482015290519081900360640190fd5b60b1546001600160a01b0316158015906115145750609e546001600160a01b031615155b801561152a5750609f546001600160a01b031615155b611571576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60b15460ae54609e546040805163266a23b160e21b81526001600160a01b03938416600482015291831660248301525191909216916399a88ec491604480830192600092919082900301818387803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505060b15460ac54609f546040805163266a23b160e21b8152620100009093046001600160a01b039081166004850152918216602484015251921693506399a88ec4925060448082019260009290919082900301818387803b15801561164557600080fd5b505af1158015611659573d6000803e3d6000fd5b50505050611665614b78565b505060ac805460ff191660011790555050565b60b45481565b60a95481565b60a85481565b60a5546001600160a01b031681565b609754610100900460ff16156116e4576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff00191661010017905560a45460ff161561174b576040805162461bcd60e51b815260206004820152601760248201527f554e49434f5245204465706f7369747320636c6f736564000000000000000000604482015290519081900360640190fd5b60a654604080516370a0823160e01b815233600482015290516000926117cf926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b15801561179e57600080fd5b505afa1580156117b2573d6000803e3d6000fd5b505050506040513d60208110156117c857600080fd5b5051614ca0565b33600090815260aa60205260409020549091506117ec9082614a34565b33600090815260aa6020526040902055506097805461ff0019169055565b609754610100900460ff1615611855576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff16156118c0576040805162461bcd60e51b815260206004820152601f60248201527f54454e53204c50207472616e7366657273207374696c6c206f6e676f696e6700604482015290519081900360640190fd5b60bb54604080516370a0823160e01b81523360048201529051600092611913926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b15801561179e57600080fd5b33600090815260bf60205260409020549091506119309082614a34565b33600090815260bf6020526040902055506097805461ff0019169055565b611956614a97565b6065546001600160a01b039081169116146119a6576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60a45460ff1615156001146119ec5760405162461bcd60e51b81526004018080602001828103825260258152602001806156ec6025913960400191505060405180910390fd5b815181518114611a31576040805162461bcd60e51b815260206004820152600b60248201526a15dc9bdb99c81a5b9c1d5d60aa1b604482015290519081900360640190fd5b60005b81811015611a8c57828181518110611a4857fe5b602002602001015160ab6000868481518110611a6057fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611a34565b50505050565b611a9a614a97565b6065546001600160a01b03908116911614611aea576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60b85460ff1615611b37576040805162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481d1c985b9cd9995c995960721b604482015290519081900360640190fd5b60ac5460ff161515600114611b8c576040805162461bcd60e51b8152602060048201526016602482015275115390d3d491481a185cc81d1bc819dbc8199a5c9cdd60521b604482015290519081900360640190fd5b60ba5460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b505050506040513d6020811015611bfc57600080fd5b50516001600160a01b031614611c435760405162461bcd60e51b81526004018080602001828103825260228152602001806156ca6022913960400191505060405180910390fd5b60b95460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611c8957600080fd5b505af1158015611c9d573d6000803e3d6000fd5b505050506040513d6020811015611cb357600080fd5b50516001600160a01b031614611d10576040805162461bcd60e51b815260206004820152601c60248201527f536574206d6520617320746865206f776e657220666f722054454e5300000000604482015290519081900360640190fd5b6001600160a01b038116611d2357600080fd5b60ba546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015611d7157600080fd5b505af1158015611d85573d6000803e3d6000fd5b505060b9546040805163f2fde38b60e01b81526001600160a01b038681166004830152915191909216935063f2fde38b9250602480830192600092919082900301818387803b158015611dd757600080fd5b505af1158015611deb573d6000803e3d6000fd5b5050505060bb60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e3d57600080fd5b505afa158015611e51573d6000803e3d6000fd5b505050506040513d6020811015611e6757600080fd5b505160be5560bb54604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b158015611ec057600080fd5b505afa158015611ed4573d6000803e3d6000fd5b505050506040513d6020811015611eea57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b505050506040513d6020811015611f6557600080fd5b505060bb546040805163148aedc160e21b81526001600160a01b0392831660048201529051479284169163522bb70491602480830192600092919082900301818387803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050506000611fe28247614b3690919063ffffffff16565b905068070c1cc73b00c800008111612041576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60bc546001600160a01b0316158015906120655750609f546001600160a01b031615155b6120ac576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60ba5460b854609f546040805163266a23b160e21b81526101009093046001600160a01b0390811660048501529182166024840152519216916399a88ec49160448082019260009290919082900301818387803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b50505050604051612130906154fd565b604051809103906000f08015801561214c573d6000803e3d6000fd5b5060bc80546001600160a01b0319166001600160a01b03928316179081905560b954604080516310a7a65960e01b81529284166004840152519216916310a7a6599160248082019260009290919082900301818387803b1580156121af57600080fd5b505af11580156121c3573d6000803e3d6000fd5b505050506121e8670de0b6b3a76400006112b360b45484614a9b90919063ffffffff16565b60bd556121f3614e2d565b505060b8805460ff1916600117905550565b60b85460ff1681565b60ac54610100900460ff1681565b609f546001600160a01b031681565b6098546001600160a01b031681565b60a15481565b60b65481565b6097546201000090046001600160a01b031681565b612263614a97565b6065546001600160a01b039081169116146122b3576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b609d546000906001600160a01b031661231857506000610d1b565b60975460ff1661232a57506000610d1b565b33600090815260a3602052604090205460ff1615156001141561234f57506000610d1b565b600061235a836124a2565b9050600061236784612e3a565b9050600061237485610c6a565b905082158015612382575081155b801561238c575080155b1561239d5760009350505050610d1b565b60006123c260b5546123bc60a85460bd54614a3490919063ffffffff16565b90614a34565b9050600084156123f0576123ed856123e760a95460a854614af490919063ffffffff16565b90614a9b565b90505b831561241857612415846123e760b6546112b360b55486614a3490919063ffffffff16565b90505b82156124405761243d836123e760be546112b360bd5486614a3490919063ffffffff16565b90505b612465670de0b6b3a76400006112b3846112b360a05486614a9b90919063ffffffff16565b979650505050505050565b60bc546001600160a01b031681565b60a454610100900460ff1681565b60b0546001600160a01b031681565b60be5481565b60a45460009060ff16156124e5576001600160a01b038216600090815260aa602090815260408083205460ab909252909120546124de91614a34565b9050610d1b565b60a454604080516393f1a40b60e01b81526000600482018190526001600160a01b0386811660248401528351919462010000900416926393f1a40b9260448082019391829003018186803b15801561253c57600080fd5b505afa158015612550573d6000803e3d6000fd5b505050506040513d604081101561256657600080fd5b50516001600160a01b038416600090815260aa602052604090205490915061258e9082614a34565b915050610d1b565b60975460ff1681565b600054610100900460ff16806125b857506125b86150a9565b806125c6575060005460ff16155b6126015760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff1615801561262c576000805460ff1961ff0019909116610100171660011790555b735a16552f59ea34e44ec81e58b3817833e9fd5436321461264c57600080fd5b735a16552f59ea34e44ec81e58b3817833e9fd5436331461266c57600080fd5b6126746150af565b609c80546001600160a01b0319908116735a16552f59ea34e44ec81e58b3817833e9fd5436179091554260a255609f8054821673fed4ec1348a4068d4934e09492428fd92e399e5c179055609e805482167343dd7026284ac8f95eb02bb1bd68d0699b0ae9ca17905560a48054756f31ecd8110bcbc679aefb74c7608241d1b78949000062010000600160b01b03199182161790915560a580548316735506861bbb104baa8d8575e88e22084627b192d817905560b8805474f983ecf91195bd63de8445997082680e688749bc00610100600160a81b031990911617905560b98054831673776ca7ded9474829ea20ad4a5ab7a6ffdb64c79617905560ba80548316732d0c48c5bf930a09f8cd6fae5ac5a16b24e1723a17905560bb8054831673b1b537b7272ba1eda0086e2f480adca72c0b511c17905560bc805483167322c91cdd1e00cd4d7d029f0db94020fce3c486e317905560b180548316731964784ba40c9fd5eed1070c1c38cd5d1d5f9f5517905560af8054831673e0e4839e0c7b2773c58764f9ec3b9622d01a042817905560b280548316732e0721e6c951710725997928dcaaa05daafa031b17905560ae8054831673f3c3ff0ea59d15e82b9620ed7406fa3f6a261f9817905560ac805475def7bdf8ecb450c1d93c5db7c8dbce5894ccdaa90000921691909117905560ad805490911673c2cb86437355f36d42fb8d979ab28b9816ac05451790556128a36127106112b36129e46123e7670de0b6b3a76400006002614af4565b60b481905550600073255ca4596a963883afe0ef9c85ea071cc050128b9050806001600160a01b0316630c37c9966040518163ffffffff1660e01b815260040160206040518083038186803b1580156128fb57600080fd5b505afa15801561290f573d6000803e3d6000fd5b505050506040513d602081101561292557600080fd5b50516097805462010000600160b01b031916620100006001600160a01b03938416021790556040805163279c6b3360e11b8152905191831691634f38d66691600480820192602092909190829003018186803b15801561298457600080fd5b505afa158015612998573d6000803e3d6000fd5b505050506040513d60208110156129ae57600080fd5b5051609980546001600160a01b0319166001600160a01b0392831617905560408051637bb53c2d60e11b815290519183169163f76a785a916004808201926020929091908290030181600087803b158015612a0857600080fd5b505af1158015612a1c573d6000803e3d6000fd5b505050506040513d6020811015612a3257600080fd5b5051609880546001600160a01b0319166001600160a01b039283161790556040805163161d5a0360e11b8152905191831691632c3ab40691600480820192602092909190829003018186803b158015612a8a57600080fd5b505afa158015612a9e573d6000803e3d6000fd5b505050506040513d6020811015612ab457600080fd5b5051609b80546001600160a01b039092166001600160a01b0319928316179055609a805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055508015612b06576000805461ff00191690555b50565b6099546001600160a01b031681565b6065546001600160a01b031690565b60a05481565b60b1546001600160a01b031681565b60a4546201000090046001600160a01b031681565b60b3546001600160a01b031681565b612b68614a97565b6065546001600160a01b03908116911614612bb8576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b609c546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519184169163a9059cbb916044808201926020929091908290030181600087803b158015612c0e57600080fd5b505af1158015612c22573d6000803e3d6000fd5b505050506040513d6020811015611a8c57600080fd5b60ac5460ff1681565b612c49614a97565b6065546001600160a01b03908116911614612c99576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b612ca1614e2d565b565b612cab614a97565b6065546001600160a01b03908116911614612cfb576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b612ca1614b78565b60b2546001600160a01b031681565b612d1a614a97565b6065546001600160a01b03908116911614612d6a576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b6000612d8960b5546123bc60a85460bd54614a3490919063ffffffff16565b90508060a15414612de1576040805162461bcd60e51b815260206004820152601a60248201527f5374696c6c206d6f6e657920746f2073656e6420746f204c4745000000000000604482015290519081900360640190fd5b6001600160a01b038216612e25576040805162461bcd60e51b815260206004808301919091526024820152630103737960e51b604482015290519081900360640190fd5b612e2f8284615160565b505050565b60a75481565b60ac54604080516393f1a40b60e01b81526000600482018190526001600160a01b03858116602484015283519194859462010000909104909116926393f1a40b9260448083019392829003018186803b158015612e9657600080fd5b505afa158015612eaa573d6000803e3d6000fd5b505050506040513d6040811015612ec057600080fd5b505160ad546040805163d6ce2ef960e01b81526001600160a01b0387811660048301529151939450600093919092169163d6ce2ef9916024808301926020929190829003018186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d6020811015612f3f57600080fd5b50516001600160a01b038516600090815260b76020526040902054909150612f6d9082906123bc9085614a34565b949350505050565b609d546001600160a01b031681565b609754610100900460ff1615612fcf576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff161561303a576040805162461bcd60e51b815260206004820152601a60248201527f454e434f5245204c50207472616e736665727320636c6f736564000000000000604482015290519081900360640190fd5b60b254604080516370a0823160e01b8152336004820152905160009261308d926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b15801561179e57600080fd5b33600090815260b760205260409020549091506130aa9082614a34565b33600090815260b76020526040902055506097805461ff0019169055565b609b546001600160a01b031681565b609c546001600160a01b031681565b609754610100900460ff1615613131576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff001916610100179081905560ff161515600114613192576040805162461bcd60e51b8152602060048201526014602482015273139bdd1a1a5b99c81d1bc818db185a5b481e595d60621b604482015290519081900360640190fd5b600061319d336122fd565b116131e2576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b609d546001600160a01b031663a9059cbb336131fd816122fd565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561324357600080fd5b505af1158015613257573d6000803e3d6000fd5b505050506040513d602081101561326d57600080fd5b505161327857600080fd5b33600090815260a360205260409020805460ff191660011790556097805461ff0019169055565b6000806132bf60b5546123bc60a85460bd54614a3490919063ffffffff16565b60a154900391505090565b6132d2614a97565b6065546001600160a01b03908116911614613322576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60a254613332906202a300614a34565b42101561337c576040805162461bcd60e51b81526020600482015260136024820152723220646179206772616365206f6e676f696e6760681b604482015290519081900360640190fd5b60ac805461ff001916610100179055565b60b9546001600160a01b031681565b6133a4614a97565b6065546001600160a01b039081169116146133f4576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60ac5460ff161515600114613449576040805162461bcd60e51b8152602060048201526016602482015275115390d3d491481a185cc81d1bc819dbc8199a5c9cdd60521b604482015290519081900360640190fd5b60a454610100900460ff16156134a6576040805162461bcd60e51b815260206004820152601a60248201527f554e49434f524520616c7265616479207472616e736665726564000000000000604482015290519081900360640190fd5b60a5546040805163c25cc8af60e01b815230600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b1580156134f357600080fd5b505af1158015613507573d6000803e3d6000fd5b505050506040513d602081101561351d57600080fd5b505160ff166002146135605760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b8152735a16552f59ea34e44ec81e58b3817833e9fd5436600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b1580156135c157600080fd5b505af11580156135d5573d6000803e3d6000fd5b505050506040513d60208110156135eb57600080fd5b505160ff1660021461362e5760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b81527305957f3344255fdc9fe172e30016ee148d684313600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b15801561368f57600080fd5b505af11580156136a3573d6000803e3d6000fd5b505050506040513d60208110156136b957600080fd5b505160ff16156136fa5760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b815273e6f32f17be3bf031b4b6150689c1f17ceca375c8600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b505050506040513d602081101561378557600080fd5b505160ff16156137c65760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b815273f4d7a0e8a68345442172f45cabd272c25320aa96600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b15801561382757600080fd5b505af115801561383b573d6000803e3d6000fd5b505050506040513d602081101561385157600080fd5b505160ff16156138925760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b670de0b6b3a76400004710156138de576040805162461bcd60e51b815260206004820152600c60248201526b0408ccacac840daca40cae8d60a31b604482015290519081900360640190fd5b60a554609a5460408051630d0e30db60e41b815290516001600160a01b03938416939092169163d0e30db091670de0b6b3a764000091600480830192600092919082900301818588803b15801561393457600080fd5b505af1158015613948573d6000803e3d6000fd5b50505050506000816001600160a01b031663a19b08376040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561398a57600080fd5b505af115801561399e573d6000803e3d6000fd5b505050506040513d60208110156139b457600080fd5b5051609a5460408051630dfe168160e01b815290519293506000926001600160a01b0392831692851691630dfe1681916004808301926020929190829003018186803b158015613a0357600080fd5b505afa158015613a17573d6000803e3d6000fd5b505050506040513d6020811015613a2d57600080fd5b505160408051630240bc6b60e21b815290516001600160a01b039283169390931493506000928392861691630902f1ac916004808301926060929190829003018186803b158015613a7d57600080fd5b505afa158015613a91573d6000803e3d6000fd5b505050506040513d6060811015613aa757600080fd5b508051602091820151609a546040805163a9059cbb60e01b81526001600160a01b038a81166004830152670de0b6b3a7640000602483015291516001600160701b039586169850949093169550169263a9059cbb926044808401938290030181600087803b158015613b1857600080fd5b505af1158015613b2c573d6000803e3d6000fd5b505050506040513d6020811015613b4257600080fd5b50600090508315613be357613b60670de0b6b3a76400008484615196565b6040805163022c0d9f60e01b815260006004820181905260248201849052306044830152608060648301526084820181905291519293506001600160a01b0388169263022c0d9f9260c48084019391929182900301818387803b158015613bc657600080fd5b505af1158015613bda573d6000803e3d6000fd5b50505050613c75565b613bf6670de0b6b3a76400008385615196565b6040805163022c0d9f60e01b815260048101839052600060248201819052306044830152608060648301526084820181905291519293506001600160a01b0388169263022c0d9f9260c48084019391929182900301818387803b158015613c5c57600080fd5b505af1158015613c70573d6000803e3d6000fd5b505050505b60408051636817031b60e01b815230600482015290516001600160a01b03881691636817031b91602480830192600092919082900301818387803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b50505050856001600160a01b031663a97919b260646040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613d1b57600080fd5b505af1158015613d2f573d6000803e3d6000fd5b505050506000866001600160a01b03166370a08231886001600160a01b031663a19b08376040518163ffffffff1660e01b8152600401602060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050506040513d6020811015613da957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301525160248083019260209291908290030181600087803b158015613df257600080fd5b505af1158015613e06573d6000803e3d6000fd5b505050506040513d6020811015613e1c57600080fd5b505160408051635158533760e11b815290519192506000916001600160a01b038a169163a2b0a66e91600480830192602092919082900301818787803b158015613e6557600080fd5b505af1158015613e79573d6000803e3d6000fd5b505050506040513d6020811015613e8f57600080fd5b5051604080516318160ddd60e01b815290516001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b158015613ed357600080fd5b505afa158015613ee7573d6000803e3d6000fd5b505050506040513d6020811015613efd57600080fd5b505160a981905590506000613f1a836112b3600019820185614a9b565b9050886001600160a01b0316631fca1d65826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613f6257600080fd5b505af1158015613f76573d6000803e3d6000fd5b50505050600080896001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613fb657600080fd5b505afa158015613fca573d6000803e3d6000fd5b505050506040513d6060811015613fe057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506001600160701b031691506001600160701b031691506000808c6001600160a01b03166370a082318d6040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561406e57600080fd5b505af1158015614082573d6000803e3d6000fd5b505050506040513d602081101561409857600080fd5b5051604080516370a0823160e01b815230600482015290519192506001600160a01b038f169163a9059cbb918f9184916370a082319160248083019260209291908290030181600087803b1580156140ef57600080fd5b505af1158015614103573d6000803e3d6000fd5b505050506040513d602081101561411957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561416a57600080fd5b505af115801561417e573d6000803e3d6000fd5b505050506040513d602081101561419457600080fd5b81019080805190602001909291905050505060008d6001600160a01b03166370a082318e6040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156141f757600080fd5b505af115801561420b573d6000803e3d6000fd5b505050506040513d602081101561422157600080fd5b505190508b1561439a576142388282038587615196565b92508c6001600160a01b031663022c0d9f846000306040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b0316815260200180602001828103825260008152602001602001945050505050600060405180830381600087803b1580156142ae57600080fd5b505af11580156142c2573d6000803e3d6000fd5b505050508c6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142ff57600080fd5b505afa158015614313573d6000803e3d6000fd5b505050506040513d606081101561432957600080fd5b5080516020909101516001600160701b039182169650169350670de0b6b3a76400008510614395576040805162461bcd60e51b815260206004820152601460248201527308109d5c9b881b9bdd081cdd59999a58da595b9d60621b604482015290519081900360640190fd5b614504565b6143a78282038686615196565b92508c6001600160a01b031663022c0d9f600085306040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b0316815260200180602001828103825260008152602001602001945050505050600060405180830381600087803b15801561441d57600080fd5b505af1158015614431573d6000803e3d6000fd5b505050508c6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561446e57600080fd5b505afa158015614482573d6000803e3d6000fd5b505050506040513d606081101561449857600080fd5b5080516020909101516001600160701b039182169650169350670de0b6b3a76400008410614504576040805162461bcd60e51b815260206004820152601460248201527308109d5c9b881b9bdd081cdd59999a58da595b9d60621b604482015290519081900360640190fd5b60008e6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561454157600080fd5b505af1158015614555573d6000803e3d6000fd5b505050506040513d602081101561456b57600080fd5b5051905061457f60646112b383603c614a9b565b84116145d2576040805162461bcd60e51b815260206004820152601760248201527f204469646e27742067657420656e6f7567682045544820000000000000000000604482015290519081900360640190fd5b681b1ae4d6e2ef5000008411614628576040805162461bcd60e51b815260206004820152601660248201527504088d2c8dc4ee840cecae840cadcdeeaced0408aa8960531b604482015290519081900360640190fd5b614649670de0b6b3a76400006112b360b45487614a9b90919063ffffffff16565b60a855609a5460408051632e1a7d4d60e01b81526004810187905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561469957600080fd5b505af11580156146ad573d6000803e3d6000fd5b505050508e6001600160a01b0316632e7fae313060016040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561470957600080fd5b505af115801561471d573d6000803e3d6000fd5b505060a4805461ff0019166101001790555050505050505050505050505050505050565b614749614a97565b6065546001600160a01b03908116911614614799576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60006147b860b5546123bc60a85460bd54614a3490919063ffffffff16565b60a1549091506147c89084614a34565b60a1819055811015614811576040805162461bcd60e51b815260206004820152600d60248201526c151bdbc81b5d58da081cd95b9d609a1b604482015290519081900360640190fd5b6001600160a01b038216614855576040805162461bcd60e51b815260206004808301919091526024820152630103737960e51b604482015290519081900360640190fd5b61485f8284615160565b6040805184815290517fb8b41fad14a0213642b056f1575bcff86305c7b67b8ed71fef3f14808f716d0d9181900360200190a1505050565b61489f614a97565b6065546001600160a01b039081169116146148ef576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b6001600160a01b0381166149345760405162461bcd60e51b81526004018080602001828103825260268152602001806157406026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60b55481565b61499e614a97565b6065546001600160a01b039081169116146149ee576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b60bb546001600160a01b031681565b60ad546001600160a01b031681565b60bd5481565b600082820183811015614a8e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b3390565b600082614aaa57506000614a91565b82820282848281614ab757fe5b0414614a8e5760405162461bcd60e51b81526004018080602001828103825260218152602001806157d66021913960400191505060405180910390fd5b6000614a8e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615268565b6000614a8e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061530a565b60b154609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b5050609c5460b15460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015614c2f57600080fd5b505af1158015614c43573d6000803e3d6000fd5b505050506040513d6020811015614c5957600080fd5b50516001600160a01b031614612ca15760405162461bcd60e51b81526004018080602001828103825260288152602001806157666028913960400191505060405180910390fd5b600080836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614cf057600080fd5b505afa158015614d04573d6000803e3d6000fd5b505050506040513d6020811015614d1a57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810186905290519192506001600160a01b038616916323b872dd916064808201926020929091908290030181600087803b158015614d7557600080fd5b505af1158015614d89573d6000803e3d6000fd5b505050506040513d6020811015614d9f57600080fd5b5051614daa57600080fd5b612f6d81856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614dfb57600080fd5b505afa158015614e0f573d6000803e3d6000fd5b505050506040513d6020811015614e2557600080fd5b505190614b36565b60b954609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015614e7e57600080fd5b505af1158015614e92573d6000803e3d6000fd5b5050609c5460b95460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015614ee457600080fd5b505af1158015614ef8573d6000803e3d6000fd5b505050506040513d6020811015614f0e57600080fd5b50516001600160a01b031614614f6b576040805162461bcd60e51b815260206004820152601b60248201527f4d756c7469736967206e6f74206f776e6572206f6620746f6b656e0000000000604482015290519081900360640190fd5b60ba54609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015614fbc57600080fd5b505af1158015614fd0573d6000803e3d6000fd5b5050609c5460ba5460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b15801561502257600080fd5b505af1158015615036573d6000803e3d6000fd5b505050506040513d602081101561504c57600080fd5b50516001600160a01b031614612ca1576040805162461bcd60e51b815260206004820181905260248201527f4d756c7469736967206e6f74206f776e6572206f662070726f787961646d696e604482015290519081900360640190fd5b303b1590565b600054610100900460ff16806150c857506150c86150a9565b806150d6575060005460ff16155b6151115760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff1615801561513c576000805460ff1961ff0019909116610100171660011790555b615144615364565b61514c615404565b8015612b06576000805461ff001916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612e2f573d6000803e3d6000fd5b60008084116151d65760405162461bcd60e51b815260040180806020018281038252602b815260200180615869602b913960400191505060405180910390fd5b6000831180156151e65750600082115b6152215760405162461bcd60e51b815260040180806020018281038252602881526020018061578e6028913960400191505060405180910390fd5b600061522f856103e5614a9b565b9050600061523d8285614a9b565b90506000615251836123bc886103e8614a9b565b905080828161525c57fe5b04979650505050505050565b600081836152f45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152b95781810151838201526020016152a1565b50505050905090810190601f1680156152e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161530057fe5b0495945050505050565b6000818484111561535c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156152b95781810151838201526020016152a1565b505050900390565b600054610100900460ff168061537d575061537d6150a9565b8061538b575060005460ff16155b6153c65760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff1615801561514c576000805460ff1961ff0019909116610100171660011790558015612b06576000805461ff001916905550565b600054610100900460ff168061541d575061541d6150a9565b8061542b575060005460ff16155b6154665760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff16158015615491576000805460ff1961ff0019909116610100171660011790555b600061549b614a97565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612b06576000805461ff001916905550565b6101bf8061550b8339019056fe608060405234801561001057600080fd5b50600080546001600160a01b03191673b1b537b7272ba1eda0086e2f480adca72c0b511c179055610179806100466000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630484c7281461003b578063301a58011461005f575b600080fd5b6100436100b3565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603606081101561007557600080fd5b506001600160a01b038135811691602081013590911690604001356100c2565b60408051938452602084019290925282820152519081900360600190f35b6000546001600160a01b031681565b60008054819081906001600160a01b03878116911614806100f057506000546001600160a01b038681169116145b15610138576040805162461bcd60e51b81526020600482015260136024820152722a22a7299034b9903232b83932b1b0ba32b21760691b604482015290519081900360640190fd5b92959094509192505056fea26469706673582212208cdc056ed09e223aaae416e2b8bd07655d2b7c5cfd8a70f1144af0f36045525e64736f6c634300060c0033536574206d65206173207468652070726f7879206f776e657220666f722054454e53554e49434f5245204465706f7369747320617265207374696c6c206e6f7420636c6f736564496e636f72726563746c792073657420676f7665726e616e6365206c6576656c2c2063616e27742070726f636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737350726f7879204f776e657273686970205472616e73666572204e6f74205375636365737366756c6c556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459434f5245204d69677261746f723a20457865637574696f6e204c6f636b656400536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564536574206d65206173207468652070726f7879206f776e657220666f7220454e434f5245556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54454e434f5245204c50207472616e7366657273207374696c6c206f6e676f696e67a2646970667358221220ead021f8861350596eee2e52f1d9ac906bfefcc9110199ca6c9126482e7bd4ce64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106103d25760003560e01c80637d8a5f07116101fd578063cf28f39a11610118578063e853c035116100ab578063f42d20581161007a578063f42d205814610b89578063f42ebbe014610b9e578063f7a3cbc214610bd1578063fc70712e14610be6578063ffd6265614610bfb576103d9565b8063e853c03514610af3578063eefe92a814610b08578063f20edcad14610b1d578063f2fde38b14610b56576103d9565b8063db716042116100e7578063db71604214610a9f578063de44391a14610ab4578063e79459e514610ac9578063e80a120114610ade576103d9565b8063cf28f39a14610a2d578063d5e3e7e814610a60578063d7b65c7d14610a75578063d7bb5dd214610a8a576103d9565b8063a1b07c8311610190578063b948ac7a1161015f578063b948ac7a146109b5578063c36bcc94146109ca578063ca342058146109df578063cbb4b9c214610a18576103d9565b8063a1b07c831461093d578063ae1a331814610952578063af8b242f1461098b578063b636e449146109a0576103d9565b80638da5cb5b116101cc5780638da5cb5b146108e95780639030062b146108fe57806397875697146109135780639a78948214610928576103d9565b80637d8a5f07146108775780637f9d0752146108aa5780638129fc1c146108bf5780638bdb2afa146108d4576103d9565b80634fd6f586116102ed5780636afa77c21161028057806376203ff91161024f57806376203ff9146108235780637c673e27146108385780637c6f419c1461084d5780637d17ccb314610862576103d9565b80636afa77c2146107b15780636b6c0774146107c6578063715018a6146107db578063752f9214146107f0576103d9565b806358551d09116102bc57806358551d091461075d5780635b5a0e7014610772578063674ce1b51461078757806368903aec1461079c576103d9565b80634fd6f586146105cc57806352ffe699146105e157806357e589b114610715578063582cca6014610748576103d9565b80633658ede5116103655780633c82559f116103345780633c82559f146105785780633f0deeb91461058d5780633f4128f6146105a25780634be5a97f146105b7576103d9565b80633658ede5146104e657806338abdd77146104fb57806339bdf7e4146105305780633a53a56d14610563576103d9565b80632c978105116103a15780632c978105146104625780632d6a37c1146104775780632f0619ca1461048c578063352339cd146104d1576103d9565b806302c4eea4146103de578063050f1f0b146104075780631a0cd28e146104385780631df878701461044d576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610c10565b604080519115158252519081900360200190f35b34801561041357600080fd5b5061041c610c19565b604080516001600160a01b039092168252519081900360200190f35b34801561044457600080fd5b5061041c610c28565b34801561045957600080fd5b5061041c610c3d565b34801561046e57600080fd5b5061041c610c4c565b34801561048357600080fd5b5061041c610c5b565b34801561049857600080fd5b506104bf600480360360208110156104af57600080fd5b50356001600160a01b0316610c6a565b60408051918252519081900360200190f35b3480156104dd57600080fd5b5061041c610d20565b3480156104f257600080fd5b5061041c610d34565b34801561050757600080fd5b5061052e6004803603602081101561051e57600080fd5b50356001600160a01b0316610d43565b005b34801561053c57600080fd5b5061052e6004803603602081101561055357600080fd5b50356001600160a01b0316610ed5565b34801561056f57600080fd5b506104bf611678565b34801561058457600080fd5b506104bf61167e565b34801561059957600080fd5b506104bf611684565b3480156105ae57600080fd5b5061041c61168a565b3480156105c357600080fd5b5061052e611699565b3480156105d857600080fd5b5061052e61180a565b3480156105ed57600080fd5b5061052e6004803603604081101561060457600080fd5b81019060208101813564010000000081111561061f57600080fd5b82018360208201111561063157600080fd5b8035906020019184602083028401116401000000008311171561065357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106a357600080fd5b8201836020820111156106b557600080fd5b803590602001918460208302840111640100000000831117156106d757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061194e945050505050565b34801561072157600080fd5b5061052e6004803603602081101561073857600080fd5b50356001600160a01b0316611a92565b34801561075457600080fd5b506103f3612205565b34801561076957600080fd5b506103f361220e565b34801561077e57600080fd5b5061041c61221c565b34801561079357600080fd5b5061041c61222b565b3480156107a857600080fd5b506104bf61223a565b3480156107bd57600080fd5b506104bf612240565b3480156107d257600080fd5b5061041c612246565b3480156107e757600080fd5b5061052e61225b565b3480156107fc57600080fd5b506104bf6004803603602081101561081357600080fd5b50356001600160a01b03166122fd565b34801561082f57600080fd5b5061041c612470565b34801561084457600080fd5b506103f361247f565b34801561085957600080fd5b5061041c61248d565b34801561086e57600080fd5b506104bf61249c565b34801561088357600080fd5b506104bf6004803603602081101561089a57600080fd5b50356001600160a01b03166124a2565b3480156108b657600080fd5b506103f3612596565b3480156108cb57600080fd5b5061052e61259f565b3480156108e057600080fd5b5061041c612b09565b3480156108f557600080fd5b5061041c612b18565b34801561090a57600080fd5b506104bf612b27565b34801561091f57600080fd5b5061041c612b2d565b34801561093457600080fd5b5061041c612b3c565b34801561094957600080fd5b5061041c612b51565b34801561095e57600080fd5b5061052e6004803603604081101561097557600080fd5b506001600160a01b038135169060200135612b60565b34801561099757600080fd5b506103f3612c38565b3480156109ac57600080fd5b5061052e612c41565b3480156109c157600080fd5b5061052e612ca3565b3480156109d657600080fd5b5061041c612d03565b3480156109eb57600080fd5b5061052e60048036036040811015610a0257600080fd5b50803590602001356001600160a01b0316612d12565b348015610a2457600080fd5b506104bf612e34565b348015610a3957600080fd5b506104bf60048036036020811015610a5057600080fd5b50356001600160a01b0316612e3a565b348015610a6c57600080fd5b5061041c612f75565b348015610a8157600080fd5b5061052e612f84565b348015610a9657600080fd5b5061041c6130c8565b348015610aab57600080fd5b5061041c6130d7565b348015610ac057600080fd5b5061052e6130e6565b348015610ad557600080fd5b506104bf61329f565b348015610aea57600080fd5b5061052e6132ca565b348015610aff57600080fd5b5061041c61338d565b348015610b1457600080fd5b5061052e61339c565b348015610b2957600080fd5b5061052e60048036036040811015610b4057600080fd5b50803590602001356001600160a01b0316614741565b348015610b6257600080fd5b5061052e60048036036020811015610b7957600080fd5b50356001600160a01b0316614897565b348015610b9557600080fd5b506104bf614990565b348015610baa57600080fd5b5061052e60048036036020811015610bc157600080fd5b50356001600160a01b0316614996565b348015610bdd57600080fd5b5061041c614a10565b348015610bf257600080fd5b5061041c614a1f565b348015610c0757600080fd5b506104bf614a2e565b60a45460ff1681565b60a6546001600160a01b031681565b60ac546201000090046001600160a01b031681565b60ba546001600160a01b031681565b60af546001600160a01b031681565b60ae546001600160a01b031681565b60b854604080516393f1a40b60e01b81526000600482018190526001600160a01b038581166024840152835191948594610100909104909116926393f1a40b9260448083019392829003018186803b158015610cc557600080fd5b505afa158015610cd9573d6000803e3d6000fd5b505050506040513d6040811015610cef57600080fd5b50516001600160a01b038416600090815260bf6020526040902054909150610d179082614a34565b9150505b919050565b60b85461010090046001600160a01b031681565b609e546001600160a01b031681565b610d4b614a97565b6065546001600160a01b03908116911614610d9b576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b609d546001600160a01b0316610df8576040805162461bcd60e51b815260206004820152601960248201527f4c5020746f6b656e2061646472657373206e6f74207365742e00000000000000604482015290519081900360640190fd5b806001600160a01b031663de44391a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e3357600080fd5b505af1158015610e47573d6000803e3d6000fd5b50506097805460ff191660011790555050609d54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610ea357600080fd5b505afa158015610eb7573d6000803e3d6000fd5b505050506040513d6020811015610ecd57600080fd5b505160a05550565b610edd614a97565b6065546001600160a01b03908116911614610f2d576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60ac5460ff610100909104161515600114610f795760405162461bcd60e51b81526004018080602001828103825260218152602001806158946021913960400191505060405180910390fd5b60ac5460ff1615610fd1576040805162461bcd60e51b815260206004820152601c60248201527f416c7265616479207472616e736665726564206c697175696469747900000000604482015290519081900360640190fd5b60b15460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505050506040513d602081101561104157600080fd5b50516001600160a01b0316146110885760405162461bcd60e51b81526004018080602001828103825260248152602001806158456024913960400191505060405180910390fd5b6001600160a01b03811661109b57600080fd5b60b1546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b505060b254604080516370a0823160e01b8152732a997ead7478885a66e6961ac0837800a07492fc600482015290516000945061121593506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561116757600080fd5b505afa15801561117b573d6000803e3d6000fd5b505050506040513d602081101561119157600080fd5b505160b25460af54604080516370a0823160e01b81526001600160a01b039283166004820152905191909216916370a08231916024808301926020929190829003018186803b1580156111e357600080fd5b505afa1580156111f7573d6000803e3d6000fd5b505050506040513d602081101561120d57600080fd5b505190614a34565b90508060b260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d602081101561129057600080fd5b50510360b681905560b4546112b991670de0b6b3a7640000916112b39190614a9b565b90614af4565b60b55560b254604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b15801561131057600080fd5b505afa158015611324573d6000803e3d6000fd5b505050506040513d602081101561133a57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561138b57600080fd5b505af115801561139f573d6000803e3d6000fd5b505050506040513d60208110156113b557600080fd5b505060b2546040805163148aedc160e21b81526001600160a01b0392831660048201529051479285169163522bb70491602480830192600092919082900301818387803b15801561140557600080fd5b505af1158015611419573d6000803e3d6000fd5b5050505060006114328247614b3690919063ffffffff16565b90506901f2bba5d84f99c000008111611492576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60b5546114a560646112b384603c614a9b565b116114f0576040805162461bcd60e51b81526020600482015260166024820152750546f6f206d75636820666f7220656e636f7265204c560541b604482015290519081900360640190fd5b60b1546001600160a01b0316158015906115145750609e546001600160a01b031615155b801561152a5750609f546001600160a01b031615155b611571576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60b15460ae54609e546040805163266a23b160e21b81526001600160a01b03938416600482015291831660248301525191909216916399a88ec491604480830192600092919082900301818387803b1580156115cc57600080fd5b505af11580156115e0573d6000803e3d6000fd5b505060b15460ac54609f546040805163266a23b160e21b8152620100009093046001600160a01b039081166004850152918216602484015251921693506399a88ec4925060448082019260009290919082900301818387803b15801561164557600080fd5b505af1158015611659573d6000803e3d6000fd5b50505050611665614b78565b505060ac805460ff191660011790555050565b60b45481565b60a95481565b60a85481565b60a5546001600160a01b031681565b609754610100900460ff16156116e4576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff00191661010017905560a45460ff161561174b576040805162461bcd60e51b815260206004820152601760248201527f554e49434f5245204465706f7369747320636c6f736564000000000000000000604482015290519081900360640190fd5b60a654604080516370a0823160e01b815233600482015290516000926117cf926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b15801561179e57600080fd5b505afa1580156117b2573d6000803e3d6000fd5b505050506040513d60208110156117c857600080fd5b5051614ca0565b33600090815260aa60205260409020549091506117ec9082614a34565b33600090815260aa6020526040902055506097805461ff0019169055565b609754610100900460ff1615611855576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff16156118c0576040805162461bcd60e51b815260206004820152601f60248201527f54454e53204c50207472616e7366657273207374696c6c206f6e676f696e6700604482015290519081900360640190fd5b60bb54604080516370a0823160e01b81523360048201529051600092611913926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b15801561179e57600080fd5b33600090815260bf60205260409020549091506119309082614a34565b33600090815260bf6020526040902055506097805461ff0019169055565b611956614a97565b6065546001600160a01b039081169116146119a6576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60a45460ff1615156001146119ec5760405162461bcd60e51b81526004018080602001828103825260258152602001806156ec6025913960400191505060405180910390fd5b815181518114611a31576040805162461bcd60e51b815260206004820152600b60248201526a15dc9bdb99c81a5b9c1d5d60aa1b604482015290519081900360640190fd5b60005b81811015611a8c57828181518110611a4857fe5b602002602001015160ab6000868481518110611a6057fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002055600101611a34565b50505050565b611a9a614a97565b6065546001600160a01b03908116911614611aea576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60b85460ff1615611b37576040805162461bcd60e51b8152602060048201526012602482015271105b1c9958591e481d1c985b9cd9995c995960721b604482015290519081900360640190fd5b60ac5460ff161515600114611b8c576040805162461bcd60e51b8152602060048201526016602482015275115390d3d491481a185cc81d1bc819dbc8199a5c9cdd60521b604482015290519081900360640190fd5b60ba5460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b505050506040513d6020811015611bfc57600080fd5b50516001600160a01b031614611c435760405162461bcd60e51b81526004018080602001828103825260228152602001806156ca6022913960400191505060405180910390fd5b60b95460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b9160048083019260209291908290030181600087803b158015611c8957600080fd5b505af1158015611c9d573d6000803e3d6000fd5b505050506040513d6020811015611cb357600080fd5b50516001600160a01b031614611d10576040805162461bcd60e51b815260206004820152601c60248201527f536574206d6520617320746865206f776e657220666f722054454e5300000000604482015290519081900360640190fd5b6001600160a01b038116611d2357600080fd5b60ba546040805163f2fde38b60e01b81526001600160a01b0384811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015611d7157600080fd5b505af1158015611d85573d6000803e3d6000fd5b505060b9546040805163f2fde38b60e01b81526001600160a01b038681166004830152915191909216935063f2fde38b9250602480830192600092919082900301818387803b158015611dd757600080fd5b505af1158015611deb573d6000803e3d6000fd5b5050505060bb60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e3d57600080fd5b505afa158015611e51573d6000803e3d6000fd5b505050506040513d6020811015611e6757600080fd5b505160be5560bb54604080516370a0823160e01b815230600482015290516001600160a01b039092169163a9059cbb91839182916370a08231916024808301926020929190829003018186803b158015611ec057600080fd5b505afa158015611ed4573d6000803e3d6000fd5b505050506040513d6020811015611eea57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015611f3b57600080fd5b505af1158015611f4f573d6000803e3d6000fd5b505050506040513d6020811015611f6557600080fd5b505060bb546040805163148aedc160e21b81526001600160a01b0392831660048201529051479284169163522bb70491602480830192600092919082900301818387803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050506000611fe28247614b3690919063ffffffff16565b905068070c1cc73b00c800008111612041576040805162461bcd60e51b815260206004820152601c60248201527f446964206e6f74207265636965766520656e6f75676820657468657200000000604482015290519081900360640190fd5b60bc546001600160a01b0316158015906120655750609f546001600160a01b031615155b6120ac576040805162461bcd60e51b815260206004820152601360248201527253616e69747920636865636b206661696c756560681b604482015290519081900360640190fd5b60ba5460b854609f546040805163266a23b160e21b81526101009093046001600160a01b0390811660048501529182166024840152519216916399a88ec49160448082019260009290919082900301818387803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b50505050604051612130906154fd565b604051809103906000f08015801561214c573d6000803e3d6000fd5b5060bc80546001600160a01b0319166001600160a01b03928316179081905560b954604080516310a7a65960e01b81529284166004840152519216916310a7a6599160248082019260009290919082900301818387803b1580156121af57600080fd5b505af11580156121c3573d6000803e3d6000fd5b505050506121e8670de0b6b3a76400006112b360b45484614a9b90919063ffffffff16565b60bd556121f3614e2d565b505060b8805460ff1916600117905550565b60b85460ff1681565b60ac54610100900460ff1681565b609f546001600160a01b031681565b6098546001600160a01b031681565b60a15481565b60b65481565b6097546201000090046001600160a01b031681565b612263614a97565b6065546001600160a01b039081169116146122b3576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b609d546000906001600160a01b031661231857506000610d1b565b60975460ff1661232a57506000610d1b565b33600090815260a3602052604090205460ff1615156001141561234f57506000610d1b565b600061235a836124a2565b9050600061236784612e3a565b9050600061237485610c6a565b905082158015612382575081155b801561238c575080155b1561239d5760009350505050610d1b565b60006123c260b5546123bc60a85460bd54614a3490919063ffffffff16565b90614a34565b9050600084156123f0576123ed856123e760a95460a854614af490919063ffffffff16565b90614a9b565b90505b831561241857612415846123e760b6546112b360b55486614a3490919063ffffffff16565b90505b82156124405761243d836123e760be546112b360bd5486614a3490919063ffffffff16565b90505b612465670de0b6b3a76400006112b3846112b360a05486614a9b90919063ffffffff16565b979650505050505050565b60bc546001600160a01b031681565b60a454610100900460ff1681565b60b0546001600160a01b031681565b60be5481565b60a45460009060ff16156124e5576001600160a01b038216600090815260aa602090815260408083205460ab909252909120546124de91614a34565b9050610d1b565b60a454604080516393f1a40b60e01b81526000600482018190526001600160a01b0386811660248401528351919462010000900416926393f1a40b9260448082019391829003018186803b15801561253c57600080fd5b505afa158015612550573d6000803e3d6000fd5b505050506040513d604081101561256657600080fd5b50516001600160a01b038416600090815260aa602052604090205490915061258e9082614a34565b915050610d1b565b60975460ff1681565b600054610100900460ff16806125b857506125b86150a9565b806125c6575060005460ff16155b6126015760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff1615801561262c576000805460ff1961ff0019909116610100171660011790555b735a16552f59ea34e44ec81e58b3817833e9fd5436321461264c57600080fd5b735a16552f59ea34e44ec81e58b3817833e9fd5436331461266c57600080fd5b6126746150af565b609c80546001600160a01b0319908116735a16552f59ea34e44ec81e58b3817833e9fd5436179091554260a255609f8054821673fed4ec1348a4068d4934e09492428fd92e399e5c179055609e805482167343dd7026284ac8f95eb02bb1bd68d0699b0ae9ca17905560a48054756f31ecd8110bcbc679aefb74c7608241d1b78949000062010000600160b01b03199182161790915560a580548316735506861bbb104baa8d8575e88e22084627b192d817905560b8805474f983ecf91195bd63de8445997082680e688749bc00610100600160a81b031990911617905560b98054831673776ca7ded9474829ea20ad4a5ab7a6ffdb64c79617905560ba80548316732d0c48c5bf930a09f8cd6fae5ac5a16b24e1723a17905560bb8054831673b1b537b7272ba1eda0086e2f480adca72c0b511c17905560bc805483167322c91cdd1e00cd4d7d029f0db94020fce3c486e317905560b180548316731964784ba40c9fd5eed1070c1c38cd5d1d5f9f5517905560af8054831673e0e4839e0c7b2773c58764f9ec3b9622d01a042817905560b280548316732e0721e6c951710725997928dcaaa05daafa031b17905560ae8054831673f3c3ff0ea59d15e82b9620ed7406fa3f6a261f9817905560ac805475def7bdf8ecb450c1d93c5db7c8dbce5894ccdaa90000921691909117905560ad805490911673c2cb86437355f36d42fb8d979ab28b9816ac05451790556128a36127106112b36129e46123e7670de0b6b3a76400006002614af4565b60b481905550600073255ca4596a963883afe0ef9c85ea071cc050128b9050806001600160a01b0316630c37c9966040518163ffffffff1660e01b815260040160206040518083038186803b1580156128fb57600080fd5b505afa15801561290f573d6000803e3d6000fd5b505050506040513d602081101561292557600080fd5b50516097805462010000600160b01b031916620100006001600160a01b03938416021790556040805163279c6b3360e11b8152905191831691634f38d66691600480820192602092909190829003018186803b15801561298457600080fd5b505afa158015612998573d6000803e3d6000fd5b505050506040513d60208110156129ae57600080fd5b5051609980546001600160a01b0319166001600160a01b0392831617905560408051637bb53c2d60e11b815290519183169163f76a785a916004808201926020929091908290030181600087803b158015612a0857600080fd5b505af1158015612a1c573d6000803e3d6000fd5b505050506040513d6020811015612a3257600080fd5b5051609880546001600160a01b0319166001600160a01b039283161790556040805163161d5a0360e11b8152905191831691632c3ab40691600480820192602092909190829003018186803b158015612a8a57600080fd5b505afa158015612a9e573d6000803e3d6000fd5b505050506040513d6020811015612ab457600080fd5b5051609b80546001600160a01b039092166001600160a01b0319928316179055609a805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055508015612b06576000805461ff00191690555b50565b6099546001600160a01b031681565b6065546001600160a01b031690565b60a05481565b60b1546001600160a01b031681565b60a4546201000090046001600160a01b031681565b60b3546001600160a01b031681565b612b68614a97565b6065546001600160a01b03908116911614612bb8576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b609c546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519184169163a9059cbb916044808201926020929091908290030181600087803b158015612c0e57600080fd5b505af1158015612c22573d6000803e3d6000fd5b505050506040513d6020811015611a8c57600080fd5b60ac5460ff1681565b612c49614a97565b6065546001600160a01b03908116911614612c99576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b612ca1614e2d565b565b612cab614a97565b6065546001600160a01b03908116911614612cfb576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b612ca1614b78565b60b2546001600160a01b031681565b612d1a614a97565b6065546001600160a01b03908116911614612d6a576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b6000612d8960b5546123bc60a85460bd54614a3490919063ffffffff16565b90508060a15414612de1576040805162461bcd60e51b815260206004820152601a60248201527f5374696c6c206d6f6e657920746f2073656e6420746f204c4745000000000000604482015290519081900360640190fd5b6001600160a01b038216612e25576040805162461bcd60e51b815260206004808301919091526024820152630103737960e51b604482015290519081900360640190fd5b612e2f8284615160565b505050565b60a75481565b60ac54604080516393f1a40b60e01b81526000600482018190526001600160a01b03858116602484015283519194859462010000909104909116926393f1a40b9260448083019392829003018186803b158015612e9657600080fd5b505afa158015612eaa573d6000803e3d6000fd5b505050506040513d6040811015612ec057600080fd5b505160ad546040805163d6ce2ef960e01b81526001600160a01b0387811660048301529151939450600093919092169163d6ce2ef9916024808301926020929190829003018186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d6020811015612f3f57600080fd5b50516001600160a01b038516600090815260b76020526040902054909150612f6d9082906123bc9085614a34565b949350505050565b609d546001600160a01b031681565b609754610100900460ff1615612fcf576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff00191661010090811790915560ac540460ff161561303a576040805162461bcd60e51b815260206004820152601a60248201527f454e434f5245204c50207472616e736665727320636c6f736564000000000000604482015290519081900360640190fd5b60b254604080516370a0823160e01b8152336004820152905160009261308d926001600160a01b039091169182916370a08231916024808301926020929190829003018186803b15801561179e57600080fd5b33600090815260b760205260409020549091506130aa9082614a34565b33600090815260b76020526040902055506097805461ff0019169055565b609b546001600160a01b031681565b609c546001600160a01b031681565b609754610100900460ff1615613131576040805162461bcd60e51b815260206004820152601f60248201526000805160206157b6833981519152604482015290519081900360640190fd5b6097805461ff001916610100179081905560ff161515600114613192576040805162461bcd60e51b8152602060048201526014602482015273139bdd1a1a5b99c81d1bc818db185a5b481e595d60621b604482015290519081900360640190fd5b600061319d336122fd565b116131e2576040805162461bcd60e51b815260206004820152601060248201526f6e6f7468696e6720746f20636c61696d60801b604482015290519081900360640190fd5b609d546001600160a01b031663a9059cbb336131fd816122fd565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561324357600080fd5b505af1158015613257573d6000803e3d6000fd5b505050506040513d602081101561326d57600080fd5b505161327857600080fd5b33600090815260a360205260409020805460ff191660011790556097805461ff0019169055565b6000806132bf60b5546123bc60a85460bd54614a3490919063ffffffff16565b60a154900391505090565b6132d2614a97565b6065546001600160a01b03908116911614613322576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60a254613332906202a300614a34565b42101561337c576040805162461bcd60e51b81526020600482015260136024820152723220646179206772616365206f6e676f696e6760681b604482015290519081900360640190fd5b60ac805461ff001916610100179055565b60b9546001600160a01b031681565b6133a4614a97565b6065546001600160a01b039081169116146133f4576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60ac5460ff161515600114613449576040805162461bcd60e51b8152602060048201526016602482015275115390d3d491481a185cc81d1bc819dbc8199a5c9cdd60521b604482015290519081900360640190fd5b60a454610100900460ff16156134a6576040805162461bcd60e51b815260206004820152601a60248201527f554e49434f524520616c7265616479207472616e736665726564000000000000604482015290519081900360640190fd5b60a5546040805163c25cc8af60e01b815230600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b1580156134f357600080fd5b505af1158015613507573d6000803e3d6000fd5b505050506040513d602081101561351d57600080fd5b505160ff166002146135605760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b8152735a16552f59ea34e44ec81e58b3817833e9fd5436600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b1580156135c157600080fd5b505af11580156135d5573d6000803e3d6000fd5b505050506040513d60208110156135eb57600080fd5b505160ff1660021461362e5760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b81527305957f3344255fdc9fe172e30016ee148d684313600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b15801561368f57600080fd5b505af11580156136a3573d6000803e3d6000fd5b505050506040513d60208110156136b957600080fd5b505160ff16156136fa5760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b815273e6f32f17be3bf031b4b6150689c1f17ceca375c8600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b15801561375b57600080fd5b505af115801561376f573d6000803e3d6000fd5b505050506040513d602081101561378557600080fd5b505160ff16156137c65760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b60a5546040805163c25cc8af60e01b815273f4d7a0e8a68345442172f45cabd272c25320aa96600482015290516001600160a01b039092169163c25cc8af916024808201926020929091908290030181600087803b15801561382757600080fd5b505af115801561383b573d6000803e3d6000fd5b505050506040513d602081101561385157600080fd5b505160ff16156138925760405162461bcd60e51b815260040180806020018281038252602f815260200180615711602f913960400191505060405180910390fd5b670de0b6b3a76400004710156138de576040805162461bcd60e51b815260206004820152600c60248201526b0408ccacac840daca40cae8d60a31b604482015290519081900360640190fd5b60a554609a5460408051630d0e30db60e41b815290516001600160a01b03938416939092169163d0e30db091670de0b6b3a764000091600480830192600092919082900301818588803b15801561393457600080fd5b505af1158015613948573d6000803e3d6000fd5b50505050506000816001600160a01b031663a19b08376040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561398a57600080fd5b505af115801561399e573d6000803e3d6000fd5b505050506040513d60208110156139b457600080fd5b5051609a5460408051630dfe168160e01b815290519293506000926001600160a01b0392831692851691630dfe1681916004808301926020929190829003018186803b158015613a0357600080fd5b505afa158015613a17573d6000803e3d6000fd5b505050506040513d6020811015613a2d57600080fd5b505160408051630240bc6b60e21b815290516001600160a01b039283169390931493506000928392861691630902f1ac916004808301926060929190829003018186803b158015613a7d57600080fd5b505afa158015613a91573d6000803e3d6000fd5b505050506040513d6060811015613aa757600080fd5b508051602091820151609a546040805163a9059cbb60e01b81526001600160a01b038a81166004830152670de0b6b3a7640000602483015291516001600160701b039586169850949093169550169263a9059cbb926044808401938290030181600087803b158015613b1857600080fd5b505af1158015613b2c573d6000803e3d6000fd5b505050506040513d6020811015613b4257600080fd5b50600090508315613be357613b60670de0b6b3a76400008484615196565b6040805163022c0d9f60e01b815260006004820181905260248201849052306044830152608060648301526084820181905291519293506001600160a01b0388169263022c0d9f9260c48084019391929182900301818387803b158015613bc657600080fd5b505af1158015613bda573d6000803e3d6000fd5b50505050613c75565b613bf6670de0b6b3a76400008385615196565b6040805163022c0d9f60e01b815260048101839052600060248201819052306044830152608060648301526084820181905291519293506001600160a01b0388169263022c0d9f9260c48084019391929182900301818387803b158015613c5c57600080fd5b505af1158015613c70573d6000803e3d6000fd5b505050505b60408051636817031b60e01b815230600482015290516001600160a01b03881691636817031b91602480830192600092919082900301818387803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b50505050856001600160a01b031663a97919b260646040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613d1b57600080fd5b505af1158015613d2f573d6000803e3d6000fd5b505050506000866001600160a01b03166370a08231886001600160a01b031663a19b08376040518163ffffffff1660e01b8152600401602060405180830381600087803b158015613d7f57600080fd5b505af1158015613d93573d6000803e3d6000fd5b505050506040513d6020811015613da957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301525160248083019260209291908290030181600087803b158015613df257600080fd5b505af1158015613e06573d6000803e3d6000fd5b505050506040513d6020811015613e1c57600080fd5b505160408051635158533760e11b815290519192506000916001600160a01b038a169163a2b0a66e91600480830192602092919082900301818787803b158015613e6557600080fd5b505af1158015613e79573d6000803e3d6000fd5b505050506040513d6020811015613e8f57600080fd5b5051604080516318160ddd60e01b815290516001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b158015613ed357600080fd5b505afa158015613ee7573d6000803e3d6000fd5b505050506040513d6020811015613efd57600080fd5b505160a981905590506000613f1a836112b3600019820185614a9b565b9050886001600160a01b0316631fca1d65826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613f6257600080fd5b505af1158015613f76573d6000803e3d6000fd5b50505050600080896001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613fb657600080fd5b505afa158015613fca573d6000803e3d6000fd5b505050506040513d6060811015613fe057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506001600160701b031691506001600160701b031691506000808c6001600160a01b03166370a082318d6040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561406e57600080fd5b505af1158015614082573d6000803e3d6000fd5b505050506040513d602081101561409857600080fd5b5051604080516370a0823160e01b815230600482015290519192506001600160a01b038f169163a9059cbb918f9184916370a082319160248083019260209291908290030181600087803b1580156140ef57600080fd5b505af1158015614103573d6000803e3d6000fd5b505050506040513d602081101561411957600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561416a57600080fd5b505af115801561417e573d6000803e3d6000fd5b505050506040513d602081101561419457600080fd5b81019080805190602001909291905050505060008d6001600160a01b03166370a082318e6040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b1580156141f757600080fd5b505af115801561420b573d6000803e3d6000fd5b505050506040513d602081101561422157600080fd5b505190508b1561439a576142388282038587615196565b92508c6001600160a01b031663022c0d9f846000306040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b0316815260200180602001828103825260008152602001602001945050505050600060405180830381600087803b1580156142ae57600080fd5b505af11580156142c2573d6000803e3d6000fd5b505050508c6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142ff57600080fd5b505afa158015614313573d6000803e3d6000fd5b505050506040513d606081101561432957600080fd5b5080516020909101516001600160701b039182169650169350670de0b6b3a76400008510614395576040805162461bcd60e51b815260206004820152601460248201527308109d5c9b881b9bdd081cdd59999a58da595b9d60621b604482015290519081900360640190fd5b614504565b6143a78282038686615196565b92508c6001600160a01b031663022c0d9f600085306040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b0316815260200180602001828103825260008152602001602001945050505050600060405180830381600087803b15801561441d57600080fd5b505af1158015614431573d6000803e3d6000fd5b505050508c6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561446e57600080fd5b505afa158015614482573d6000803e3d6000fd5b505050506040513d606081101561449857600080fd5b5080516020909101516001600160701b039182169650169350670de0b6b3a76400008410614504576040805162461bcd60e51b815260206004820152601460248201527308109d5c9b881b9bdd081cdd59999a58da595b9d60621b604482015290519081900360640190fd5b60008e6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561454157600080fd5b505af1158015614555573d6000803e3d6000fd5b505050506040513d602081101561456b57600080fd5b5051905061457f60646112b383603c614a9b565b84116145d2576040805162461bcd60e51b815260206004820152601760248201527f204469646e27742067657420656e6f7567682045544820000000000000000000604482015290519081900360640190fd5b681b1ae4d6e2ef5000008411614628576040805162461bcd60e51b815260206004820152601660248201527504088d2c8dc4ee840cecae840cadcdeeaced0408aa8960531b604482015290519081900360640190fd5b614649670de0b6b3a76400006112b360b45487614a9b90919063ffffffff16565b60a855609a5460408051632e1a7d4d60e01b81526004810187905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561469957600080fd5b505af11580156146ad573d6000803e3d6000fd5b505050508e6001600160a01b0316632e7fae313060016040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561470957600080fd5b505af115801561471d573d6000803e3d6000fd5b505060a4805461ff0019166101001790555050505050505050505050505050505050565b614749614a97565b6065546001600160a01b03908116911614614799576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b60006147b860b5546123bc60a85460bd54614a3490919063ffffffff16565b60a1549091506147c89084614a34565b60a1819055811015614811576040805162461bcd60e51b815260206004820152600d60248201526c151bdbc81b5d58da081cd95b9d609a1b604482015290519081900360640190fd5b6001600160a01b038216614855576040805162461bcd60e51b815260206004808301919091526024820152630103737960e51b604482015290519081900360640190fd5b61485f8284615160565b6040805184815290517fb8b41fad14a0213642b056f1575bcff86305c7b67b8ed71fef3f14808f716d0d9181900360200190a1505050565b61489f614a97565b6065546001600160a01b039081169116146148ef576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b6001600160a01b0381166149345760405162461bcd60e51b81526004018080602001828103825260268152602001806157406026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60b55481565b61499e614a97565b6065546001600160a01b039081169116146149ee576040805162461bcd60e51b815260206004820181905260248201526000805160206157f7833981519152604482015290519081900360640190fd5b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b60bb546001600160a01b031681565b60ad546001600160a01b031681565b60bd5481565b600082820183811015614a8e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b3390565b600082614aaa57506000614a91565b82820282848281614ab757fe5b0414614a8e5760405162461bcd60e51b81526004018080602001828103825260218152602001806157d66021913960400191505060405180910390fd5b6000614a8e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615268565b6000614a8e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061530a565b60b154609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b5050609c5460b15460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015614c2f57600080fd5b505af1158015614c43573d6000803e3d6000fd5b505050506040513d6020811015614c5957600080fd5b50516001600160a01b031614612ca15760405162461bcd60e51b81526004018080602001828103825260288152602001806157666028913960400191505060405180910390fd5b600080836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614cf057600080fd5b505afa158015614d04573d6000803e3d6000fd5b505050506040513d6020811015614d1a57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810186905290519192506001600160a01b038616916323b872dd916064808201926020929091908290030181600087803b158015614d7557600080fd5b505af1158015614d89573d6000803e3d6000fd5b505050506040513d6020811015614d9f57600080fd5b5051614daa57600080fd5b612f6d81856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015614dfb57600080fd5b505afa158015614e0f573d6000803e3d6000fd5b505050506040513d6020811015614e2557600080fd5b505190614b36565b60b954609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015614e7e57600080fd5b505af1158015614e92573d6000803e3d6000fd5b5050609c5460b95460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b158015614ee457600080fd5b505af1158015614ef8573d6000803e3d6000fd5b505050506040513d6020811015614f0e57600080fd5b50516001600160a01b031614614f6b576040805162461bcd60e51b815260206004820152601b60248201527f4d756c7469736967206e6f74206f776e6572206f6620746f6b656e0000000000604482015290519081900360640190fd5b60ba54609c546040805163f2fde38b60e01b81526001600160a01b0392831660048201529051919092169163f2fde38b91602480830192600092919082900301818387803b158015614fbc57600080fd5b505af1158015614fd0573d6000803e3d6000fd5b5050609c5460ba5460408051638da5cb5b60e01b815290516001600160a01b039384169550929091169250638da5cb5b9160048083019260209291908290030181600087803b15801561502257600080fd5b505af1158015615036573d6000803e3d6000fd5b505050506040513d602081101561504c57600080fd5b50516001600160a01b031614612ca1576040805162461bcd60e51b815260206004820181905260248201527f4d756c7469736967206e6f74206f776e6572206f662070726f787961646d696e604482015290519081900360640190fd5b303b1590565b600054610100900460ff16806150c857506150c86150a9565b806150d6575060005460ff16155b6151115760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff1615801561513c576000805460ff1961ff0019909116610100171660011790555b615144615364565b61514c615404565b8015612b06576000805461ff001916905550565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612e2f573d6000803e3d6000fd5b60008084116151d65760405162461bcd60e51b815260040180806020018281038252602b815260200180615869602b913960400191505060405180910390fd5b6000831180156151e65750600082115b6152215760405162461bcd60e51b815260040180806020018281038252602881526020018061578e6028913960400191505060405180910390fd5b600061522f856103e5614a9b565b9050600061523d8285614a9b565b90506000615251836123bc886103e8614a9b565b905080828161525c57fe5b04979650505050505050565b600081836152f45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152b95781810151838201526020016152a1565b50505050905090810190601f1680156152e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161530057fe5b0495945050505050565b6000818484111561535c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156152b95781810151838201526020016152a1565b505050900390565b600054610100900460ff168061537d575061537d6150a9565b8061538b575060005460ff16155b6153c65760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff1615801561514c576000805460ff1961ff0019909116610100171660011790558015612b06576000805461ff001916905550565b600054610100900460ff168061541d575061541d6150a9565b8061542b575060005460ff16155b6154665760405162461bcd60e51b815260040180806020018281038252602e815260200180615817602e913960400191505060405180910390fd5b600054610100900460ff16158015615491576000805460ff1961ff0019909116610100171660011790555b600061549b614a97565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612b06576000805461ff001916905550565b6101bf8061550b8339019056fe608060405234801561001057600080fd5b50600080546001600160a01b03191673b1b537b7272ba1eda0086e2f480adca72c0b511c179055610179806100466000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630484c7281461003b578063301a58011461005f575b600080fd5b6100436100b3565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603606081101561007557600080fd5b506001600160a01b038135811691602081013590911690604001356100c2565b60408051938452602084019290925282820152519081900360600190f35b6000546001600160a01b031681565b60008054819081906001600160a01b03878116911614806100f057506000546001600160a01b038681169116145b15610138576040805162461bcd60e51b81526020600482015260136024820152722a22a7299034b9903232b83932b1b0ba32b21760691b604482015290519081900360640190fd5b92959094509192505056fea26469706673582212208cdc056ed09e223aaae416e2b8bd07655d2b7c5cfd8a70f1144af0f36045525e64736f6c634300060c0033536574206d65206173207468652070726f7879206f776e657220666f722054454e53554e49434f5245204465706f7369747320617265207374696c6c206e6f7420636c6f736564496e636f72726563746c792073657420676f7665726e616e6365206c6576656c2c2063616e27742070726f636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737350726f7879204f776e657273686970205472616e73666572204e6f74205375636365737366756c6c556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459434f5245204d69677261746f723a20457865637574696f6e204c6f636b656400536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564536574206d65206173207468652070726f7879206f776e657220666f7220454e434f5245556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54454e434f5245204c50207472616e7366657273207374696c6c206f6e676f696e67a2646970667358221220ead021f8861350596eee2e52f1d9ac906bfefcc9110199ca6c9126482e7bd4ce64736f6c634300060c0033
Deployed Bytecode Sourcemap
26462:21549:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27199:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;27351:36;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27351:36:0;;;;;;;;;;;;;;27818:27;;;;;;;;;;;;;:::i;28507:31::-;;;;;;;;;;;;;:::i;27936:27::-;;;;;;;;;;;;;:::i;27895:34::-;;;;;;;;;;;;;:::i;42154:224::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42154:224:0;-1:-1:-1;;;;;42154:224:0;;:::i;:::-;;;;;;;;;;;;;;;;28443:25;;;;;;;;;;;;;:::i;26928:37::-;;;;;;;;;;;;;:::i;47688:318::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47688:318:0;-1:-1:-1;;;;;47688:318:0;;:::i;:::-;;39161:2159;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39161:2159:0;-1:-1:-1;;;;;39161:2159:0;;:::i;28127:41::-;;;;;;;;;;;;;:::i;27514:38::-;;;;;;;;;;;;;:::i;27466:41::-;;;;;;;;;;;;;:::i;27316:28::-;;;;;;;;;;;;;:::i;33817:368::-;;;;;;;;;;;;;:::i;41798:348::-;;;;;;;;;;;;;:::i;32931:441::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32931:441:0;;;;;;;;-1:-1:-1;32931:441:0;;-1:-1:-1;;32931:441:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32931:441:0;;-1:-1:-1;32931:441:0;;-1:-1:-1;;;;;32931:441:0:i;42386:1796::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42386:1796:0;-1:-1:-1;;;;;42386:1796:0;;:::i;28399:37::-;;;;;;;;;;;;;:::i;27776:35::-;;;;;;;;;;;;;:::i;26972:30::-;;;;;;;;;;;;;:::i;26707:28::-;;;;;;;;;;;;;:::i;27045:27::-;;;;;;;;;;;;;:::i;28222:37::-;;;;;;;;;;;;;:::i;26681:19::-;;;;;;;;;;;;;:::i;23442:148::-;;;;;;;;;;;;;:::i;31569:1282::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31569:1282:0;-1:-1:-1;;;;;31569:1282:0;;:::i;28580:42::-;;;;;;;;;;;;;:::i;27234:40::-;;;;;;;;;;;;;:::i;27970:36::-;;;;;;;;;;;;;:::i;28674:35::-;;;;;;;;;;;;;:::i;33382:427::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33382:427:0;-1:-1:-1;;;;;33382:427:0;;:::i;26620:28::-;;;;;;;;;;;;;:::i;29012:2051::-;;;;;;;;;;;;;:::i;26742:40::-;;;;;;;;;;;;;:::i;22800:79::-;;;;;;;;;;;;;:::i;27009:29::-;;;;;;;;;;;;;:::i;28013:33::-;;;;;;;;;;;;;:::i;27281:28::-;;;;;;;;;;;;;:::i;28090:30::-;;;;;;;;;;;;;:::i;46507:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46507:139:0;;;;;;;;:::i;27730:39::-;;;;;;;;;;;;;:::i;44190:124::-;;;;;;;;;;;;;:::i;41328:126::-;;;;;;;;;;;;;:::i;28053:30::-;;;;;;;;;;;;;:::i;47096:345::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47096:345:0;;;;;;-1:-1:-1;;;;;47096:345:0;;:::i;27422:37::-;;;;;;;;;;;;;:::i;38195:363::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38195:363:0;-1:-1:-1;;;;;38195:363:0;;:::i;26885:36::-;;;;;;;;;;;;;:::i;38597:353::-;;;;;;;;;;;;;:::i;26806:29::-;;;;;;;;;;;;;:::i;26842:36::-;;;;;;;;;;;;;:::i;31257:304::-;;;;;;;;;;;;;:::i;47449:231::-;;;;;;;;;;;;;:::i;38958:195::-;;;;;;;;;;;;;:::i;28475:25::-;;;;;;;;;;;;;:::i;34303:3815::-;;;;;;;;;;;;;:::i;46654:434::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46654:434:0;;;;;;-1:-1:-1;;;;;46654:434:0;;:::i;23745:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23745:244:0;-1:-1:-1;;;;;23745:244:0;;:::i;28175:40::-;;;;;;;;;;;;;:::i;31140:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31140:109:0;-1:-1:-1;;;;;31140:109:0;;:::i;28545:28::-;;;;;;;;;;;;;:::i;27852:36::-;;;;;;;;;;;;;:::i;28629:38::-;;;;;;;;;;;;;:::i;27199:28::-;;;;;;:::o;27351:36::-;;;-1:-1:-1;;;;;27351:36:0;;:::o;27818:27::-;;;;;;-1:-1:-1;;;;;27818:27:0;;:::o;28507:31::-;;;-1:-1:-1;;;;;28507:31:0;;:::o;27936:27::-;;;-1:-1:-1;;;;;27936:27:0;;:::o;27895:34::-;;;-1:-1:-1;;;;;27895:34:0;;:::o;42154:224::-;42284:10;;42270:45;;;-1:-1:-1;;;42270:45:0;;42223:7;42270:45;;;;;;-1:-1:-1;;;;;42270:45:0;;;;;;;;;42223:7;;;;42284:10;;;;;;;;42270:34;;:45;;;;;;;;;;;42284:10;42270:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42270:45:0;-1:-1:-1;;;;;42333:21:0;;;;;;:13;42270:45;42333:21;42270:45;42333:21;;;42270:45;;-1:-1:-1;42333:37:0;;42270:45;42333:25;:37::i;:::-;42326:44;;;42154:224;;;;:::o;28443:25::-;;;;;;-1:-1:-1;;;;;28443:25:0;;:::o;26928:37::-;;;-1:-1:-1;;;;;26928:37:0;;:::o;47688:318::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;47769:21:::1;::::0;-1:-1:-1;;;;;47769:21:0::1;47761:73;;;::::0;;-1:-1:-1;;;47761:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;47850:11;-1:-1:-1::0;;;;;47845:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;47893:16:0::1;:23:::0;;-1:-1:-1;;47893:23:0::1;47912:4;47893:23;::::0;;-1:-1:-1;;47951:21:0::1;::::0;47944:54:::1;::::0;;-1:-1:-1;;;47944:54:0;;47992:4:::1;47944:54;::::0;::::1;::::0;;;-1:-1:-1;;;;;47951:21:0;;::::1;::::0;47944:39:::1;::::0;:54;;;;;::::1;::::0;;;;;;;;;47951:21;47944:54;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;47944:54:0;47927:14:::1;:71:::0;-1:-1:-1;47688:318:0:o;39161:2159::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;39265:23:::1;::::0;::::1;;::::0;;::::1;;:31;;:23;:31;39257:77;;;;-1:-1:-1::0;;;39257:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39353:27;::::0;::::1;;:36;39345:77;;;::::0;;-1:-1:-1;;;39345:77:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;39453:18;::::0;39441:39:::1;::::0;;-1:-1:-1;;;39441:39:0;;;;39492:4:::1;::::0;-1:-1:-1;;;;;39453:18:0::1;::::0;39441:37:::1;::::0;:39:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;39453:18:::1;::::0;39441:39;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39441:39:0;-1:-1:-1;;;;;39441:56:0::1;;39433:105;;;;-1:-1:-1::0;;;39433:105:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;39559:37:0;::::1;39551:46;;;::::0;::::1;;39620:18;::::0;39608:74:::1;::::0;;-1:-1:-1;;;39608:74:0;;-1:-1:-1;;;;;39608:74:0;;::::1;;::::0;::::1;::::0;;;39620:18;;;::::1;::::0;39608:49:::1;::::0;:74;;;;;39620:18:::1;::::0;39608:74;;;;;;;39620:18;;39608:74;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39845:15:0::1;::::0;39838:77:::1;::::0;;-1:-1:-1;;;39838:77:0;;39872:42:::1;39838:77;::::0;::::1;::::0;;;39743:22:::1;::::0;-1:-1:-1;39768:148:0::1;::::0;-1:-1:-1;;;;;;39845:15:0;;::::1;::::0;39838:33:::1;::::0;:77;;;;;::::1;::::0;;;;;;;;;39845:15;39838:77;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39838:77:0;39775:15:::1;::::0;39802:12:::1;::::0;39768:47:::1;::::0;;-1:-1:-1;;;39768:47:0;;-1:-1:-1;;;;;39802:12:0;;::::1;39768:47;::::0;::::1;::::0;;;39775:15;;;::::1;::::0;39768:33:::1;::::0;:47;;;;;39838:77:::1;::::0;39768:47;;;;;;;39775:15;39768:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39768:47:0;;:69:::1;:148::i;:::-;39743:173;;39994:14;39961:15;;;;;;;;;-1:-1:-1::0;;;;;39961:15:0::1;-1:-1:-1::0;;;;;39954:35:0::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39954:37:0;:54:::1;39929:22;:79:::0;;;40163:26:::1;::::0;40103:115:::1;::::0;40213:4:::1;::::0;40103:87:::1;::::0;39954:54;40103:59:::1;:87::i;:::-;:109:::0;::::1;:115::i;:::-;40075:25;:143:::0;40285:15:::1;::::0;40342:48:::1;::::0;;-1:-1:-1;;;40342:48:0;;40384:4:::1;40342:48;::::0;::::1;::::0;;;-1:-1:-1;;;;;40285:15:0;;::::1;::::0;40278:46:::1;::::0;40285:15;;;;40342:33:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;40285:15;40342:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;40342:48:0;40278:113:::1;::::0;;-1:-1:-1;;;;;;40278:113:0::1;::::0;;;;;;-1:-1:-1;;;;;40278:113:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;40342:48:::1;::::0;40278:113;;;;;;;-1:-1:-1;40278:113:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;40506:15:0::1;::::0;40459:63:::1;::::0;;-1:-1:-1;;;40459:63:0;;-1:-1:-1;;;;;40506:15:0;;::::1;40459:63;::::0;::::1;::::0;;;40427:21:::1;::::0;40459:46;::::1;::::0;::::1;::::0;:63;;;;;40404:20:::1;::::0;40459:63;;;;;;;40404:20;40459:46;:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40533:14;40550:39;40576:12;40550:21;:25;;:39;;;;:::i;:::-;40533:56;;40652:10;40643:6;:19;40635:60;;;::::0;;-1:-1:-1;;;40635:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;40785:25;::::0;40759:23:::1;40778:3;40759:14;:6:::0;40770:2:::1;40759:10;:14::i;:23::-;:51;40751:86;;;::::0;;-1:-1:-1;;;40751:86:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40751:86:0;;;;;;;;;;;;;::::1;;40875:18;::::0;-1:-1:-1;;;;;40875:18:0::1;:32:::0;;::::1;::::0;:91:::1;;-1:-1:-1::0;40930:22:0::1;::::0;-1:-1:-1;;;;;40930:22:0::1;:36:::0;::::1;40875:91;:142;;;;-1:-1:-1::0;40988:15:0::1;::::0;-1:-1:-1;;;;;40988:15:0::1;:29:::0;::::1;40875:142;40867:174;;;::::0;;-1:-1:-1;;;40867:174:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40867:174:0;;;;;;;;;;;;;::::1;;41066:18;::::0;41094:19:::1;::::0;41115:22:::1;::::0;41054:84:::1;::::0;;-1:-1:-1;;;41054:84:0;;-1:-1:-1;;;;;41094:19:0;;::::1;41054:84;::::0;::::1;::::0;41115:22;;::::1;41054:84:::0;;;;;41066:18;;;::::1;::::0;41054:39:::1;::::0;:84;;;;;41066:18:::1;::::0;41054:84;;;;;;;41066:18;;41054:84;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41161:18:0::1;::::0;41189:12:::1;::::0;41203:15:::1;::::0;41149:70:::1;::::0;;-1:-1:-1;;;41149:70:0;;41189:12;;;::::1;-1:-1:-1::0;;;;;41189:12:0;;::::1;41149:70;::::0;::::1;::::0;41203:15;;::::1;41149:70:::0;;;;;41161:18;::::1;::::0;-1:-1:-1;41149:39:0::1;::::0;-1:-1:-1;41149:70:0;;;;;41161:18:::1;::::0;41149:70;;;;;;;;41161:18;;41149:70;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41230:37;:35;:37::i;:::-;-1:-1:-1::0;;41278:27:0::1;:34:::0;;-1:-1:-1;;41278:34:0::1;41308:4;41278:34;::::0;;-1:-1:-1;;39161:2159:0:o;28127:41::-;;;;:::o;27514:38::-;;;;:::o;27466:41::-;;;;:::o;27316:28::-;;;-1:-1:-1;;;;;27316:28:0;;:::o;33817:368::-;28862:6;;;;;;;:15;28854:59;;;;;-1:-1:-1;;;28854:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28854:59:0;;;;;;;;;;;;;;;28924:6;:13;;-1:-1:-1;;28924:13:0;;;;;33878:16:::1;::::0;28924:13;33878:16:::1;:25;33870:61;;;::::0;;-1:-1:-1;;;33870:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34008:21;::::0;34031:51:::1;::::0;;-1:-1:-1;;;34031:51:0;;34071:10:::1;34031:51;::::0;::::1;::::0;;;33942:16:::1;::::0;33961:122:::1;::::0;-1:-1:-1;;;;;34008:21:0;;::::1;::::0;;;34031:39:::1;::::0;:51;;;;;::::1;::::0;;;;;;;;34008:21;34031:51;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34031:51:0;33961:46:::1;:122::i;:::-;34152:10;34130:33;::::0;;;:21:::1;:33;::::0;;;;;33942:141;;-1:-1:-1;34130:47:0::1;::::0;33942:141;34130:37:::1;:47::i;:::-;34116:10;34094:33;::::0;;;:21:::1;:33;::::0;;;;:83;-1:-1:-1;28960:6:0;:14;;-1:-1:-1;;28960:14:0;;;33817:368::o;41798:348::-;28862:6;;;;;;;:15;28854:59;;;;;-1:-1:-1;;;28854:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28854:59:0;;;;;;;;;;;;;;;28924:6;:13;;-1:-1:-1;;28924:13:0;;;;;;;;41856:23:::1;::::0;::::1;28924:13:::0;41856:23:::1;:32;41848:76;;;::::0;;-1:-1:-1;;;41848:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;42001:13;::::0;42016:43:::1;::::0;;-1:-1:-1;;;42016:43:0;;42048:10:::1;42016:43;::::0;::::1;::::0;;;41935:16:::1;::::0;41954:106:::1;::::0;-1:-1:-1;;;;;42001:13:0;;::::1;::::0;;;42016:31:::1;::::0;:43;;;;;::::1;::::0;;;;;;;;42001:13;42016:43;::::1;;::::0;::::1;;;;::::0;::::1;41954:106;42113:10;42099:25;::::0;;;:13:::1;:25;::::0;;;;;41935:125;;-1:-1:-1;42099:39:0::1;::::0;41935:125;42099:29:::1;:39::i;:::-;42085:10;42071:25;::::0;;;:13:::1;:25;::::0;;;;:67;-1:-1:-1;28960:6:0;:14;;-1:-1:-1;;28960:14:0;;;41798:348::o;32931:441::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;33048:16:::1;::::0;::::1;;:24;;:16:::0;:24:::1;33040:74;;;;-1:-1:-1::0;;;33040:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33144:17:::0;;33190:15;;33180:25;::::1;33172:49;;;::::0;;-1:-1:-1;;;33172:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33172:49:0;;;;;;;;;;;;;::::1;;33239:9;33234:131;33258:6;33254:1;:10;33234:131;;;33342:8;33351:1;33342:11;;;;;;;;;;;;;;33286:38;:53;33325:10;33336:1;33325:13;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;33286:53:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;33286:53:0;:67;33266:3:::1;;33234:131;;;;23082:1;32931:441:::0;;:::o;42386:1796::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;42488:25:::1;::::0;::::1;;:34;42480:65;;;::::0;;-1:-1:-1;;;42480:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42480:65:0;;;;;;;;;;;;;::::1;;42564:27;::::0;::::1;;:35;;:27:::0;:35:::1;42556:70;;;::::0;;-1:-1:-1;;;42556:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42556:70:0;;;;;;;;;;;;;::::1;;42659:16;::::0;42647:37:::1;::::0;;-1:-1:-1;;;42647:37:0;;;;42696:4:::1;::::0;-1:-1:-1;;;;;42659:16:0::1;::::0;42647:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;42659:16:::1;::::0;42647:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42647:37:0;-1:-1:-1;;;;;42647:54:0::1;;42639:101;;;;-1:-1:-1::0;;;42639:101:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42771:10;::::0;42759:31:::1;::::0;;-1:-1:-1;;;42759:31:0;;;;42802:4:::1;::::0;-1:-1:-1;;;;;42771:10:0::1;::::0;42759:29:::1;::::0;:31:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;42771:10:::1;::::0;42759:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42759:31:0;-1:-1:-1;;;;;42759:48:0::1;;42751:89;;;::::0;;-1:-1:-1;;;42751:89:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;42877:37:0;::::1;42869:46;;;::::0;::::1;;42940:16;::::0;42928:72:::1;::::0;;-1:-1:-1;;;42928:72:0;;-1:-1:-1;;;;;42928:72:0;;::::1;;::::0;::::1;::::0;;;42940:16;;;::::1;::::0;42928:47:::1;::::0;:72;;;;;42940:16:::1;::::0;42928:72;;;;;;;42940:16;;42928:72;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;43023:10:0::1;::::0;43011:66:::1;::::0;;-1:-1:-1;;;43011:66:0;;-1:-1:-1;;;;;43011:66:0;;::::1;;::::0;::::1;::::0;;;43023:10;;;::::1;::::0;-1:-1:-1;43011:41:0::1;::::0;-1:-1:-1;43011:66:0;;;;;43023:10:::1;::::0;43011:66;;;;;;;43023:10;;43011:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43118:13;;;;;;;;;-1:-1:-1::0;;;;;43118:13:0::1;-1:-1:-1::0;;;;;43111:33:0::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43111:35:0;43088:20:::1;:58:::0;43213:13:::1;::::0;43266:46:::1;::::0;;-1:-1:-1;;;43266:46:0;;43306:4:::1;43266:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;43213:13:0;;::::1;::::0;43206:44:::1;::::0;43213:13;;;;43266:31:::1;::::0;:46;;;;;43111:35:::1;::::0;43266:46;;;;;;;43213:13;43266:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43266:46:0;43206:107:::1;::::0;;-1:-1:-1;;;;;;43206:107:0::1;::::0;;;;;;-1:-1:-1;;;;;43206:107:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;43266:46:::1;::::0;43206:107;;;;;;;-1:-1:-1;43206:107:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;43428:13:0::1;::::0;43381:61:::1;::::0;;-1:-1:-1;;;43381:61:0;;-1:-1:-1;;;;;43428:13:0;;::::1;43381:61;::::0;::::1;::::0;;;43349:21:::1;::::0;43381:46;::::1;::::0;::::1;::::0;:61;;;;;43326:20:::1;::::0;43381:61;;;;;;;43326:20;43381:46;:61;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43453:14;43470:39;43496:12;43470:21;:25;;:39;;;;:::i;:::-;43453:56;;43537:9;43528:6;:18;43520:59;;;::::0;;-1:-1:-1;;;43520:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43600:27;::::0;-1:-1:-1;;;;;43600:27:0::1;:41:::0;;::::1;::::0;:87:::1;;-1:-1:-1::0;43658:15:0::1;::::0;-1:-1:-1;;;;;43658:15:0::1;:29:::0;::::1;43600:87;43592:119;;;::::0;;-1:-1:-1;;;43592:119:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43592:119:0;;;;;;;;;;;;;::::1;;43736:16;::::0;43762:10:::1;::::0;43774:15:::1;::::0;43724:66:::1;::::0;;-1:-1:-1;;;43724:66:0;;43736:16:::1;43762:10:::0;;::::1;-1:-1:-1::0;;;;;43762:10:0;;::::1;43724:66;::::0;::::1;::::0;43774:15;;::::1;43724:66:::0;;;;;43736:16;::::1;::::0;43724:37:::1;::::0;:66;;;;;43736:16:::1;::::0;43724:66;;;;;;;;43736:16;;43724:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43841:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;43801:27:0::1;:72:::0;;-1:-1:-1;;;;;;43801:72:0::1;-1:-1:-1::0;;;;;43801:72:0;;::::1;;::::0;;;;43890:10:::1;::::0;43884:71:::1;::::0;;-1:-1:-1;;;43884:71:0;;43927:27;;::::1;43884:71;::::0;::::1;::::0;;43890:10;::::1;::::0;43884:42:::1;::::0;:71;;;;;-1:-1:-1;;43884:71:0;;;;;;;;-1:-1:-1;43890:10:0;43884:71;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43992:84;44071:4;43992:56;44021:26;;43992:6;:28;;:56;;;;:::i;:84::-;43966:23;:110:::0;44089:36:::1;:34;:36::i;:::-;-1:-1:-1::0;;44138:25:0::1;:32:::0;;-1:-1:-1;;44138:32:0::1;44166:4;44138:32;::::0;;-1:-1:-1;42386:1796:0:o;28399:37::-;;;;;;:::o;27776:35::-;;;;;;;;;:::o;26972:30::-;;;-1:-1:-1;;;;;26972:30:0;;:::o;26707:28::-;;;-1:-1:-1;;;;;26707:28:0;;:::o;27045:27::-;;;;:::o;28222:37::-;;;;:::o;26681:19::-;;;;;;-1:-1:-1;;;;;26681:19:0;;:::o;23442:148::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;23533:6:::1;::::0;23512:40:::1;::::0;23549:1:::1;::::0;-1:-1:-1;;;;;23533:6:0::1;::::0;23512:40:::1;::::0;23549:1;;23512:40:::1;23563:6;:19:::0;;-1:-1:-1;;;;;;23563:19:0::1;::::0;;23442:148::o;31569:1282::-;31660:21;;31623;;-1:-1:-1;;;;;31660:21:0;31657:49;;-1:-1:-1;31705:1:0;31698:8;;31657:49;31720:16;;;;31717:38;;-1:-1:-1;31754:1:0;31747:8;;31717:38;31779:10;31769:21;;;;:9;:21;;;;;;;;:29;;:21;:29;31766:42;;;-1:-1:-1;31807:1:0;31800:8;;31766:42;31821:22;31846:33;31874:4;31846:27;:33::i;:::-;31821:58;;31890:21;31914:30;31939:4;31914:24;:30::i;:::-;31890:54;;31955:19;31977:28;32000:4;31977:22;:28::i;:::-;31955:50;-1:-1:-1;32021:19:0;;:41;;;;-1:-1:-1;32044:18:0;;32021:41;:61;;;;-1:-1:-1;32066:16:0;;32021:61;32018:74;;;32091:1;32084:8;;;;;;;32018:74;32105:16;32124:86;32184:25;;32124:55;32152:26;;32124:23;;:27;;:55;;;;:::i;:::-;:59;;:86::i;:::-;32105:105;-1:-1:-1;32221:26:0;32263:18;;32260:145;;32318:75;32378:14;32318:55;32349:23;;32318:26;;:30;;:55;;;;:::i;:::-;:59;;:75::i;:::-;32297:96;;32260:145;32420:17;;32417:167;;32474:96;32556:13;32474:77;32528:22;;32474:49;32497:25;;32474:18;:22;;:49;;;;:::i;:96::-;32453:117;;32417:167;32599:15;;32596:157;;32651:90;32729:11;32651:73;32703:20;;32651:47;32674:23;;32651:18;:22;;:47;;;;:::i;:90::-;32630:111;;32596:157;32781:62;32838:4;32781:52;32824:8;32781:38;32804:14;;32781:18;:22;;:38;;;;:::i;:62::-;32765:78;31569:1282;-1:-1:-1;;;;;;;31569:1282:0:o;28580:42::-;;;-1:-1:-1;;;;;28580:42:0;;:::o;27234:40::-;;;;;;;;;:::o;27970:36::-;;;-1:-1:-1;;;;;27970:36:0;;:::o;28674:35::-;;;;:::o;33382:427::-;33481:16;;33456:7;;33481:16;;33478:322;;;-1:-1:-1;;;;;33572:29:0;;;;;;:21;:29;;;;;;;;;33521:38;:46;;;;;;;:81;;:50;:81::i;:::-;33514:88;;;;33478:322;33685:13;;33671:48;;;-1:-1:-1;;;33671:48:0;;33647:18;33671:48;;;;;;-1:-1:-1;;;;;33671:48:0;;;;;;;;;33647:18;;33685:13;;;;;33671:37;;:48;;;;;;;;;;;33685:13;33671:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33671:48:0;-1:-1:-1;;;;;33741:29:0;;;;;;:21;33671:48;33741:29;33671:48;33741:29;;;33671:48;;-1:-1:-1;33741:45:0;;33671:48;33741:33;:45::i;:::-;33734:52;;;;;26620:28;;;;;;:::o;29012:2051::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19180:83;29084:42:::1;29071:9;:55;29063:64;;;::::0;::::1;;29160:42;29146:10;:56;29138:65;;;::::0;::::1;;29216:35;:33;:35::i;:::-;29262:13;:58:::0;;-1:-1:-1;;;;;;29262:58:0;;::::1;29278:42;29262:58;::::0;;;29356:15:::1;29331:22;:40:::0;29429:15:::1;:60:::0;;;::::1;29447:42;29429:60;::::0;;29500:22:::1;:67:::0;;;::::1;29525:42;29500:67;::::0;;29599:13:::1;:58:::0;;;-1:-1:-1;;;;;;29599:58:0;;::::1;;::::0;;;29668:13:::1;:58:::0;;;::::1;29684:42;29668:58;::::0;;29755:10:::1;:55:::0;;;-1:-1:-1;;;;;;29755:55:0;;::::1;;::::0;;29821:10:::1;:55:::0;;;::::1;29834:42;29821:55;::::0;;29887:16:::1;:61:::0;;;::::1;29906:42;29887:61;::::0;;29959:13:::1;:58:::0;;;::::1;29975:42;29959:58;::::0;;30028:27:::1;:72:::0;;;::::1;30058:42;30028:72;::::0;;30121:18:::1;:63:::0;;;::::1;30142:42;30121:63;::::0;;30195:12:::1;:57:::0;;;::::1;30210:42;30195:57;::::0;;30263:15:::1;:60:::0;;;::::1;30281:42;30263:60;::::0;;30334:19:::1;:64:::0;;;::::1;30356:42;30334:64;::::0;;30409:12:::1;:57:::0;;;;::::1;::::0;;;::::1;::::0;;30477:21:::1;:66:::0;;;;::::1;30501:42;30477:66;::::0;;30583:45:::1;30622:5;30583:34;30611:5;30583:23;30591:7;29599:13;30583:20;:23::i;:45::-;30554:26;:74;;;;30673:20;30709:42;30673:79;;30777:7;-1:-1:-1::0;;;;;30777:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30777:26:0;30763:4:::1;:41:::0;;-1:-1:-1;;;;;;30763:41:0::1;::::0;-1:-1:-1;;;;;30763:41:0;;::::1;;;::::0;;30850:24:::1;::::0;;-1:-1:-1;;;30850:24:0;;;;:22;;::::1;::::0;::::1;::::0;:24:::1;::::0;;::::1;::::0;30777:26:::1;::::0;30850:24;;;;;;;;:22;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30850:24:0;30815:14:::1;:60:::0;;-1:-1:-1;;;;;;30815:60:0::1;-1:-1:-1::0;;;;;30815:60:0;;::::1;;::::0;;30909:26:::1;::::0;;-1:-1:-1;;;30909:26:0;;;;:24;;::::1;::::0;::::1;::::0;:26:::1;::::0;;::::1;::::0;30850:24:::1;::::0;30909:26;;;;;;;;-1:-1:-1;30909:24:0;:26;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30909:26:0;30886:9:::1;:50:::0;;-1:-1:-1;;;;;;30886:50:0::1;-1:-1:-1::0;;;;;30886:50:0;;::::1;;::::0;;30963:25:::1;::::0;;-1:-1:-1;;;30963:25:0;;;;:23;;::::1;::::0;::::1;::::0;:25:::1;::::0;;::::1;::::0;30909:26:::1;::::0;30963:25;;;;;;;;:23;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30963:25:0;30947:13:::1;:41:::0;;-1:-1:-1;;;;;30947:41:0;;::::1;-1:-1:-1::0;;;;;;30947:41:0;;::::1;;::::0;;30999:4:::1;:56:::0;;;;::::1;31012:42;30999:56;::::0;;-1:-1:-1;19281:57:0;;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;19281:57;29012:2051;:::o;26742:40::-;;;-1:-1:-1;;;;;26742:40:0;;:::o;22800:79::-;22865:6;;-1:-1:-1;;;;;22865:6:0;22800:79;:::o;27009:29::-;;;;:::o;28013:33::-;;;-1:-1:-1;;;;;28013:33:0;;:::o;27281:28::-;;;;;;-1:-1:-1;;;;;27281:28:0;;:::o;28090:30::-;;;-1:-1:-1;;;;;28090:30:0;;:::o;46507:139::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;46619:13:::1;::::0;46596:42:::1;::::0;;-1:-1:-1;;;46596:42:0;;-1:-1:-1;;;;;46619:13:0;;::::1;46596:42;::::0;::::1;::::0;;;;;;;;;:22;;::::1;::::0;::::1;::::0;:42;;;;;::::1;::::0;;;;;;;;;46619:13:::1;46596:22:::0;:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;27730:39:::0;;;;;;:::o;44190:124::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;44270:36:::1;:34;:36::i;:::-;44190:124::o:0;41328:126::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;41409:37:::1;:35;:37::i;28053:30::-:0;;;-1:-1:-1;;;;;28053:30:0;;:::o;47096:345::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;47184:16:::1;47203:86;47263:25;;47203:55;47231:26;;47203:23;;:27;;:55;;;;:::i;:86::-;47184:105;;47324:8;47308:12;;:24;47300:63;;;::::0;;-1:-1:-1;;;47300:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;47382:16:0;::::1;47374:32;;;::::0;;-1:-1:-1;;;47374:32:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;47374:32:0;;;;;;;;;;;;;::::1;;47417:16;47425:2;47429:3;47417:7;:16::i;:::-;23082:1;47096:345:::0;;:::o;27422:37::-;;;;:::o;38195:363::-;38329:12;;38315:47;;;-1:-1:-1;;;38315:47:0;;38266:7;38315:47;;;;;;-1:-1:-1;;;;;38315:47:0;;;;;;;;;38266:7;;;;38329:12;;;;;;;;38315:36;;:47;;;;;;;;;;;38329:12;38315:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38315:47:0;38421:21;;38315:47;38406:59;;-1:-1:-1;;;38406:59:0;;-1:-1:-1;;;;;38406:59:0;;;;;;;;;38315:47;;-1:-1:-1;38377:26:0;;38421:21;;;;;38406:51;;:59;;;;;38315:47;;38406:59;;;;;;;38421:21;38406:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38406:59:0;-1:-1:-1;;;;;38487:23:0;;;;;;:15;38406:59;38487:23;;;;;38406:59;;-1:-1:-1;38487:63:0;;38406:59;;38487:39;;38515:10;38487:27;:39::i;:63::-;38480:70;38195:363;-1:-1:-1;;;;38195:363:0:o;26885:36::-;;;-1:-1:-1;;;;;26885:36:0;;:::o;38597:353::-;28862:6;;;;;;;:15;28854:59;;;;;-1:-1:-1;;;28854:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28854:59:0;;;;;;;;;;;;;;;28924:6;:13;;-1:-1:-1;;28924:13:0;;;;;;;;38657:23:::1;::::0;::::1;28924:13:::0;38657:23:::1;:32;38649:71;;;::::0;;-1:-1:-1;;;38649:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;38797:15;::::0;38814:45:::1;::::0;;-1:-1:-1;;;38814:45:0;;38848:10:::1;38814:45;::::0;::::1;::::0;;;38731:16:::1;::::0;38750:110:::1;::::0;-1:-1:-1;;;;;38797:15:0;;::::1;::::0;;;38814:33:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;38797:15;38814:45;::::1;;::::0;::::1;;;;::::0;::::1;38750:110;38917:10;38901:27;::::0;;;:15:::1;:27;::::0;;;;;38731:129;;-1:-1:-1;38901:41:0::1;::::0;38731:129;38901:31:::1;:41::i;:::-;38887:10;38871:27;::::0;;;:15:::1;:27;::::0;;;;:71;-1:-1:-1;28960:6:0;:14;;-1:-1:-1;;28960:14:0;;;38597:353::o;26806:29::-;;;-1:-1:-1;;;;;26806:29:0;;:::o;26842:36::-;;;-1:-1:-1;;;;;26842:36:0;;:::o;31257:304::-;28862:6;;;;;;;:15;28854:59;;;;;-1:-1:-1;;;28854:59:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28854:59:0;;;;;;;;;;;;;;;28924:6;:13;;-1:-1:-1;;28924:13:0;;;;;;;;31307:16:::1;:24;;28933:4:::0;31307:24:::1;31299:57;;;::::0;;-1:-1:-1;;;31299:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31299:57:0;;;;;;;;;;;;;::::1;;31399:1;31375:21;31385:10;31375:9;:21::i;:::-;:25;31367:54;;;::::0;;-1:-1:-1;;;31367:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31367:54:0;;;;;;;;;;;;;::::1;;31447:21;::::0;-1:-1:-1;;;;;31447:21:0::1;31440:38;31479:10;31491:21;31479:10:::0;31491:9:::1;:21::i;:::-;31440:73;;;;;;;;;;;;;-1:-1:-1::0;;;;;31440:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31440:73:0;31432:82:::1;;;::::0;::::1;;31535:10;31525:21;::::0;;;:9:::1;:21;::::0;;;;:28;;-1:-1:-1;;31525:28:0::1;31549:4;31525:28;::::0;;28960:6;:14;;-1:-1:-1;;28960:14:0;;;31257:304::o;47449:231::-;47506:7;47526:16;47545:86;47605:25;;47545:55;47573:26;;47545:23;;:27;;:55;;;;:::i;:86::-;47660:12;;47649:23;;;-1:-1:-1;;47449:231:0;:::o;38958:195::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;39046:22:::1;::::0;:34:::1;::::0;39073:6:::1;39046:26;:34::i;:::-;39027:15;:53;;39019:85;;;::::0;;-1:-1:-1;;;39019:85:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39019:85:0;;;;;;;;;;;;;::::1;;39115:23;:30:::0;;-1:-1:-1;;39115:30:0::1;;;::::0;;38958:195::o;28475:25::-;;;-1:-1:-1;;;;;28475:25:0;;:::o;34303:3815::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;34375:27:::1;::::0;::::1;;:35;;:27:::0;:35:::1;34367:70;;;::::0;;-1:-1:-1;;;34367:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;34367:70:0;;;;;;;;;;;;;::::1;;34456:28;::::0;::::1;::::0;::::1;;;:37;34448:76;;;::::0;;-1:-1:-1;;;34448:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34608:13;::::0;34599:58:::1;::::0;;-1:-1:-1;;;34599:58:0;;34651:4:::1;34599:58;::::0;::::1;::::0;;;-1:-1:-1;;;;;34608:13:0;;::::1;::::0;34599:43:::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;34608:13:::1;::::0;34599:58;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34599:58:0;:63:::1;;34661:1;34599:63;34591:123;;;;-1:-1:-1::0;;;34591:123:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34742:13;::::0;34733:87:::1;::::0;;-1:-1:-1;;;34733:87:0;;34777:42:::1;34733:87;::::0;::::1;::::0;;;-1:-1:-1;;;;;34742:13:0;;::::1;::::0;34733:43:::1;::::0;:87;;;;;::::1;::::0;;;;;;;;;34742:13:::1;::::0;34733:87;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34733:87:0;:92:::1;;34824:1;34733:92;34725:152;;;;-1:-1:-1::0;;;34725:152:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34905:13;::::0;34896:87:::1;::::0;;-1:-1:-1;;;34896:87:0;;34940:42:::1;34896:87;::::0;::::1;::::0;;;-1:-1:-1;;;;;34905:13:0;;::::1;::::0;34896:43:::1;::::0;:87;;;;;::::1;::::0;;;;;;;;;34905:13:::1;::::0;34896:87;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34896:87:0;:92:::1;;::::0;34888:152:::1;;;;-1:-1:-1::0;;;34888:152:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35068:13;::::0;35059:87:::1;::::0;;-1:-1:-1;;;35059:87:0;;35103:42:::1;35059:87;::::0;::::1;::::0;;;-1:-1:-1;;;;;35068:13:0;;::::1;::::0;35059:43:::1;::::0;:87;;;;;::::1;::::0;;;;;;;;;35068:13:::1;::::0;35059:87;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35059:87:0;:92:::1;;::::0;35051:152:::1;;;;-1:-1:-1::0;;;35051:152:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35231:13;::::0;35222:87:::1;::::0;;-1:-1:-1;;;35222:87:0;;35266:42:::1;35222:87;::::0;::::1;::::0;;;-1:-1:-1;;;;;35231:13:0;;::::1;::::0;35222:43:::1;::::0;:87;;;;;::::1;::::0;;;;;;;;;35231:13:::1;::::0;35222:87;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35222:87:0;:92:::1;;::::0;35214:152:::1;;;;-1:-1:-1::0;;;35214:152:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35410:4;35385:21;:29;;35377:54;;;::::0;;-1:-1:-1;;;35377:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35377:54:0;;;;;;;;;;;;;::::1;;35472:13;::::0;35499:4:::1;::::0;:27:::1;::::0;;-1:-1:-1;;;35499:27:0;;;;-1:-1:-1;;;;;35472:13:0;;::::1;::::0;35499:4;;::::1;::::0;:12:::1;::::0;35519:4:::1;::::0;35499:27:::1;::::0;;::::1;::::0;35444:16:::1;::::0;35499:27;;;;;;;35519:4;35499;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;35537:19;35574:7;-1:-1:-1::0;;;;;35574:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35574:19:0;35660:4:::1;::::0;35635:13:::1;::::0;;-1:-1:-1;;;35635:13:0;;;;35574:19;;-1:-1:-1;35615:17:0::1;::::0;-1:-1:-1;;;;;35660:4:0;;::::1;::::0;35635:11;::::1;::::0;::::1;::::0;:13:::1;::::0;;::::1;::::0;35574:19:::1;::::0;35635:13;;;;;;;:11;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35635:13:0;35717:18:::1;::::0;;-1:-1:-1;;;35717:18:0;;;;-1:-1:-1;;;;;35635:30:0;;::::1;::::0;;;::::1;::::0;-1:-1:-1;35677:16:0::1;::::0;;;35717;::::1;::::0;::::1;::::0;:18:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:16;:18;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35717:18:0;;::::1;::::0;;::::1;::::0;35746:4:::1;::::0;35717:18;35746:34;;-1:-1:-1;;;35746:34:0;;-1:-1:-1;;;;;35746:34:0;;::::1;;::::0;::::1;::::0;35775:4:::1;35746:34:::0;;;;;;-1:-1:-1;;;;;35676:59:0;;::::1;::::0;-1:-1:-1;35676:59:0;;;::::1;::::0;-1:-1:-1;35746:4:0::1;::::0;:13:::1;::::0;:34;;;;;;;;;;:4:::1;::::0;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;35791:18:0::1;::::0;-1:-1:-1;35822:304:0;::::1;;;35866:38;35879:4;35885:8;35895;35866:12;:38::i;:::-;35919:43;::::0;;-1:-1:-1;;;35919:43:0;;35929:1:::1;35919:43;::::0;::::1;::::0;;;;;;;;;35952:4:::1;35919:43:::0;;;;;;;;;;;;;;;;;35853:51;;-1:-1:-1;;;;;;35919:9:0;::::1;::::0;::::1;::::0;:43;;;;;35929:1;;35919:43;;;;;;35929:1;35919:9;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35822:304;;;36016:38;36029:4;36035:8;36045;36016:12;:38::i;:::-;36071:43;::::0;;-1:-1:-1;;;36071:43:0;;::::1;::::0;::::1;::::0;;;36093:1:::1;36071:43:::0;;;;;;36104:4:::1;36071:43:::0;;;;;;;;;;;;;;;;;36003:51;;-1:-1:-1;;;;;;36071:9:0;::::1;::::0;::::1;::::0;:43;;;;;36093:1;;36071:43;;;;;;36093:1;36071:9;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35822:304;36138:31;::::0;;-1:-1:-1;;;36138:31:0;;36163:4:::1;36138:31;::::0;::::1;::::0;;;-1:-1:-1;;;;;36138:16:0;::::1;::::0;::::1;::::0;:31;;;;;-1:-1:-1;;36138:31:0;;;;;;;-1:-1:-1;36138:16:0;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36180:7;-1:-1:-1::0;;;;;36180:23:0::1;;36204:3;36180:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36225:27;36255:7;-1:-1:-1::0;;;;;36255:17:0::1;;36273:7;-1:-1:-1::0;;;;;36273:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36273:19:0;36255:38:::1;::::0;;-1:-1:-1;;;;;;36255:38:0::1;::::0;;;;;;-1:-1:-1;;;;;36255:38:0;;::::1;;::::0;::::1;::::0;;;;;;;36273:19:::1;::::0;36255:38;;;;;;;-1:-1:-1;36255:38:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36255:38:0;36338:27:::1;::::0;;-1:-1:-1;;;36338:27:0;;;;36255:38;;-1:-1:-1;36304:24:0::1;::::0;-1:-1:-1;;;;;36338:25:0;::::1;::::0;::::1;::::0;:27:::1;::::0;;::::1;::::0;36255:38:::1;::::0;36338:27;;;;;;;36304:24;36338:25;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36338:27:0;36331:49:::1;::::0;;-1:-1:-1;;;36331:49:0;;;;-1:-1:-1;;;;;36331:47:0;;::::1;::::0;::::1;::::0;:49:::1;::::0;;::::1;::::0;36338:27:::1;::::0;36331:49;;;;;;;;:47;:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36331:49:0;36391:23:::1;:42:::0;;;36331:49;-1:-1:-1;36446:13:0::1;36462:70;36512:19:::0;36462:45:::1;-1:-1:-1::0;;36463:21:0;;36331:49;36462:27:::1;:45::i;:70::-;36446:86;;36545:7;-1:-1:-1::0;;;;;36545:19:0::1;;36565:5;36545:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36598:16;36616::::0;36638:4:::1;-1:-1:-1::0;;;;;36638:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36597:59;-1:-1:-1::0;;;;;36597:59:0::1;;;-1:-1:-1::0;;;;;36597:59:0::1;;;36667:15;36693:27:::0;36723:7:::1;-1:-1:-1::0;;;;;36723:17:0::1;;36749:4;36723:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;36723:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36723:32:0;36816::::1;::::0;;-1:-1:-1;;;36816:32:0;;36842:4:::1;36816:32;::::0;::::1;::::0;;;36723;;-1:-1:-1;;;;;;36766:33:0;::::1;::::0;::::1;::::0;36808:4;;36766:33;;36816:17:::1;::::0;:32;;;;;36723::::1;::::0;36816;;;;;;;-1:-1:-1;36766:33:0;36816:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36816:32:0;36766:83:::1;::::0;;-1:-1:-1;;;;;;36766:83:0::1;::::0;;;;;;-1:-1:-1;;;;;36766:83:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;36816:32:::1;::::0;36766:83;;;;;;;-1:-1:-1;36766:83:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;36860:22;36885:7;-1:-1:-1::0;;;;;36885:17:0::1;;36911:4;36885:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;36885:32:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;36885:32:0;;-1:-1:-1;36930:602:0;::::1;;;36971:69;37000:19;36984:14;:35;37021:8;37031;36971:12;:69::i;:::-;36961:79;;37057:4;-1:-1:-1::0;;;;;37057:9:0::1;;37067:7;37076:1;37087:4;37057:40;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;37057:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37139:4;-1:-1:-1::0;;;;;37139:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37139:18:0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;37112:45:0;;::::1;::::0;-1:-1:-1;37112:45:0::1;::::0;-1:-1:-1;37191:4:0::1;37180:15:::0;::::1;37172:48;;;::::0;;-1:-1:-1;;;37172:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;37172:48:0;;;;;;;;;;;;;::::1;;36930:602;;;37271:69;37300:19;37284:14;:35;37321:8;37331;37271:12;:69::i;:::-;37261:79;;37357:4;-1:-1:-1::0;;;;;37357:9:0::1;;37367:1;37370:7;37387:4;37357:40;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;37357:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37439:4;-1:-1:-1::0;;;;;37439:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37439:18:0;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;37412:45:0;;::::1;::::0;-1:-1:-1;37412:45:0::1;::::0;-1:-1:-1;37491:4:0::1;37480:15:::0;::::1;37472:48;;;::::0;;-1:-1:-1;;;37472:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;37472:48:0;;;;;;;;;;;;;::::1;;37544:26;37573:7;-1:-1:-1::0;;;;;37573:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37573:21:0;;-1:-1:-1;37684:35:0::1;37715:3;37684:26;37573:21:::0;37707:2:::1;37684:22;:26::i;:35::-;37674:7;:45;37666:81;;;::::0;;-1:-1:-1;;;37666:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37776:9;37766:7;:19;37758:54;;;::::0;;-1:-1:-1;;;37758:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;37758:54:0;;;;;;;;;;;;;::::1;;37872:85;37952:4;37872:57;37902:26;;37872:7;:29;;:57;;;;:::i;:85::-;37843:26;:114:::0;37970:4:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;37970:22:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;37970:4:0;;::::1;::::0;:13:::1;::::0;:22;;;;;:4:::1;::::0;:22;;;;;;;;:4;;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38005:7;-1:-1:-1::0;;;;;38005:26:0::1;;38040:4;38047:1;38005:44;;;;;;;;;;;;;-1:-1:-1::0;;;;;38005:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;38060:28:0::1;:35:::0;;-1:-1:-1;;38060:35:0::1;;;::::0;;-1:-1:-1;;;;;;;;;;;;;;;;;34303:3815:0:o;46654:434::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;46746:16:::1;46765:86;46825:25;;46765:55;46793:26;;46765:23;;:27;;:55;;;;:::i;:86::-;46877:12;::::0;46746:105;;-1:-1:-1;46877:21:0::1;::::0;46894:3;46877:16:::1;:21::i;:::-;46862:12;:36:::0;;;46917:24;-1:-1:-1;46917:24:0::1;46909:50;;;::::0;;-1:-1:-1;;;46909:50:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46909:50:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;46978:25:0;::::1;46970:41;;;::::0;;-1:-1:-1;;;46970:41:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;46970:41:0;;;;;;;;;;;;;::::1;;47022:25;47030:11;47043:3;47022:7;:25::i;:::-;47063:17;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;23082:1;46654:434:::0;;:::o;23745:244::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23834:22:0;::::1;23826:73;;;;-1:-1:-1::0;;;23826:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23936:6;::::0;23915:38:::1;::::0;-1:-1:-1;;;;;23915:38:0;;::::1;::::0;23936:6:::1;::::0;23915:38:::1;::::0;23936:6:::1;::::0;23915:38:::1;23964:6;:17:::0;;-1:-1:-1;;;;;;23964:17:0::1;-1:-1:-1::0;;;;;23964:17:0;;;::::1;::::0;;;::::1;::::0;;23745:244::o;28175:40::-;;;;:::o;31140:109::-;23022:12;:10;:12::i;:::-;23012:6;;-1:-1:-1;;;;;23012:6:0;;;:22;;;23004:67;;;;;-1:-1:-1;;;23004:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;23004:67:0;;;;;;;;;;;;;;;31211:21:::1;:30:::0;;-1:-1:-1;;;;;;31211:30:0::1;-1:-1:-1::0;;;;;31211:30:0;;;::::1;::::0;;;::::1;::::0;;31140:109::o;28545:28::-;;;-1:-1:-1;;;;;28545:28:0;;:::o;27852:36::-;;;-1:-1:-1;;;;;27852:36:0;;:::o;28629:38::-;;;;:::o;13416:181::-;13474:7;13506:5;;;13530:6;;;;13522:46;;;;;-1:-1:-1;;;13522:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13588:1;-1:-1:-1;13416:181:0;;;;;:::o;21068:106::-;21156:10;21068:106;:::o;14746:471::-;14804:7;15049:6;15045:47;;-1:-1:-1;15079:1:0;15072:8;;15045:47;15116:5;;;15120:1;15116;:5;:1;15140:5;;;;;:10;15132:56;;;;-1:-1:-1;;;15132:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15685:132;15743:7;15770:39;15774:1;15777;15770:39;;;;;;;;;;;;;;;;;:3;:39::i;13872:136::-;13930:7;13957:43;13961:1;13964;13957:43;;;;;;;;;;;;;;;;;:3;:43::i;41462:259::-;41541:18;;41579:13;;41529:64;;;-1:-1:-1;;;41529:64:0;;-1:-1:-1;;;;;41579:13:0;;;41529:64;;;;;;41541:18;;;;;41529:49;;:64;;;;;41541:18;;41529:64;;;;;;;41541:18;;41529:64;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41655:13:0;;41624:18;;41612:39;;;-1:-1:-1;;;41612:39:0;;;;-1:-1:-1;;;;;41655:13:0;;;;-1:-1:-1;41624:18:0;;;;;-1:-1:-1;41612:37:0;;:39;;;;;;;;;;;;;;41655:13;41624:18;41612:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41612:39:0;-1:-1:-1;;;;;41612:56:0;;41604:109;;;;-1:-1:-1;;;41604:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45366:371;45478:16;45507:17;45534:5;-1:-1:-1;;;;;45527:23:0;;45559:4;45527:38;;;;;;;;;;;;;-1:-1:-1;;;;;45527:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45527:38:0;45584:69;;;-1:-1:-1;;;45584:69:0;;45611:10;45584:69;;;;45631:4;45584:69;;;;;;;;;;;;45527:38;;-1:-1:-1;;;;;;45584:26:0;;;;;:69;;;;;45527:38;;45584:69;;;;;;;;-1:-1:-1;45584:26:0;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45584:69:0;45576:78;;;;;;45676:53;45719:9;45683:5;-1:-1:-1;;;;;45676:23:0;;45708:4;45676:38;;;;;;;;;;;;;-1:-1:-1;;;;;45676:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45676:38:0;;:42;:53::i;44322:430::-;44400:10;;44430:13;;44388:56;;;-1:-1:-1;;;44388:56:0;;-1:-1:-1;;;;;44430:13:0;;;44388:56;;;;;;44400:10;;;;;44388:41;;:56;;;;;44400:10;;44388:56;;;;;;;44400:10;;44388:56;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44498:13:0;;44475:10;;44463:31;;;-1:-1:-1;;;44463:31:0;;;;-1:-1:-1;;;;;44498:13:0;;;;-1:-1:-1;44475:10:0;;;;;-1:-1:-1;44463:29:0;;:31;;;;;;;;;;;;;;44498:13;44475:10;44463:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44463:31:0;-1:-1:-1;;;;;44463:48:0;;44455:88;;;;;-1:-1:-1;;;44455:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44584:16;;44620:13;;44572:62;;;-1:-1:-1;;;44572:62:0;;-1:-1:-1;;;;;44620:13:0;;;44572:62;;;;;;44584:16;;;;;44572:47;;:62;;;;;44584:16;;44572:62;;;;;;;44584:16;;44572:62;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44694:13:0;;44665:16;;44653:37;;;-1:-1:-1;;;44653:37:0;;;;-1:-1:-1;;;;;44694:13:0;;;;-1:-1:-1;44665:16:0;;;;;-1:-1:-1;44653:35:0;;:37;;;;;;;;;;;;;;44694:13;44665:16;44653:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44653:37:0;-1:-1:-1;;;;;44653:54:0;;44645:99;;;;;-1:-1:-1;;;44645:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19432:508;19849:4;19895:17;19927:7;19432:508;:::o;22378:129::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19180:83;22436:26:::1;:24;:26::i;:::-;22473;:24;:26::i;:::-;19285:14:::0;19281:57;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;22378:129;:::o;44840:145::-;44961:16;;-1:-1:-1;;;;;44961:11:0;;;:16;;;;;44973:3;;44961:16;;;;44973:3;44961:11;:16;;;;;;;;;;;;;;;;;;;45745:530;45848:17;45897:1;45886:8;:12;45878:68;;;;-1:-1:-1;;;45878:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45977:1;45965:9;:13;:31;;;;;45995:1;45982:10;:14;45965:31;45957:84;;;;-1:-1:-1;;;45957:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46052:20;46075:17;:8;46088:3;46075:12;:17::i;:::-;46052:40;-1:-1:-1;46103:14:0;46120:31;46052:40;46140:10;46120:19;:31::i;:::-;46103:48;-1:-1:-1;46162:16:0;46181:40;46205:15;46181:19;:9;46195:4;46181:13;:19::i;:40::-;46162:59;;46256:11;46244:9;:23;;;;;;;45745:530;-1:-1:-1;;;;;;;45745:530:0:o;16305:345::-;16391:7;16493:12;16486:5;16478:28;;;;-1:-1:-1;;;16478:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16517:9;16533:1;16529;:5;;;;;;;16305:345;-1:-1:-1;;;;;16305:345:0:o;14303:192::-;14389:7;14425:12;14417:6;;;;14409:29;;;;-1:-1:-1;;;14409:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14461:5:0;;;14303:192::o;20989:69::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19285:14;19281:57;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;20989:69;:::o;22515:202::-;19031:12;;;;;;;;:31;;;19047:15;:13;:15::i;:::-;19031:47;;;-1:-1:-1;19067:11:0;;;;19066:12;19031:47;19023:106;;;;-1:-1:-1;;;19023:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19138:19;19161:12;;;;;;19160:13;19180:83;;;;19209:12;:19;;-1:-1:-1;;;;19209:19:0;;;;;19237:18;19224:4;19237:18;;;19180:83;22587:17:::1;22607:12;:10;:12::i;:::-;22630:6;:18:::0;;-1:-1:-1;;;;;;22630:18:0::1;-1:-1:-1::0;;;;;22630:18:0;::::1;::::0;;::::1;::::0;;;22664:43:::1;::::0;22630:18;;-1:-1:-1;22630:18:0;-1:-1:-1;;22664:43:0::1;::::0;-1:-1:-1;;22664:43:0::1;19271:1;19285:14:::0;19281:57;;;19325:5;19310:20;;-1:-1:-1;;19310:20:0;;;22515:202;:::o;-1:-1:-1:-;;;;;;;;:::o
Swarm Source
ipfs://ead021f8861350596eee2e52f1d9ac906bfefcc9110199ca6c9126482e7bd4ce
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.