Overview
ETH Balance
0.224380009210894404 ETH
Eth Value
$767.27 (@ $3,419.50/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 17,177 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 13004138 | 1200 days ago | IN | 0 ETH | 0.00119059 | ||||
Approve | 13002231 | 1200 days ago | IN | 0 ETH | 0.0009544 | ||||
Approve | 13002224 | 1200 days ago | IN | 0 ETH | 0.00097605 | ||||
Withdraw Investm... | 12916663 | 1213 days ago | IN | 0 ETH | 0.00378506 | ||||
Withdraw Investm... | 12811091 | 1230 days ago | IN | 0 ETH | 0.0012149 | ||||
Withdraw Investm... | 12811091 | 1230 days ago | IN | 0 ETH | 0.0012149 | ||||
Withdraw Investm... | 12811091 | 1230 days ago | IN | 0 ETH | 0.0012149 | ||||
Withdraw Investm... | 12811091 | 1230 days ago | IN | 0 ETH | 0.00107492 | ||||
Withdraw Investm... | 12787254 | 1233 days ago | IN | 0 ETH | 0.00240638 | ||||
Withdraw Investm... | 12769488 | 1236 days ago | IN | 0 ETH | 0.00074551 | ||||
Withdraw Investm... | 12765538 | 1237 days ago | IN | 0 ETH | 0.0008671 | ||||
Withdraw Investm... | 12765536 | 1237 days ago | IN | 0 ETH | 0.00073379 | ||||
Withdraw Investm... | 12765536 | 1237 days ago | IN | 0 ETH | 0.00066928 | ||||
Withdraw Investm... | 12761703 | 1237 days ago | IN | 0 ETH | 0.00063834 | ||||
Withdraw Investm... | 12743528 | 1240 days ago | IN | 0 ETH | 0.00588952 | ||||
Withdraw Investm... | 12726352 | 1243 days ago | IN | 0 ETH | 0.00111826 | ||||
Withdraw Investm... | 12726139 | 1243 days ago | IN | 0 ETH | 0.00057439 | ||||
Withdraw Investm... | 12726106 | 1243 days ago | IN | 0 ETH | 0.00074551 | ||||
Withdraw Investm... | 12725731 | 1243 days ago | IN | 0 ETH | 0.00107492 | ||||
Withdraw Investm... | 12725731 | 1243 days ago | IN | 0 ETH | 0.00107492 | ||||
Withdraw Investm... | 12725731 | 1243 days ago | IN | 0 ETH | 0.00107492 | ||||
Withdraw Investm... | 12725731 | 1243 days ago | IN | 0 ETH | 0.00104587 | ||||
Withdraw Investm... | 12725731 | 1243 days ago | IN | 0 ETH | 0.00104587 | ||||
Withdraw Investm... | 12725731 | 1243 days ago | IN | 0 ETH | 0.00079233 | ||||
Withdraw Investm... | 12725731 | 1243 days ago | IN | 0 ETH | 0.00026411 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12516661 | 1275 days ago | 0.09998 ETH | ||||
12516660 | 1275 days ago | 0.19996 ETH | ||||
12516654 | 1275 days ago | 0.14997 ETH | ||||
12516652 | 1275 days ago | 0.1419716 ETH | ||||
12516651 | 1275 days ago | 0.159968 ETH | ||||
12516647 | 1275 days ago | 0.04999 ETH | ||||
12516647 | 1275 days ago | 0.07138572 ETH | ||||
12516646 | 1275 days ago | 0.4999 ETH | ||||
12516643 | 1276 days ago | 0.04999 ETH | ||||
12516642 | 1276 days ago | 0.4999 ETH | ||||
12516642 | 1276 days ago | 0.4999 ETH | ||||
12516642 | 1276 days ago | 0.4999 ETH | ||||
12516642 | 1276 days ago | 0.9998 ETH | ||||
12516642 | 1276 days ago | 0.9998 ETH | ||||
12516642 | 1276 days ago | 0.4999 ETH | ||||
12516642 | 1276 days ago | 0.19996 ETH | ||||
12516641 | 1276 days ago | 0.9998 ETH | ||||
12516641 | 1276 days ago | 0.39992 ETH | ||||
12516641 | 1276 days ago | 0.4999 ETH | ||||
12516640 | 1276 days ago | 0.09998 ETH | ||||
12516640 | 1276 days ago | 0.119976 ETH | ||||
12516640 | 1276 days ago | 0.4999 ETH | ||||
12516640 | 1276 days ago | 0.9998 ETH | ||||
12516640 | 1276 days ago | 0.0959808 ETH | ||||
12516639 | 1276 days ago | 0.9998 ETH |
Loading...
Loading
Contract Name:
ThePoolz
Compiler Version
v0.4.26+commit.4563c3fc
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-07 */ pragma solidity ^0.4.24;/** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } }/** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); }/** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); }/** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } }/** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() public onlyOwner whenNotPaused { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() public onlyOwner whenPaused { paused = false; emit Unpause(); } }// SPDX-License-Identifier: MIT contract GovManager is Pausable { address public GovernerContract; modifier onlyOwnerOrGov() { require(msg.sender == owner || msg.sender == GovernerContract, "Authorization Error"); _; } function setGovernerContract(address _address) external onlyOwnerOrGov{ GovernerContract = _address; } constructor() public { GovernerContract = address(0); } }// SPDX-License-Identifier: MIT contract ERC20Helper is GovManager { event TransferOut(uint256 Amount, address To, address Token); event TransferIn(uint256 Amount, address From, address Token); modifier TestAllownce( address _token, address _owner, uint256 _amount ) { require( ERC20(_token).allowance(_owner, address(this)) >= _amount, "no allowance" ); _; } function TransferToken( address _Token, address _Reciver, uint256 _Amount ) internal { uint256 OldBalance = CheckBalance(_Token, address(this)); emit TransferOut(_Amount, _Reciver, _Token); ERC20(_Token).transfer(_Reciver, _Amount); require( (SafeMath.add(CheckBalance(_Token, address(this)), _Amount)) == OldBalance , "recive wrong amount of tokens" ); } function CheckBalance(address _Token, address _Subject) internal view returns (uint256) { return ERC20(_Token).balanceOf(_Subject); } function TransferInToken( address _Token, address _Subject, uint256 _Amount ) internal TestAllownce(_Token, _Subject, _Amount) { require(_Amount > 0); uint256 OldBalance = CheckBalance(_Token, address(this)); ERC20(_Token).transferFrom(_Subject, address(this), _Amount); emit TransferIn(_Amount, _Subject, _Token); require( (SafeMath.add(OldBalance, _Amount)) == CheckBalance(_Token, address(this)), "recive wrong amount of tokens" ); } }// SPDX-License-Identifier: MIT //True POZ Token will have this, interface IPOZBenefit { function IsPOZHolder(address _Subject) external view returns(bool); }// SPDX-License-Identifier: MIT contract PozBenefit is ERC20Helper { constructor() public { PozFee = 15; // *10000 PozTimer = 1000; // *10000 // POZ_Address = address(0x0); // POZBenefit_Address = address(0x0); } uint256 public PozFee; // the fee for the first part of the pool uint256 public PozTimer; //the timer for the first part fo the pool modifier PercentCheckOk(uint256 _percent) { if (_percent < 10000) _; else revert("Not in range"); } modifier LeftIsBigger(uint256 _left, uint256 _right) { if (_left > _right) _; else revert("Not bigger"); } function SetPozTimer(uint256 _pozTimer) public onlyOwnerOrGov PercentCheckOk(_pozTimer) { PozTimer = _pozTimer; } }// SPDX-License-Identifier: MIT contract ETHHelper is PozBenefit { constructor() public { IsPayble = false; } modifier ReceivETH(uint256 msgValue, address msgSender, uint256 _MinETHInvest) { require(msgValue >= _MinETHInvest, "Send ETH to invest"); emit TransferInETH(msgValue, msgSender); _; } //@dev not/allow contract to receive funds function() public payable { if (!IsPayble) revert(); } event TransferOutETH(uint256 Amount, address To); event TransferInETH(uint256 Amount, address From); bool public IsPayble; function SwitchIsPayble() public onlyOwner { IsPayble = !IsPayble; } function TransferETH(address _Reciver, uint256 _ammount) internal { emit TransferOutETH(_ammount, _Reciver); uint256 beforeBalance = address(_Reciver).balance; _Reciver.transfer(_ammount); require( SafeMath.add(beforeBalance, _ammount) == address(_Reciver).balance, "The transfer did not complite" ); } }// SPDX-License-Identifier: MIT //For whitelist, interface IWhiteList { function Check(address _Subject, uint256 _Id) external view returns(uint); function Register(address _Subject,uint256 _Id,uint256 _Amount) external; function IsNeedRegister(uint256 _Id) external view returns(bool); }// SPDX-License-Identifier: MIT contract Manageable is ETHHelper { constructor() public { Fee = 20; // *10000 //MinDuration = 0; //need to set //PoolPrice = 0; // Price for create a pool MaxDuration = 60 * 60 * 24 * 30 * 6; // half year MinETHInvest = 10000; // for percent calc MaxETHInvest = 100 * 10**18; // 100 eth per wallet //WhiteList_Address = address(0x0); } mapping(address => uint256) FeeMap; //@dev for percent use uint16 uint256 public Fee; //the fee for the pool uint256 public MinDuration; //the minimum duration of a pool, in seconds uint256 public MaxDuration; //the maximum duration of a pool from the creation, in seconds uint256 public PoolPrice; uint256 public MinETHInvest; uint256 public MaxETHInvest; address public WhiteList_Address; //The address of the Whitelist contract bool public IsTokenFilterOn; uint256 public TokenWhitelistId; uint256 public MCWhitelistId; // Main Coin WhiteList ID function SwapTokenFilter() public onlyOwner { IsTokenFilterOn = !IsTokenFilterOn; } function setTokenWhitelistId(uint256 _whiteListId) external onlyOwnerOrGov{ TokenWhitelistId = _whiteListId; } function setMCWhitelistId(uint256 _whiteListId) external onlyOwnerOrGov{ MCWhitelistId = _whiteListId; } function IsValidToken(address _address) public view returns (bool) { return !IsTokenFilterOn || (IWhiteList(WhiteList_Address).Check(_address, TokenWhitelistId) > 0); } function IsERC20Maincoin(address _address) public view returns (bool) { return !IsTokenFilterOn || IWhiteList(WhiteList_Address).Check(_address, MCWhitelistId) > 0; } function SetWhiteList_Address(address _WhiteList_Address) public onlyOwnerOrGov { WhiteList_Address = _WhiteList_Address; } function SetMinMaxETHInvest(uint256 _MinETHInvest, uint256 _MaxETHInvest) public onlyOwnerOrGov { MinETHInvest = _MinETHInvest; MaxETHInvest = _MaxETHInvest; } function SetMinMaxDuration(uint256 _minDuration, uint256 _maxDuration) public onlyOwnerOrGov { MinDuration = _minDuration; MaxDuration = _maxDuration; } function SetPoolPrice(uint256 _PoolPrice) public onlyOwnerOrGov { PoolPrice = _PoolPrice; } function SetFee(uint256 _fee) public onlyOwnerOrGov PercentCheckOk(_fee) LeftIsBigger(_fee, PozFee) { Fee = _fee; } function SetPOZFee(uint256 _fee) public onlyOwnerOrGov PercentCheckOk(_fee) LeftIsBigger(Fee, _fee) { PozFee = _fee; } }// SPDX-License-Identifier: MIT contract Pools is Manageable { event NewPool(address token, uint256 id); event FinishPool(uint256 id); event PoolUpdate(uint256 id); constructor() public { // poolsCount = 0; //Start with 0 } uint256 public poolsCount; // the ids of the pool mapping(uint256 => Pool) public pools; //the id of the pool with the data mapping(address => uint256[]) public poolsMap; //the address and all of the pools id's struct Pool { PoolBaseData BaseData; PoolMoreData MoreData; } struct PoolBaseData { address Token; //the address of the erc20 toke for sale address Creator; //the project owner uint256 FinishTime; //Until what time the pool is active uint256 Rate; //for eth Wei, in token, by the decemal. the cost of 1 token uint256 POZRate; //the rate for the until OpenForAll, if the same as Rate , OpenForAll = StartTime . address Maincoin; // on adress.zero = ETH uint256 StartAmount; //The total amount of the tokens for sale } struct PoolMoreData { uint64 LockedUntil; // true - the investors getting the tokens after the FinishTime. false - intant deal uint256 Lefttokens; // the ammount of tokens left for sale uint256 StartTime; // the time the pool open //TODO Maybe Delete this? uint256 OpenForAll; // The Time that all investors can invest uint256 UnlockedTokens; //for locked pools uint256 WhiteListId; // 0 is turn off, the Id of the whitelist from the contract. bool TookLeftOvers; //The Creator took the left overs after the pool finished bool Is21DecimalRate; //If true, the rate will be rate*10^-21 } function isPoolLocked(uint256 _id) public view returns(bool){ return pools[_id].MoreData.LockedUntil > now; } //create a new pool function CreatePool( address _Token, //token to sell address uint256 _FinishTime, //Until what time the pool will work uint256 _Rate, //the rate of the trade uint256 _POZRate, //the rate for POZ Holders, how much each token = main coin uint256 _StartAmount, //Total amount of the tokens to sell in the pool uint64 _LockedUntil, //False = DSP or True = TLP address _MainCoin, // address(0x0) = ETH, address of main token bool _Is21Decimal, //focus the for smaller tokens. uint256 _Now, //Start Time - can be 0 to not change current flow uint256 _WhiteListId // the Id of the Whitelist contract, 0 For turn-off ) public payable whenNotPaused { require(msg.value >= PoolPrice, "Need to pay for the pool"); require(IsValidToken(_Token), "Need Valid ERC20 Token"); //check if _Token is ERC20 require( _MainCoin == address(0x0) || IsERC20Maincoin(_MainCoin), "Main coin not in list" ); require(_FinishTime < SafeMath.add(MaxDuration, now), "Pool duration can't be that long"); require(_LockedUntil < SafeMath.add(MaxDuration, now) , "Locked value can't be that long"); require( _Rate <= _POZRate, "POZ holders need to have better price (or the same)" ); require(_POZRate > 0, "It will not work"); if (_Now < now) _Now = now; require( SafeMath.add(now, MinDuration) <= _FinishTime, "Need more then MinDuration" ); // check if the time is OK TransferInToken(_Token, msg.sender, _StartAmount); uint256 Openforall = (_WhiteListId == 0) ? _Now //and this : SafeMath.add( SafeMath.div( SafeMath.mul(SafeMath.sub(_FinishTime, _Now), PozTimer), 10000 ), _Now ); //register the pool pools[poolsCount] = Pool( PoolBaseData( _Token, msg.sender, _FinishTime, _Rate, _POZRate, _MainCoin, _StartAmount ), PoolMoreData( _LockedUntil, _StartAmount, _Now, Openforall, 0, _WhiteListId, false, _Is21Decimal ) ); poolsMap[msg.sender].push(poolsCount); emit NewPool(_Token, poolsCount); poolsCount = SafeMath.add(poolsCount, 1); //joke - overflowfrom 0 on int256 = 1.16E77 } }// SPDX-License-Identifier: MIT contract PoolsData is Pools { enum PoolStatus {Created, Open, PreMade, OutOfstock, Finished, Close} //the status of the pools modifier PoolId(uint256 _id) { require(_id < poolsCount, "Wrong pool id, Can't get Status"); _; } function GetMyPoolsId() public view returns (uint256[]) { return poolsMap[msg.sender]; } function GetPoolBaseData(uint256 _Id) public view PoolId(_Id) returns ( address, address, uint256, uint256, uint256, uint256 ) { return ( pools[_Id].BaseData.Token, pools[_Id].BaseData.Creator, pools[_Id].BaseData.FinishTime, pools[_Id].BaseData.Rate, pools[_Id].BaseData.POZRate, pools[_Id].BaseData.StartAmount ); } function GetPoolMoreData(uint256 _Id) public view PoolId(_Id) returns ( uint64, uint256, uint256, uint256, uint256, bool ) { return ( pools[_Id].MoreData.LockedUntil, pools[_Id].MoreData.Lefttokens, pools[_Id].MoreData.StartTime, pools[_Id].MoreData.OpenForAll, pools[_Id].MoreData.UnlockedTokens, pools[_Id].MoreData.Is21DecimalRate ); } function GetPoolExtraData(uint256 _Id) public view PoolId(_Id) returns ( bool, uint256, address ) { return ( pools[_Id].MoreData.TookLeftOvers, pools[_Id].MoreData.WhiteListId, pools[_Id].BaseData.Maincoin ); } function IsReadyWithdrawLeftOvers(uint256 _PoolId) public view PoolId(_PoolId) returns (bool) { return pools[_PoolId].BaseData.FinishTime <= now && pools[_PoolId].MoreData.Lefttokens > 0 && !pools[_PoolId].MoreData.TookLeftOvers; } //@dev no use of revert to make sure the loop will work function WithdrawLeftOvers(uint256 _PoolId) public PoolId(_PoolId) returns (bool) { //pool is finished + got left overs + did not took them if (IsReadyWithdrawLeftOvers(_PoolId)) { pools[_PoolId].MoreData.TookLeftOvers = true; TransferToken( pools[_PoolId].BaseData.Token, pools[_PoolId].BaseData.Creator, pools[_PoolId].MoreData.Lefttokens ); return true; } return false; } //calculate the status of a pool function GetPoolStatus(uint256 _id) public view PoolId(_id) returns (PoolStatus) { //Don't like the logic here - ToDo Boolean checks (truth table) if (now < pools[_id].MoreData.StartTime) return PoolStatus.PreMade; if ( now < pools[_id].MoreData.OpenForAll && pools[_id].MoreData.Lefttokens > 0 ) { //got tokens + only poz investors return (PoolStatus.Created); } if ( now >= pools[_id].MoreData.OpenForAll && pools[_id].MoreData.Lefttokens > 0 && now < pools[_id].BaseData.FinishTime ) { //got tokens + all investors return (PoolStatus.Open); } if ( pools[_id].MoreData.Lefttokens == 0 && isPoolLocked(_id) && now < pools[_id].BaseData.FinishTime ) //no tokens on locked pool, got time { return (PoolStatus.OutOfstock); } if ( pools[_id].MoreData.Lefttokens == 0 && !isPoolLocked(_id) ) //no tokens on direct pool { return (PoolStatus.Close); } if ( now >= pools[_id].BaseData.FinishTime && !isPoolLocked(_id) ) { // After finish time - not locked if (pools[_id].MoreData.TookLeftOvers) return (PoolStatus.Close); return (PoolStatus.Finished); } if ( (pools[_id].MoreData.TookLeftOvers || pools[_id].MoreData.Lefttokens == 0) && (pools[_id].MoreData.UnlockedTokens + pools[_id].MoreData.Lefttokens == pools[_id].BaseData.StartAmount) ) return (PoolStatus.Close); return (PoolStatus.Finished); } }// SPDX-License-Identifier: MIT contract Invest is PoolsData { event NewInvestorEvent(uint256 Investor_ID, address Investor_Address); modifier CheckTime(uint256 _Time) { require(now >= _Time, "Pool not open yet"); _; } //using SafeMath for uint256; constructor() public { //TotalInvestors = 0; } //Investorsr Data uint256 internal TotalInvestors; mapping(uint256 => Investor) Investors; mapping(address => uint256[]) InvestorsMap; struct Investor { uint256 Poolid; //the id of the pool, he got the rate info and the token, check if looked pool address InvestorAddress; // uint256 MainCoin; //the amount of the main coin invested (eth/dai), calc with rate uint256 TokensOwn; //the amount of Tokens the investor needto get from the contract uint256 InvestTime; //the time that investment made } function getTotalInvestor() external view returns(uint256){ return TotalInvestors; } //@dev Send in wei function InvestETH(uint256 _PoolId) external payable ReceivETH(msg.value, msg.sender, MinETHInvest) whenNotPaused CheckTime(pools[_PoolId].MoreData.StartTime) { require(_PoolId < poolsCount, "Wrong pool id, InvestETH fail"); require(pools[_PoolId].BaseData.Maincoin == address(0x0), "Pool is not for ETH"); require( msg.value >= MinETHInvest && msg.value <= MaxETHInvest, "Investment amount not valid" ); require( msg.sender == tx.origin && !isContract(msg.sender), "Some thing wrong with the msgSender" ); uint256 ThisInvestor = NewInvestor(msg.sender, msg.value, _PoolId); uint256 Tokens = CalcTokens(_PoolId, msg.value, msg.sender); TokenAllocate(_PoolId, ThisInvestor, Tokens); uint256 EthMinusFee = SafeMath.div( SafeMath.mul(msg.value, SafeMath.sub(10000, CalcFee(_PoolId))), 10000 ); // send money to project owner - the fee stays on contract TransferETH(pools[_PoolId].BaseData.Creator, EthMinusFee); RegisterInvest(_PoolId, Tokens); } function InvestERC20(uint256 _PoolId, uint256 _Amount) external whenNotPaused CheckTime(pools[_PoolId].MoreData.StartTime) { require(_PoolId < poolsCount, "Wrong pool id, InvestERC20 fail"); require( pools[_PoolId].BaseData.Maincoin != address(0x0), "Pool is for ETH, use InvetETH" ); require(_Amount > 10000, "Need invest more then 10000"); require( msg.sender == tx.origin && !isContract(msg.sender), "Some thing wrong with the msgSender" ); TransferInToken(pools[_PoolId].BaseData.Maincoin, msg.sender, _Amount); uint256 ThisInvestor = NewInvestor(msg.sender, _Amount, _PoolId); uint256 Tokens = CalcTokens(_PoolId, _Amount, msg.sender); TokenAllocate(_PoolId, ThisInvestor, Tokens); uint256 RegularFeePay = SafeMath.div(SafeMath.mul(_Amount, CalcFee(_PoolId)), 10000); uint256 RegularPaymentMinusFee = SafeMath.sub(_Amount, RegularFeePay); FeeMap[pools[_PoolId].BaseData.Maincoin] = SafeMath.add( FeeMap[pools[_PoolId].BaseData.Maincoin], RegularFeePay ); TransferToken( pools[_PoolId].BaseData.Maincoin, pools[_PoolId].BaseData.Creator, RegularPaymentMinusFee ); // send money to project owner - the fee stays on contract RegisterInvest(_PoolId, Tokens); } function TokenAllocate(uint256 _PoolId, uint256 _ThisInvestor, uint256 _Tokens) internal { if (isPoolLocked(_PoolId)) { Investors[_ThisInvestor].TokensOwn = SafeMath.add( Investors[_ThisInvestor].TokensOwn, _Tokens ); } else { // not locked, will transfer the tokens TransferToken(pools[_PoolId].BaseData.Token, Investors[_ThisInvestor].InvestorAddress, _Tokens); } } function RegisterInvest(uint256 _PoolId, uint256 _Tokens) internal { require( _Tokens <= pools[_PoolId].MoreData.Lefttokens, "Not enough tokens in the pool" ); pools[_PoolId].MoreData.Lefttokens = SafeMath.sub( pools[_PoolId].MoreData.Lefttokens, _Tokens ); if (pools[_PoolId].MoreData.Lefttokens == 0) emit FinishPool(_PoolId); else emit PoolUpdate(_PoolId); } function NewInvestor( address _Sender, uint256 _Amount, uint256 _Pid ) internal returns (uint256) { Investors[TotalInvestors] = Investor( _Pid, _Sender, _Amount, 0, block.timestamp ); InvestorsMap[msg.sender].push(TotalInvestors); emit NewInvestorEvent(TotalInvestors, _Sender); TotalInvestors = SafeMath.add(TotalInvestors, 1); return SafeMath.sub(TotalInvestors, 1); } function CalcTokens( uint256 _Pid, uint256 _Amount, address _Sender ) internal returns (uint256) { uint256 msgValue = _Amount; uint256 result = 0; if (GetPoolStatus(_Pid) == PoolStatus.Created) { IsWhiteList(_Sender, pools[_Pid].MoreData.WhiteListId, _Amount); result = SafeMath.mul(msgValue, pools[_Pid].BaseData.POZRate); } if (GetPoolStatus(_Pid) == PoolStatus.Open) { result = SafeMath.mul(msgValue, pools[_Pid].BaseData.Rate); } if (result >= 10**21) { if (pools[_Pid].MoreData.Is21DecimalRate) { result = SafeMath.div(result, 10**21); } return result; } revert("Wrong pool status to CalcTokens"); } function CalcFee(uint256 _Pid) internal view returns (uint256) { if (GetPoolStatus(_Pid) == PoolStatus.Created) { return PozFee; } if (GetPoolStatus(_Pid) == PoolStatus.Open) { return Fee; } //will not get here, will fail on CalcTokens } //@dev use it with require(msg.sender == tx.origin) function isContract(address _addr) internal view returns (bool) { uint32 size; assembly { size := extcodesize(_addr) } return (size > 0); } // no need register - will return true or false base on Check // if need register - revert or true function IsWhiteList( address _Investor, uint256 _Id, uint256 _Amount ) internal returns (bool) { if (_Id == 0) return true; //turn-off IWhiteList(WhiteList_Address).Register(_Investor, _Id, _Amount); //will revert if fail return true; } }// SPDX-License-Identifier: MIT contract InvestorData is Invest { function IsReadyWithdrawInvestment(uint256 _id) public view returns (bool) { return _id <= TotalInvestors && Investors[_id].TokensOwn > 0 && pools[Investors[_id].Poolid].MoreData.LockedUntil <= now; } function WithdrawInvestment(uint256 _id) public returns (bool) { if (IsReadyWithdrawInvestment(_id)) { uint256 temp = Investors[_id].TokensOwn; Investors[_id].TokensOwn = 0; TransferToken( pools[Investors[_id].Poolid].BaseData.Token, Investors[_id].InvestorAddress, temp ); pools[Investors[_id].Poolid].MoreData.UnlockedTokens = SafeMath.add( pools[Investors[_id].Poolid].MoreData.UnlockedTokens, temp ); return true; } return false; } //Give all the id's of the investment by sender address function GetMyInvestmentIds() public view returns (uint256[]) { return InvestorsMap[msg.sender]; } function GetInvestmentData(uint256 _id) public view returns ( uint256, address, uint256, uint256, uint256 ) { return ( Investors[_id].Poolid, Investors[_id].InvestorAddress, Investors[_id].MainCoin, Investors[_id].TokensOwn, Investors[_id].InvestTime ); } }// SPDX-License-Identifier: MIT contract ThePoolz is InvestorData { constructor() public { } function WithdrawETHFee(address _to) public onlyOwner { _to.transfer(address(this).balance); // keeps only fee eth on contract //To Do need to take 16% to burn!!! } function WithdrawERC20Fee(address _Token, address _to) public onlyOwner { uint256 temp = FeeMap[_Token]; FeeMap[_Token] = 0; TransferToken(_Token, _to, temp); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"SetFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MCWhitelistId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"SwapTokenFilter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GovernerContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"GetPoolStatus","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"IsValidToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TokenWhitelistId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MinDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_MinETHInvest","type":"uint256"},{"name":"_MaxETHInvest","type":"uint256"}],"name":"SetMinMaxETHInvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_Id","type":"uint256"}],"name":"GetPoolMoreData","outputs":[{"name":"","type":"uint64"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PozFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"poolsMap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IsTokenFilterOn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"GetInvestmentData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_Id","type":"uint256"}],"name":"GetPoolBaseData","outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GetMyPoolsId","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGovernerContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalInvestor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"isPoolLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MaxDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"WithdrawInvestment","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"poolsCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GetMyInvestmentIds","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WhiteList_Address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"WithdrawETHFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_PoolId","type":"uint256"}],"name":"IsReadyWithdrawLeftOvers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"SetPOZFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MaxETHInvest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"SwitchIsPayble","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PozTimer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"pools","outputs":[{"components":[{"name":"Token","type":"address"},{"name":"Creator","type":"address"},{"name":"FinishTime","type":"uint256"},{"name":"Rate","type":"uint256"},{"name":"POZRate","type":"uint256"},{"name":"Maincoin","type":"address"},{"name":"StartAmount","type":"uint256"}],"name":"BaseData","type":"tuple"},{"components":[{"name":"LockedUntil","type":"uint64"},{"name":"Lefttokens","type":"uint256"},{"name":"StartTime","type":"uint256"},{"name":"OpenForAll","type":"uint256"},{"name":"UnlockedTokens","type":"uint256"},{"name":"WhiteListId","type":"uint256"},{"name":"TookLeftOvers","type":"bool"},{"name":"Is21DecimalRate","type":"bool"}],"name":"MoreData","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IsPayble","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minDuration","type":"uint256"},{"name":"_maxDuration","type":"uint256"}],"name":"SetMinMaxDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_WhiteList_Address","type":"address"}],"name":"SetWhiteList_Address","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolPrice","type":"uint256"}],"name":"SetPoolPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolId","type":"uint256"},{"name":"_Amount","type":"uint256"}],"name":"InvestERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PoolPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"Fee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MinETHInvest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListId","type":"uint256"}],"name":"setTokenWhitelistId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_Id","type":"uint256"}],"name":"GetPoolExtraData","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"IsReadyWithdrawInvestment","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_Token","type":"address"},{"name":"_FinishTime","type":"uint256"},{"name":"_Rate","type":"uint256"},{"name":"_POZRate","type":"uint256"},{"name":"_StartAmount","type":"uint256"},{"name":"_LockedUntil","type":"uint64"},{"name":"_MainCoin","type":"address"},{"name":"_Is21Decimal","type":"bool"},{"name":"_Now","type":"uint256"},{"name":"_WhiteListId","type":"uint256"}],"name":"CreatePool","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"IsERC20Maincoin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListId","type":"uint256"}],"name":"setMCWhitelistId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolId","type":"uint256"}],"name":"InvestETH","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_pozTimer","type":"uint256"}],"name":"SetPozTimer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_Token","type":"address"},{"name":"_to","type":"address"}],"name":"WithdrawERC20Fee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolId","type":"uint256"}],"name":"WithdrawLeftOvers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Investor_ID","type":"uint256"},{"indexed":false,"name":"Investor_Address","type":"address"}],"name":"NewInvestorEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"id","type":"uint256"}],"name":"NewPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"}],"name":"FinishPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"}],"name":"PoolUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"To","type":"address"}],"name":"TransferOutETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"From","type":"address"}],"name":"TransferInETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"To","type":"address"},{"indexed":false,"name":"Token","type":"address"}],"name":"TransferOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"From","type":"address"},{"indexed":false,"name":"Token","type":"address"}],"name":"TransferIn","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60806040526000805460a060020a60ff021916905534801561002057600080fd5b5060008054600160a060020a03199081163317909155600180549091169055600f6002556103e86003556004805460ff19169055601460065562ed4e00600855612710600a5568056bc75e2d63100000600b556134b6806100826000396000f3006080604052600436106102785763ffffffff60e060020a600035041662172ddf811461028b578063043d520b146102a357806307b027ed146102ca5780630cd8e965146102df5780630d08caa014610310578063114fa9bd1461034c57806318c9be4a1461038157806327ca36ec146103965780633e90eea7146103ab5780633f4ba83a146103c657806341004025146103db57806353eb31671461043357806356793bc7146104485780635c975abb1461046c5780635cdddc7c1461048157806360f9e80a1461049657806360fdd7c4146104e157806363552a4914610538578063668189671461059d5780636b1fe0b6146105be5780636b58f2f6146105d3578063715018a6146105eb57806375c64dd1146106005780638456cb591461061557806387e3c5991461062a5780638c788de0146106425780638da5cb5b1461065757806391314dde1461066c5780639642ec0c14610681578063991e979a14610696578063a73ff128146106b7578063a87d2be4146106cf578063aa825486146106e7578063aac5da5c146106fc578063abb7add214610711578063ac4afa3814610726578063b5f98b8e14610757578063b7d9b6f11461076c578063b973d7bc14610787578063b977eddf146107a8578063be33a3ec146107c0578063bed06041146107db578063bef7a2f0146107f0578063cab1704614610805578063ccb801bf1461081a578063d0f5291014610832578063e34c777214610873578063e4ec0f681461088b578063e8906716146108d0578063ee63e8bd146108f1578063f04be48b14610909578063f2fde38b14610914578063f318824814610935578063fc1a86ff1461094d578063fd711a5514610974575b60045460ff16151561028957600080fd5b005b34801561029757600080fd5b5061028960043561098c565b3480156102af57600080fd5b506102b8610abf565b60408051918252519081900360200190f35b3480156102d657600080fd5b50610289610ac5565b3480156102eb57600080fd5b506102f4610b0e565b60408051600160a060020a039092168252519081900360200190f35b34801561031c57600080fd5b50610328600435610b1d565b6040518082600581111561033857fe5b60ff16815260200191505060405180910390f35b34801561035857600080fd5b5061036d600160a060020a0360043516610d6c565b604080519115158252519081900360200190f35b34801561038d57600080fd5b506102b8610e2f565b3480156103a257600080fd5b506102b8610e35565b3480156103b757600080fd5b50610289600435602435610e3b565b3480156103d257600080fd5b50610289610ead565b3480156103e757600080fd5b506103f3600435610f23565b6040805167ffffffffffffffff909716875260208701959095528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b34801561043f57600080fd5b506102b8610fc9565b34801561045457600080fd5b506102b8600160a060020a0360043516602435610fcf565b34801561047857600080fd5b5061036d610fff565b34801561048d57600080fd5b5061036d61100f565b3480156104a257600080fd5b506104ae60043561101f565b60408051958652600160a060020a0390941660208601528484019290925260608401526080830152519081900360a00190f35b3480156104ed57600080fd5b506104f9600435611058565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561054457600080fd5b5061054d6110f4565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610589578181015183820152602001610571565b505050509050019250505060405180910390f35b3480156105a957600080fd5b50610289600160a060020a0360043516611155565b3480156105ca57600080fd5b506102b86111eb565b3480156105df57600080fd5b5061036d6004356111f1565b3480156105f757600080fd5b50610289611214565b34801561060c57600080fd5b506102b8611280565b34801561062157600080fd5b50610289611286565b34801561063657600080fd5b5061036d600435611301565b34801561064e57600080fd5b506102b86113bb565b34801561066357600080fd5b506102f46113c1565b34801561067857600080fd5b5061054d6113d0565b34801561068d57600080fd5b506102f461142f565b3480156106a257600080fd5b50610289600160a060020a036004351661143e565b3480156106c357600080fd5b5061036d60043561148b565b3480156106db57600080fd5b5061028960043561152c565b3480156106f357600080fd5b506102b86115b4565b34801561070857600080fd5b506102896115ba565b34801561071d57600080fd5b506102b86115e5565b34801561073257600080fd5b5061073e6004356115eb565b6040805192835260208301919091528051918290030190f35b34801561076357600080fd5b5061036d6116e3565b34801561077857600080fd5b506102896004356024356116ec565b34801561079357600080fd5b50610289600160a060020a036004351661175e565b3480156107b457600080fd5b506102896004356117f4565b3480156107cc57600080fd5b50610289600435602435611860565b3480156107e757600080fd5b506102b8611ba4565b3480156107fc57600080fd5b506102b8611baa565b34801561081157600080fd5b506102b8611bb0565b34801561082657600080fd5b50610289600435611bb6565b34801561083e57600080fd5b5061084a600435611c22565b6040805193151584526020840192909252600160a060020a031682820152519081900360600190f35b34801561087f57600080fd5b5061036d600435611ca7565b610289600160a060020a036004358116906024359060443590606435906084359067ffffffffffffffff60a435169060c4351660e43515156101043561012435611d03565b3480156108dc57600080fd5b5061036d600160a060020a036004351661237e565b3480156108fd57600080fd5b5061028960043561240b565b610289600435612477565b34801561092057600080fd5b50610289600160a060020a03600435166127df565b34801561094157600080fd5b50610289600435612802565b34801561095957600080fd5b50610289600160a060020a036004358116906024351661287e565b34801561098057600080fd5b5061036d6004356128c4565b600054600160a060020a03163314806109af5750600154600160a060020a031633145b15156109f3576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b578160025480821115610a14576006849055610a64565b6040805160e560020a62461bcd02815260206004820152600a60248201527f4e6f742062696767657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610abb565b6040805160e560020a62461bcd02815260206004820152600c60248201527f4e6f7420696e2072616e67650000000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b600e5481565b600054600160a060020a03163314610adc57600080fd5b600c805474ff000000000000000000000000000000000000000019811660a060020a9182900460ff1615909102179055565b600154600160a060020a031681565b600081600f5481101515610b69576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b600083815260106020526040902060090154421015610b8b5760029150610d66565b6000838152601060205260409020600a015442108015610bba5750600083815260106020526040812060080154115b15610bc85760009150610d66565b6000838152601060205260409020600a01544210801590610bf85750600083815260106020526040812060080154115b8015610c14575060008381526010602052604090206002015442105b15610c225760019150610d66565b600083815260106020526040902060080154158015610c455750610c45836111f1565b8015610c61575060008381526010602052604090206002015442105b15610c6f5760039150610d66565b600083815260106020526040902060080154158015610c945750610c92836111f1565b155b15610ca25760059150610d66565b6000838152601060205260409020600201544210801590610cc95750610cc7836111f1565b155b15610cfa576000838152601060205260409020600d015460ff1615610cf15760059150610d66565b60049150610d66565b6000838152601060205260409020600d015460ff1680610d295750600083815260106020526040902060080154155b8015610d535750600083815260106020526040902060068101546008820154600b90920154909101145b15610d615760059150610d66565b600491505b50919050565b600c5460009060a060020a900460ff161580610e275750600c54600d54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050506040513d6020811015610e2357600080fd5b5051115b90505b919050565b600d5481565b60075481565b600054600160a060020a0316331480610e5e5750600154600160a060020a031633145b1515610ea2576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600a91909155600b55565b600054600160a060020a03163314610ec457600080fd5b60005460a060020a900460ff161515610edc57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60008060008060008086600f5481101515610f76576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600094855250506010602052505060409020600781015460088201546009830154600a840154600b850154600d9095015467ffffffffffffffff9094169592949193909261010090910460ff1690565b60025481565b601160205281600052604060002081815481101515610fea57fe5b90600052602060002001600091509150505481565b60005460a060020a900460ff1681565b600c5460a060020a900460ff1681565b600090815260136020526040902080546001820154600283015460038401546004909401549294600160a060020a039092169390929091565b60008060008060008086600f54811015156110ab576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b50505060009485525050601060205250506040902080546001820154600283015460038401546004850154600690950154600160a060020a039485169694909316949193909290565b3360009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561114b57602002820191906000526020600020905b815481526020019060010190808311611137575b5050505050905090565b600054600160a060020a03163314806111785750600154600160a060020a031633145b15156111bc576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60125490565b6000908152601060205260409020600701544267ffffffffffffffff9091161190565b600054600160a060020a0316331461122b57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085481565b600054600160a060020a0316331461129d57600080fd5b60005460a060020a900460ff16156112b457600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b60008061130d83611ca7565b156113b257506000828152601360208181526040808420600381018054908690558154865260108452918520549487905292909152600190910154909161136191600160a060020a0391821691168361296a565b600083815260136020908152604080832054835260109091529020600b015461138a9082612abc565b600084815260136020908152604080832054835260109091529020600b015560019150610d66565b50600092915050565b600f5481565b600054600160a060020a031681565b3360009081526014602090815260409182902080548351818402810184019094528084526060939283018282801561114b5760200282019190600052602060002090815481526020019060010190808311611137575050505050905090565b600c54600160a060020a031681565b600054600160a060020a0316331461145557600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610abb573d6000803e3d6000fd5b600081600f54811015156114d7576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b60008381526010602052604090206002015442108015906115075750600083815260106020526040812060080154115b801561152557506000838152601060205260409020600d015460ff16155b9392505050565b600054600160a060020a031633148061154f5750600154600160a060020a031633145b1515611593576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576006548280821115610a14576002849055610a64565b600b5481565b600054600160a060020a031633146115d157600080fd5b6004805460ff19811660ff90911615179055565b60035481565b601060209081526000918252604091829020825160e081810185528254600160a060020a039081168352600184015481168386015260028401548387015260038401546060808501919091526004850154608080860191909152600586015490921660a080860191909152600686015460c08087019190915288516101008181018b52600789015467ffffffffffffffff168252600889015499820199909952600988015499810199909952600a87015492890192909252600b86015492880192909252600c85015491870191909152600d9093015460ff808216151594870194909452939093049091161515918301919091529082565b60045460ff1681565b600054600160a060020a031633148061170f5750600154600160a060020a031633145b1515611753576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600791909155600855565b600054600160a060020a03163314806117815750600154600160a060020a031633145b15156117c5576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314806118175750600154600160a060020a031633145b151561185b576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600955565b6000805481908190819060a060020a900460ff161561187e57600080fd5b600086815260106020526040902060090154428111156118e8576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f548710611941576040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2069642c20496e766573744552433230206661696c00604482015290519081900360640190fd5b600087815260106020526040902060050154600160a060020a031615156119b2576040805160e560020a62461bcd02815260206004820152601d60248201527f506f6f6c20697320666f72204554482c2075736520496e766574455448000000604482015290519081900360640190fd5b6127108611611a0b576040805160e560020a62461bcd02815260206004820152601b60248201527f4e65656420696e76657374206d6f7265207468656e2031303030300000000000604482015290519081900360640190fd5b3332148015611a205750611a1e33612acf565b155b1515611a9c576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600087815260106020526040902060050154611ac290600160a060020a03163388612add565b611acd338789612d44565b9450611ada878733612e4c565b9350611ae7878686612f8c565b611b04611afc87611af78a613005565b613050565b612710613079565b9250611b10868461308e565b6000888152601060209081526040808320600590810154600160a060020a03168452909152902054909250611b459084612abc565b600088815260106020818152604080842060058181018054600160a060020a03908116885291855292862096909655938c905291905254600190910154611b919291821691168461296a565b611b9b87856130a0565b50505050505050565b60095481565b60065481565b600a5481565b600054600160a060020a0316331480611bd95750600154600160a060020a031633145b1515611c1d576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600d55565b600080600083600f5481101515611c71576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600091825250601060205260409020600d810154600c82015460059092015460ff90911692600160a060020a0390911690565b60006012548211158015611cca5750600082815260136020526040812060030154115b8015610e27575050600090815260136020908152604080832054835260109091529020600701544267ffffffffffffffff909116111590565b6000805460a060020a900460ff1615611d1b57600080fd5b600954341015611d75576040805160e560020a62461bcd02815260206004820152601860248201527f4e65656420746f2070617920666f722074686520706f6f6c0000000000000000604482015290519081900360640190fd5b611d7e8b610d6c565b1515611dd4576040805160e560020a62461bcd02815260206004820152601660248201527f4e6565642056616c696420455243323020546f6b656e00000000000000000000604482015290519081900360640190fd5b600160a060020a0385161580611dee5750611dee8561237e565b1515611e44576040805160e560020a62461bcd02815260206004820152601560248201527f4d61696e20636f696e206e6f7420696e206c6973740000000000000000000000604482015290519081900360640190fd5b611e5060085442612abc565b8a10611ea6576040805160e560020a62461bcd02815260206004820181905260248201527f506f6f6c206475726174696f6e2063616e27742062652074686174206c6f6e67604482015290519081900360640190fd5b611eb260085442612abc565b67ffffffffffffffff871610611f12576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6f636b65642076616c75652063616e27742062652074686174206c6f6e6700604482015290519081900360640190fd5b87891115611f90576040805160e560020a62461bcd02815260206004820152603360248201527f504f5a20686f6c64657273206e65656420746f2068617665206265747465722060448201527f707269636520286f72207468652073616d652900000000000000000000000000606482015290519081900360840190fd5b60008811611fe8576040805160e560020a62461bcd02815260206004820152601060248201527f49742077696c6c206e6f7420776f726b00000000000000000000000000000000604482015290519081900360640190fd5b42831015611ff4574292505b8961200142600754612abc565b1115612057576040805160e560020a62461bcd02815260206004820152601a60248201527f4e656564206d6f7265207468656e204d696e4475726174696f6e000000000000604482015290519081900360640190fd5b6120628b3389612add565b811561208e57612089612083611afc61207b8d8761308e565b600354613050565b84612abc565b612090565b825b9050604080519081016040528060e0604051908101604052808e600160a060020a0316815260200133600160a060020a031681526020018d81526020018c81526020018b815260200188600160a060020a031681526020018a8152508152602001610100604051908101604052808967ffffffffffffffff1681526020018a81526020018681526020018481526020016000815260200185815260200160001515815260200187151581525081525060106000600f54815260200190815260200160002060008201518160000160008201518160000160006101000a815481600160a060020a030219169083600160a060020a0316021790555060208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160060155505060208201518160070160008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff02191690831515021790555050509050506011600033600160a060020a0316600160a060020a03168152602001908152602001600020600f5490806001815401808255809150509060018203906000526020600020016000909192909190915055507fbe4222bc407cb12031595fc55b46531e46308d31e4572c9c4360d8ae790e1a318b600f546040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a161236e600f546001612abc565b600f555050505050505050505050565b600c5460009060a060020a900460ff161580610e275750600c54600e54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b600054600160a060020a031633148061242e5750600154600160a060020a031633145b1515612472576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600e55565b60008060003433600a548083101515156124db576040805160e560020a62461bcd02815260206004820152601260248201527f53656e642045544820746f20696e766573740000000000000000000000000000604482015290519081900360640190fd5b60408051848152600160a060020a038416602082015281517f3a32cdd14cdfd431946dfa0b2aef5ace661340411aaadcaee6aef6738d302326929181900390910190a160005460a060020a900460ff161561253557600080fd5b6000878152601060205260409020600901544281111561259f576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f5488106125f8576040805160e560020a62461bcd02815260206004820152601d60248201527f57726f6e6720706f6f6c2069642c20496e76657374455448206661696c000000604482015290519081900360640190fd5b600088815260106020526040902060050154600160a060020a031615612668576040805160e560020a62461bcd02815260206004820152601360248201527f506f6f6c206973206e6f7420666f722045544800000000000000000000000000604482015290519081900360640190fd5b600a54341015801561267c5750600b543411155b15156126d2576040805160e560020a62461bcd02815260206004820152601b60248201527f496e766573746d656e7420616d6f756e74206e6f742076616c69640000000000604482015290519081900360640190fd5b33321480156126e757506126e533612acf565b155b1515612763576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61276e33348a612d44565b965061277b883433612e4c565b9550612788888888612f8c565b6127a3611afc34611af761271061279e8d613005565b61308e565b6000898152601060205260409020600101549095506127cb90600160a060020a0316866131ae565b6127d588876130a0565b5050505050505050565b600054600160a060020a031633146127f657600080fd5b6127ff81613295565b50565b600054600160a060020a03163314806128255750600154600160a060020a031633145b1515612869576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576003829055610abb565b60008054600160a060020a0316331461289657600080fd5b50600160a060020a038216600090815260056020526040812080549190556128bf83838361296a565b505050565b600081600f5481101515612910576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b6129198361148b565b156113b2576000838152601060205260409020600d8101805460ff1916600190811790915581549082015460089092015461296192600160a060020a0392831692169061296a565b60019150610d66565b60006129768430613312565b60408051848152600160a060020a03808716602083015287168183015290519192507fe4d818e6f992efbd60db553f3edce819a199baec79a784b95c89bc8ee86f2584919081900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015612a2657600080fd5b505af1158015612a3a573d6000803e3d6000fd5b505050506040513d6020811015612a5057600080fd5b50819050612a616120838630613312565b14612ab6576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b50505050565b81810182811015612ac957fe5b92915050565b6000903b63ffffffff161190565b60008383838083600160a060020a031663dd62ed3e84306040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050506040513d6020811015612b8257600080fd5b50511015612bda576040805160e560020a62461bcd02815260206004820152600c60248201527f6e6f20616c6c6f77616e63650000000000000000000000000000000000000000604482015290519081900360640190fd5b60008511612be757600080fd5b612bf18730613312565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152306024830152604482018990529151929650908916916323b872dd916064808201926020929091908290030181600087803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b505050506040513d6020811015612c9057600080fd5b505060408051868152600160a060020a03808916602083015289168183015290517f1fecf4702e692891a7c2f0d328779b085efb5edd094fa5558bd5cd147a1679229181900360600190a1612ce58730613312565b612cef8587612abc565b14611b9b576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b6040805160a081018252828152600160a060020a0385811660208084018281528486018881526000606087018181524260808901908152601280548452601387528a842099518a5594516001808b01805473ffffffffffffffffffffffffffffffffffffffff191692909a169190911790985592516002890155516003880155905160049096019590955533855260148252858520815481549586018255908652828620909401939093559154845190815291820152825191927ff4d99203a75a5961a6c1decf46e41b27f411990cda8e317361361339f8dffa5592918290030190a1612e346012546001612abc565b6012819055612e4490600161308e565b949350505050565b6000828180612e5a87610b1d565b6005811115612e6557fe5b1415612eaa576000868152601060205260409020600c0154612e89908590876133a2565b50600086815260106020526040902060040154612ea7908390613050565b90505b6001612eb587610b1d565b6005811115612ec057fe5b1415612ee657600086815260106020526040902060030154612ee3908390613050565b90505b683635c9adc5dea000008110612f33576000868152601060205260409020600d0154610100900460ff1615612f2b57612f2881683635c9adc5dea00000613079565b90505b809250612f83565b6040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2073746174757320746f2043616c63546f6b656e7300604482015290519081900360640190fd5b50509392505050565b612f95836111f1565b15612fcd57600082815260136020526040902060030154612fb69082612abc565b6000838152601360205260409020600301556128bf565b6000838152601060209081526040808320548584526013909252909120600101546128bf91600160a060020a0390811691168361296a565b60008061301183610b1d565b600581111561301c57fe5b141561302b5750600254610e2a565b600161303683610b1d565b600581111561304157fe5b1415610e2a5750600654610e2a565b600082151561306157506000612ac9565b5081810281838281151561307157fe5b0414612ac957fe5b6000818381151561308657fe5b049392505050565b60008282111561309a57fe5b50900390565b600082815260106020526040902060080154811115613109576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320696e2074686520706f6f6c000000604482015290519081900360640190fd5b600082815260106020526040902060080154613125908261308e565b60008381526010602052604090206008018190551515613177576040805183815290517f5aa793a17b0774b891ce2b0dd5dbe8f04132e547df384ab1053d32470050b5fa9181900360200190a1610abb565b6040805183815290517f46074c56f8b8129e3ada6879521255be1596856f97bf16070e5cdd3a10dc1df79181900360200190a15050565b60408051828152600160a060020a038416602082015281516000927feca5ae7bd9109b0f7d228f3f8a8cc834a1f995af62df6dc226dc3ab3f38dc7b3928290030190a150604051600160a060020a03831680319183156108fc029084906000818181858888f1935050505015801561322a573d6000803e3d6000fd5b5082600160a060020a0316316132408284612abc565b146128bf576040805160e560020a62461bcd02815260206004820152601d60248201527f546865207472616e7366657220646964206e6f7420636f6d706c697465000000604482015290519081900360640190fd5b600160a060020a03811615156132aa57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082600160a060020a03166370a08231836040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561336f57600080fd5b505af1158015613383573d6000803e3d6000fd5b505050506040513d602081101561339957600080fd5b50519392505050565b60008215156133b357506001611525565b600c54604080517f1d759fb2000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152602482018790526044820186905291519190921691631d759fb291606480830192600092919082900301818387803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b506001979650505050505050560057726f6e6720706f6f6c2069642c2043616e2774206765742053746174757300417574686f72697a6174696f6e204572726f7200000000000000000000000000a165627a7a72305820a38e630d35e39ce1f13118d060493c5985a42fd9d31bfed654ce936c05096b020029
Deployed Bytecode
0x6080604052600436106102785763ffffffff60e060020a600035041662172ddf811461028b578063043d520b146102a357806307b027ed146102ca5780630cd8e965146102df5780630d08caa014610310578063114fa9bd1461034c57806318c9be4a1461038157806327ca36ec146103965780633e90eea7146103ab5780633f4ba83a146103c657806341004025146103db57806353eb31671461043357806356793bc7146104485780635c975abb1461046c5780635cdddc7c1461048157806360f9e80a1461049657806360fdd7c4146104e157806363552a4914610538578063668189671461059d5780636b1fe0b6146105be5780636b58f2f6146105d3578063715018a6146105eb57806375c64dd1146106005780638456cb591461061557806387e3c5991461062a5780638c788de0146106425780638da5cb5b1461065757806391314dde1461066c5780639642ec0c14610681578063991e979a14610696578063a73ff128146106b7578063a87d2be4146106cf578063aa825486146106e7578063aac5da5c146106fc578063abb7add214610711578063ac4afa3814610726578063b5f98b8e14610757578063b7d9b6f11461076c578063b973d7bc14610787578063b977eddf146107a8578063be33a3ec146107c0578063bed06041146107db578063bef7a2f0146107f0578063cab1704614610805578063ccb801bf1461081a578063d0f5291014610832578063e34c777214610873578063e4ec0f681461088b578063e8906716146108d0578063ee63e8bd146108f1578063f04be48b14610909578063f2fde38b14610914578063f318824814610935578063fc1a86ff1461094d578063fd711a5514610974575b60045460ff16151561028957600080fd5b005b34801561029757600080fd5b5061028960043561098c565b3480156102af57600080fd5b506102b8610abf565b60408051918252519081900360200190f35b3480156102d657600080fd5b50610289610ac5565b3480156102eb57600080fd5b506102f4610b0e565b60408051600160a060020a039092168252519081900360200190f35b34801561031c57600080fd5b50610328600435610b1d565b6040518082600581111561033857fe5b60ff16815260200191505060405180910390f35b34801561035857600080fd5b5061036d600160a060020a0360043516610d6c565b604080519115158252519081900360200190f35b34801561038d57600080fd5b506102b8610e2f565b3480156103a257600080fd5b506102b8610e35565b3480156103b757600080fd5b50610289600435602435610e3b565b3480156103d257600080fd5b50610289610ead565b3480156103e757600080fd5b506103f3600435610f23565b6040805167ffffffffffffffff909716875260208701959095528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b34801561043f57600080fd5b506102b8610fc9565b34801561045457600080fd5b506102b8600160a060020a0360043516602435610fcf565b34801561047857600080fd5b5061036d610fff565b34801561048d57600080fd5b5061036d61100f565b3480156104a257600080fd5b506104ae60043561101f565b60408051958652600160a060020a0390941660208601528484019290925260608401526080830152519081900360a00190f35b3480156104ed57600080fd5b506104f9600435611058565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561054457600080fd5b5061054d6110f4565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610589578181015183820152602001610571565b505050509050019250505060405180910390f35b3480156105a957600080fd5b50610289600160a060020a0360043516611155565b3480156105ca57600080fd5b506102b86111eb565b3480156105df57600080fd5b5061036d6004356111f1565b3480156105f757600080fd5b50610289611214565b34801561060c57600080fd5b506102b8611280565b34801561062157600080fd5b50610289611286565b34801561063657600080fd5b5061036d600435611301565b34801561064e57600080fd5b506102b86113bb565b34801561066357600080fd5b506102f46113c1565b34801561067857600080fd5b5061054d6113d0565b34801561068d57600080fd5b506102f461142f565b3480156106a257600080fd5b50610289600160a060020a036004351661143e565b3480156106c357600080fd5b5061036d60043561148b565b3480156106db57600080fd5b5061028960043561152c565b3480156106f357600080fd5b506102b86115b4565b34801561070857600080fd5b506102896115ba565b34801561071d57600080fd5b506102b86115e5565b34801561073257600080fd5b5061073e6004356115eb565b6040805192835260208301919091528051918290030190f35b34801561076357600080fd5b5061036d6116e3565b34801561077857600080fd5b506102896004356024356116ec565b34801561079357600080fd5b50610289600160a060020a036004351661175e565b3480156107b457600080fd5b506102896004356117f4565b3480156107cc57600080fd5b50610289600435602435611860565b3480156107e757600080fd5b506102b8611ba4565b3480156107fc57600080fd5b506102b8611baa565b34801561081157600080fd5b506102b8611bb0565b34801561082657600080fd5b50610289600435611bb6565b34801561083e57600080fd5b5061084a600435611c22565b6040805193151584526020840192909252600160a060020a031682820152519081900360600190f35b34801561087f57600080fd5b5061036d600435611ca7565b610289600160a060020a036004358116906024359060443590606435906084359067ffffffffffffffff60a435169060c4351660e43515156101043561012435611d03565b3480156108dc57600080fd5b5061036d600160a060020a036004351661237e565b3480156108fd57600080fd5b5061028960043561240b565b610289600435612477565b34801561092057600080fd5b50610289600160a060020a03600435166127df565b34801561094157600080fd5b50610289600435612802565b34801561095957600080fd5b50610289600160a060020a036004358116906024351661287e565b34801561098057600080fd5b5061036d6004356128c4565b600054600160a060020a03163314806109af5750600154600160a060020a031633145b15156109f3576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b578160025480821115610a14576006849055610a64565b6040805160e560020a62461bcd02815260206004820152600a60248201527f4e6f742062696767657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610abb565b6040805160e560020a62461bcd02815260206004820152600c60248201527f4e6f7420696e2072616e67650000000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b600e5481565b600054600160a060020a03163314610adc57600080fd5b600c805474ff000000000000000000000000000000000000000019811660a060020a9182900460ff1615909102179055565b600154600160a060020a031681565b600081600f5481101515610b69576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b600083815260106020526040902060090154421015610b8b5760029150610d66565b6000838152601060205260409020600a015442108015610bba5750600083815260106020526040812060080154115b15610bc85760009150610d66565b6000838152601060205260409020600a01544210801590610bf85750600083815260106020526040812060080154115b8015610c14575060008381526010602052604090206002015442105b15610c225760019150610d66565b600083815260106020526040902060080154158015610c455750610c45836111f1565b8015610c61575060008381526010602052604090206002015442105b15610c6f5760039150610d66565b600083815260106020526040902060080154158015610c945750610c92836111f1565b155b15610ca25760059150610d66565b6000838152601060205260409020600201544210801590610cc95750610cc7836111f1565b155b15610cfa576000838152601060205260409020600d015460ff1615610cf15760059150610d66565b60049150610d66565b6000838152601060205260409020600d015460ff1680610d295750600083815260106020526040902060080154155b8015610d535750600083815260106020526040902060068101546008820154600b90920154909101145b15610d615760059150610d66565b600491505b50919050565b600c5460009060a060020a900460ff161580610e275750600c54600d54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050506040513d6020811015610e2357600080fd5b5051115b90505b919050565b600d5481565b60075481565b600054600160a060020a0316331480610e5e5750600154600160a060020a031633145b1515610ea2576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600a91909155600b55565b600054600160a060020a03163314610ec457600080fd5b60005460a060020a900460ff161515610edc57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60008060008060008086600f5481101515610f76576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600094855250506010602052505060409020600781015460088201546009830154600a840154600b850154600d9095015467ffffffffffffffff9094169592949193909261010090910460ff1690565b60025481565b601160205281600052604060002081815481101515610fea57fe5b90600052602060002001600091509150505481565b60005460a060020a900460ff1681565b600c5460a060020a900460ff1681565b600090815260136020526040902080546001820154600283015460038401546004909401549294600160a060020a039092169390929091565b60008060008060008086600f54811015156110ab576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b50505060009485525050601060205250506040902080546001820154600283015460038401546004850154600690950154600160a060020a039485169694909316949193909290565b3360009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561114b57602002820191906000526020600020905b815481526020019060010190808311611137575b5050505050905090565b600054600160a060020a03163314806111785750600154600160a060020a031633145b15156111bc576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60125490565b6000908152601060205260409020600701544267ffffffffffffffff9091161190565b600054600160a060020a0316331461122b57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085481565b600054600160a060020a0316331461129d57600080fd5b60005460a060020a900460ff16156112b457600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b60008061130d83611ca7565b156113b257506000828152601360208181526040808420600381018054908690558154865260108452918520549487905292909152600190910154909161136191600160a060020a0391821691168361296a565b600083815260136020908152604080832054835260109091529020600b015461138a9082612abc565b600084815260136020908152604080832054835260109091529020600b015560019150610d66565b50600092915050565b600f5481565b600054600160a060020a031681565b3360009081526014602090815260409182902080548351818402810184019094528084526060939283018282801561114b5760200282019190600052602060002090815481526020019060010190808311611137575050505050905090565b600c54600160a060020a031681565b600054600160a060020a0316331461145557600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610abb573d6000803e3d6000fd5b600081600f54811015156114d7576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b60008381526010602052604090206002015442108015906115075750600083815260106020526040812060080154115b801561152557506000838152601060205260409020600d015460ff16155b9392505050565b600054600160a060020a031633148061154f5750600154600160a060020a031633145b1515611593576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576006548280821115610a14576002849055610a64565b600b5481565b600054600160a060020a031633146115d157600080fd5b6004805460ff19811660ff90911615179055565b60035481565b601060209081526000918252604091829020825160e081810185528254600160a060020a039081168352600184015481168386015260028401548387015260038401546060808501919091526004850154608080860191909152600586015490921660a080860191909152600686015460c08087019190915288516101008181018b52600789015467ffffffffffffffff168252600889015499820199909952600988015499810199909952600a87015492890192909252600b86015492880192909252600c85015491870191909152600d9093015460ff808216151594870194909452939093049091161515918301919091529082565b60045460ff1681565b600054600160a060020a031633148061170f5750600154600160a060020a031633145b1515611753576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600791909155600855565b600054600160a060020a03163314806117815750600154600160a060020a031633145b15156117c5576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314806118175750600154600160a060020a031633145b151561185b576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600955565b6000805481908190819060a060020a900460ff161561187e57600080fd5b600086815260106020526040902060090154428111156118e8576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f548710611941576040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2069642c20496e766573744552433230206661696c00604482015290519081900360640190fd5b600087815260106020526040902060050154600160a060020a031615156119b2576040805160e560020a62461bcd02815260206004820152601d60248201527f506f6f6c20697320666f72204554482c2075736520496e766574455448000000604482015290519081900360640190fd5b6127108611611a0b576040805160e560020a62461bcd02815260206004820152601b60248201527f4e65656420696e76657374206d6f7265207468656e2031303030300000000000604482015290519081900360640190fd5b3332148015611a205750611a1e33612acf565b155b1515611a9c576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600087815260106020526040902060050154611ac290600160a060020a03163388612add565b611acd338789612d44565b9450611ada878733612e4c565b9350611ae7878686612f8c565b611b04611afc87611af78a613005565b613050565b612710613079565b9250611b10868461308e565b6000888152601060209081526040808320600590810154600160a060020a03168452909152902054909250611b459084612abc565b600088815260106020818152604080842060058181018054600160a060020a03908116885291855292862096909655938c905291905254600190910154611b919291821691168461296a565b611b9b87856130a0565b50505050505050565b60095481565b60065481565b600a5481565b600054600160a060020a0316331480611bd95750600154600160a060020a031633145b1515611c1d576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600d55565b600080600083600f5481101515611c71576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600091825250601060205260409020600d810154600c82015460059092015460ff90911692600160a060020a0390911690565b60006012548211158015611cca5750600082815260136020526040812060030154115b8015610e27575050600090815260136020908152604080832054835260109091529020600701544267ffffffffffffffff909116111590565b6000805460a060020a900460ff1615611d1b57600080fd5b600954341015611d75576040805160e560020a62461bcd02815260206004820152601860248201527f4e65656420746f2070617920666f722074686520706f6f6c0000000000000000604482015290519081900360640190fd5b611d7e8b610d6c565b1515611dd4576040805160e560020a62461bcd02815260206004820152601660248201527f4e6565642056616c696420455243323020546f6b656e00000000000000000000604482015290519081900360640190fd5b600160a060020a0385161580611dee5750611dee8561237e565b1515611e44576040805160e560020a62461bcd02815260206004820152601560248201527f4d61696e20636f696e206e6f7420696e206c6973740000000000000000000000604482015290519081900360640190fd5b611e5060085442612abc565b8a10611ea6576040805160e560020a62461bcd02815260206004820181905260248201527f506f6f6c206475726174696f6e2063616e27742062652074686174206c6f6e67604482015290519081900360640190fd5b611eb260085442612abc565b67ffffffffffffffff871610611f12576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6f636b65642076616c75652063616e27742062652074686174206c6f6e6700604482015290519081900360640190fd5b87891115611f90576040805160e560020a62461bcd02815260206004820152603360248201527f504f5a20686f6c64657273206e65656420746f2068617665206265747465722060448201527f707269636520286f72207468652073616d652900000000000000000000000000606482015290519081900360840190fd5b60008811611fe8576040805160e560020a62461bcd02815260206004820152601060248201527f49742077696c6c206e6f7420776f726b00000000000000000000000000000000604482015290519081900360640190fd5b42831015611ff4574292505b8961200142600754612abc565b1115612057576040805160e560020a62461bcd02815260206004820152601a60248201527f4e656564206d6f7265207468656e204d696e4475726174696f6e000000000000604482015290519081900360640190fd5b6120628b3389612add565b811561208e57612089612083611afc61207b8d8761308e565b600354613050565b84612abc565b612090565b825b9050604080519081016040528060e0604051908101604052808e600160a060020a0316815260200133600160a060020a031681526020018d81526020018c81526020018b815260200188600160a060020a031681526020018a8152508152602001610100604051908101604052808967ffffffffffffffff1681526020018a81526020018681526020018481526020016000815260200185815260200160001515815260200187151581525081525060106000600f54815260200190815260200160002060008201518160000160008201518160000160006101000a815481600160a060020a030219169083600160a060020a0316021790555060208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160060155505060208201518160070160008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff02191690831515021790555050509050506011600033600160a060020a0316600160a060020a03168152602001908152602001600020600f5490806001815401808255809150509060018203906000526020600020016000909192909190915055507fbe4222bc407cb12031595fc55b46531e46308d31e4572c9c4360d8ae790e1a318b600f546040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a161236e600f546001612abc565b600f555050505050505050505050565b600c5460009060a060020a900460ff161580610e275750600c54600e54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b600054600160a060020a031633148061242e5750600154600160a060020a031633145b1515612472576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600e55565b60008060003433600a548083101515156124db576040805160e560020a62461bcd02815260206004820152601260248201527f53656e642045544820746f20696e766573740000000000000000000000000000604482015290519081900360640190fd5b60408051848152600160a060020a038416602082015281517f3a32cdd14cdfd431946dfa0b2aef5ace661340411aaadcaee6aef6738d302326929181900390910190a160005460a060020a900460ff161561253557600080fd5b6000878152601060205260409020600901544281111561259f576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f5488106125f8576040805160e560020a62461bcd02815260206004820152601d60248201527f57726f6e6720706f6f6c2069642c20496e76657374455448206661696c000000604482015290519081900360640190fd5b600088815260106020526040902060050154600160a060020a031615612668576040805160e560020a62461bcd02815260206004820152601360248201527f506f6f6c206973206e6f7420666f722045544800000000000000000000000000604482015290519081900360640190fd5b600a54341015801561267c5750600b543411155b15156126d2576040805160e560020a62461bcd02815260206004820152601b60248201527f496e766573746d656e7420616d6f756e74206e6f742076616c69640000000000604482015290519081900360640190fd5b33321480156126e757506126e533612acf565b155b1515612763576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61276e33348a612d44565b965061277b883433612e4c565b9550612788888888612f8c565b6127a3611afc34611af761271061279e8d613005565b61308e565b6000898152601060205260409020600101549095506127cb90600160a060020a0316866131ae565b6127d588876130a0565b5050505050505050565b600054600160a060020a031633146127f657600080fd5b6127ff81613295565b50565b600054600160a060020a03163314806128255750600154600160a060020a031633145b1515612869576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576003829055610abb565b60008054600160a060020a0316331461289657600080fd5b50600160a060020a038216600090815260056020526040812080549190556128bf83838361296a565b505050565b600081600f5481101515612910576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b6129198361148b565b156113b2576000838152601060205260409020600d8101805460ff1916600190811790915581549082015460089092015461296192600160a060020a0392831692169061296a565b60019150610d66565b60006129768430613312565b60408051848152600160a060020a03808716602083015287168183015290519192507fe4d818e6f992efbd60db553f3edce819a199baec79a784b95c89bc8ee86f2584919081900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015612a2657600080fd5b505af1158015612a3a573d6000803e3d6000fd5b505050506040513d6020811015612a5057600080fd5b50819050612a616120838630613312565b14612ab6576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b50505050565b81810182811015612ac957fe5b92915050565b6000903b63ffffffff161190565b60008383838083600160a060020a031663dd62ed3e84306040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050506040513d6020811015612b8257600080fd5b50511015612bda576040805160e560020a62461bcd02815260206004820152600c60248201527f6e6f20616c6c6f77616e63650000000000000000000000000000000000000000604482015290519081900360640190fd5b60008511612be757600080fd5b612bf18730613312565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152306024830152604482018990529151929650908916916323b872dd916064808201926020929091908290030181600087803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b505050506040513d6020811015612c9057600080fd5b505060408051868152600160a060020a03808916602083015289168183015290517f1fecf4702e692891a7c2f0d328779b085efb5edd094fa5558bd5cd147a1679229181900360600190a1612ce58730613312565b612cef8587612abc565b14611b9b576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b6040805160a081018252828152600160a060020a0385811660208084018281528486018881526000606087018181524260808901908152601280548452601387528a842099518a5594516001808b01805473ffffffffffffffffffffffffffffffffffffffff191692909a169190911790985592516002890155516003880155905160049096019590955533855260148252858520815481549586018255908652828620909401939093559154845190815291820152825191927ff4d99203a75a5961a6c1decf46e41b27f411990cda8e317361361339f8dffa5592918290030190a1612e346012546001612abc565b6012819055612e4490600161308e565b949350505050565b6000828180612e5a87610b1d565b6005811115612e6557fe5b1415612eaa576000868152601060205260409020600c0154612e89908590876133a2565b50600086815260106020526040902060040154612ea7908390613050565b90505b6001612eb587610b1d565b6005811115612ec057fe5b1415612ee657600086815260106020526040902060030154612ee3908390613050565b90505b683635c9adc5dea000008110612f33576000868152601060205260409020600d0154610100900460ff1615612f2b57612f2881683635c9adc5dea00000613079565b90505b809250612f83565b6040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2073746174757320746f2043616c63546f6b656e7300604482015290519081900360640190fd5b50509392505050565b612f95836111f1565b15612fcd57600082815260136020526040902060030154612fb69082612abc565b6000838152601360205260409020600301556128bf565b6000838152601060209081526040808320548584526013909252909120600101546128bf91600160a060020a0390811691168361296a565b60008061301183610b1d565b600581111561301c57fe5b141561302b5750600254610e2a565b600161303683610b1d565b600581111561304157fe5b1415610e2a5750600654610e2a565b600082151561306157506000612ac9565b5081810281838281151561307157fe5b0414612ac957fe5b6000818381151561308657fe5b049392505050565b60008282111561309a57fe5b50900390565b600082815260106020526040902060080154811115613109576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320696e2074686520706f6f6c000000604482015290519081900360640190fd5b600082815260106020526040902060080154613125908261308e565b60008381526010602052604090206008018190551515613177576040805183815290517f5aa793a17b0774b891ce2b0dd5dbe8f04132e547df384ab1053d32470050b5fa9181900360200190a1610abb565b6040805183815290517f46074c56f8b8129e3ada6879521255be1596856f97bf16070e5cdd3a10dc1df79181900360200190a15050565b60408051828152600160a060020a038416602082015281516000927feca5ae7bd9109b0f7d228f3f8a8cc834a1f995af62df6dc226dc3ab3f38dc7b3928290030190a150604051600160a060020a03831680319183156108fc029084906000818181858888f1935050505015801561322a573d6000803e3d6000fd5b5082600160a060020a0316316132408284612abc565b146128bf576040805160e560020a62461bcd02815260206004820152601d60248201527f546865207472616e7366657220646964206e6f7420636f6d706c697465000000604482015290519081900360640190fd5b600160a060020a03811615156132aa57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082600160a060020a03166370a08231836040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561336f57600080fd5b505af1158015613383573d6000803e3d6000fd5b505050506040513d602081101561339957600080fd5b50519392505050565b60008215156133b357506001611525565b600c54604080517f1d759fb2000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152602482018790526044820186905291519190921691631d759fb291606480830192600092919082900301818387803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b506001979650505050505050560057726f6e6720706f6f6c2069642c2043616e2774206765742053746174757300417574686f72697a6174696f6e204572726f7200000000000000000000000000a165627a7a72305820a38e630d35e39ce1f13118d060493c5985a42fd9d31bfed654ce936c05096b020029
Deployed Bytecode Sourcemap
30811:463:0:-;;;;;;;;;-1:-1:-1;;;30811:463:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8668:8;;;;8667:9;8663:23;;;8678:8;;;8663:23;30811:463;12128:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12128:170:0;;;;;10643:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10643:28:0;;;;;;;;;;;;;;;;;;;;10706:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10706:97:0;;;;5046:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5046:31:0;;;;;;;;-1:-1:-1;;;;;5046:31:0;;;;;;;;;;;;;;20108:1876;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20108:1876:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11069:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11069:182:0;-1:-1:-1;;;;;11069:182:0;;;;;;;;;;;;;;;;;;;;;;;10605:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10605:31:0;;;;10217:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10217:26:0;;;;11596:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11596:205:0;;;;;;;4866:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4866:95:0;;;;18206:567;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18206:567:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7623:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7623:21:0;;;;12905:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12905:45:0;-1:-1:-1;;;;;12905:45:0;;;;;;;4245:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4245:26:0;;;;10571:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10571:27:0;;;;30318:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30318:449:0;;;;;;;;;;;;-1:-1:-1;;;;;30318:449:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17652:546;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17652:546:0;;;;;;;;;-1:-1:-1;;;;;17652:546:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:102;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17542:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17542:102:0;;;;;;;;;;;;;;;;;5236:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5236:116:0;-1:-1:-1;;;;;5236:116:0;;;;;22936:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22936:98:0;;;;14285:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14285:123:0;;;;;3348:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3348:114:0;;;;10295:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10295:26:0;;;;4686:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4686:93:0;;;;29483:645;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29483:645:0;;;;;12771:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12771:25:0;;;;2553:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2553:20:0;;;;30198:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30198:112:0;;;;10490:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10490:32:0;;;;30887:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30887:178:0;-1:-1:-1;;;;;30887:178:0;;;;;19150:325;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19150:325:0;;;;;12306:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12306:173:0;;;;;10456:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10456:27:0;;;;8845:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8845:82:0;;;;7693:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7693:23:0;;;;12826:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12826:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8815:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8815:20:0;;;;11809:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11809:198:0;;;;;;;11451:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11451:137:0;-1:-1:-1;;;;;11451:137:0;;;;;12015:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12015:105:0;;;;;24318:1487;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24318:1487:0;;;;;;;10391:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10391:24:0;;;;10169:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10169:18:0;;;;10422:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10422:27:0;;;;10811:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10811:124:0;;;;;18781:361;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18781:361:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18781:361:0;;;;;;;;;;;;;;29222:253;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29222:253:0;;;;;14441:2791;;-1:-1:-1;;;;;14441:2791:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11259:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11259:180:0;-1:-1:-1;;;;;11259:180:0;;;;;10943:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10943:118:0;;;;;23070:1240;;;;;;3630:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3630:105:0;-1:-1:-1;;;;;3630:105:0;;;;;8037:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8037:159:0;;;;;31073:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31073:192:0;-1:-1:-1;;;;;31073:192:0;;;;;;;;;;19544:518;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19544:518:0;;;;;12128:170;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;12222:4;7840:5;7829:8;:16;7825:61;;;12250:4;12256:6;;7976;7968:5;:14;7964:57;;;12280:3;:10;;;7964:57;;;8001:20;;;-1:-1:-1;;;;;8001:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7964:57;7847:1;;7825:61;;;7864:22;;;-1:-1:-1;;;;;7864:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7825:61;5219:1;12128:170;:::o;10643:28::-;;;;:::o;10706:97::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;10780:15;;;-1:-1:-1;;10761:34:0;;-1:-1:-1;;;10780:15:0;;;;;;10779:16;10761:34;;;;;;10706:97::o;5046:31::-;;;-1:-1:-1;;;;;5046:31:0;;:::o;20108:1876::-;20213:10;20190:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;20324:10;;;;:5;:10;;;;;:29;;;20318:3;:35;20314:66;;;20362:18;20355:25;;;;20314:66;20415:10;;;;:5;:10;;;;;:30;;;20409:3;:36;:87;;;;-1:-1:-1;20495:1:0;20462:10;;;:5;:10;;;;;:30;;;:34;20409:87;20391:218;;;20578:18;20570:27;;;;20391:218;20644:10;;;;:5;:10;;;;;:30;;;20637:3;:37;;;;:88;;-1:-1:-1;20724:1:0;20691:10;;;:5;:10;;;;;:30;;;:34;20637:88;:141;;;;-1:-1:-1;20748:10:0;;;;:5;:10;;;;;:30;;;20742:3;:36;20637:141;20619:264;;;20855:15;20847:24;;;;20619:264;20911:10;;;;:5;:10;;;;;:30;;;:35;:69;;;;;20963:17;20976:3;20963:12;:17::i;:::-;20911:122;;;;-1:-1:-1;21003:10:0;;;;:5;:10;;;;;:30;;;20997:3;:36;20911:122;20893:255;;;21114:21;21106:30;;;;20893:255;21176:10;;;;:5;:10;;;;;:30;;;:35;:57;;;;;21216:17;21229:3;21216:12;:17::i;:::-;21215:18;21176:57;21158:175;;;21304:16;21296:25;;;;21158:175;21368:10;;;;:5;:10;;;;;:30;;;21361:3;:37;;;;:72;;;21416:17;21429:3;21416:12;:17::i;:::-;21415:18;21361:72;21343:283;;;21511:10;;;;:5;:10;;;;;:33;;;;;21507:64;;;21554:16;21546:25;;;;21507:64;21594:19;21586:28;;;;21343:283;21655:10;;;;:5;:10;;;;;:33;;;;;;:89;;-1:-1:-1;21709:10:0;;;;:5;:10;;;;;:30;;;:35;21655:89;21654:246;;;;-1:-1:-1;21868:10:0;;;;:5;:10;;;;;:31;;;;21817:30;;;;21763:34;;;;;:84;;;:136;21654:246;21636:301;;;21920:16;21912:25;;;;21636:301;21956:19;21948:28;;17525:1;20108:1876;;;;:::o;11069:182::-;11155:15;;11130:4;;-1:-1:-1;;;11155:15:0;;;;11154:16;;:89;;-1:-1:-1;11186:17:0;;11221:16;;11175:63;;;;;;-1:-1:-1;;;;;11175:63:0;;;;;;;;;;;;;;;;11241:1;;11186:17;;;;;11175:35;;:63;;;;;;;;;;;;;;;11241:1;11186:17;11175:63;;;5:2:-1;;;;30:1;27;20:12;5:2;11175:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11175:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11175:63:0;:67;11154:89;11147:96;;11069:182;;;;:::o;10605:31::-;;;;:::o;10217:26::-;;;;:::o;11596:205::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11726:12;:28;;;;11765:12;:28;11596:205::o;4866:95::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;4581:6;;-1:-1:-1;;;4581:6:0;;;;4573:15;;;;;;;;4929:5;4920:14;;-1:-1:-1;;4920:14:0;;;4946:9;;;;4929:5;4946:9;4866:95::o;18206:567::-;18327:6;18348:7;18370;18392;18414;18436:4;18290:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;18490:10:0;;;;-1:-1:-1;;18490:5:0;:10;;-1:-1:-1;;18490:10:0;;;:19;;;:31;18536:30;;;;18581:29;;;;18625:30;;;;18670:34;;;;18719:35;;;;;18490:31;;;;;18536:30;;18581:29;;18625:30;;18490:31;18719:35;;;;;;18206:567::o;7623:21::-;;;;:::o;12905:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4245:26::-;;;-1:-1:-1;;;4245:26:0;;;;;:::o;10571:27::-;;;-1:-1:-1;;;10571:27:0;;;;;:::o;30318:449::-;30420:7;30565:14;;;:9;:14;;;;;:21;;30601:30;;;;30646:23;;;;30684:24;;;;30723:25;;;;;30565:21;;-1:-1:-1;;;;;30601:30:0;;;;30646:23;;30684:24;;30318:449::o;17652:546::-;17773:7;17795;17817;17839;17861;17883;17736:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;17940:10:0;;;;-1:-1:-1;;17940:5:0;:10;;-1:-1:-1;;17940:10:0;;;:25;;;17980:27;;;18022:30;;;;18067:24;;;;18106:27;;;;18148:31;;;;;-1:-1:-1;;;;;17940:25:0;;;;17980:27;;;;;18022:30;;18067:24;;18148:31;17652:546::o;17542:102::-;17625:10;17616:20;;;;:8;:20;;;;;;;;;17609:27;;;;;;;;;;;;;;;;;17587:9;;17609:27;;;17616:20;17609:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:102;:::o;5236:116::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;5317:16;:27;;-1:-1:-1;;5317:27:0;-1:-1:-1;;;;;5317:27:0;;;;;;;;;;5236:116::o;22936:98::-;23012:14;;22936:98;:::o;14285:123::-;14340:4;14363:10;;;:5;:10;;;;;:19;;:31;14397:3;14363:31;;;;:37;;14285:123::o;3348:114::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;3425:5;;;3406:25;;-1:-1:-1;;;;;3425:5:0;;;;3406:25;;;3454:1;3438:18;;-1:-1:-1;;3438:18:0;;;3348:114::o;10295:26::-;;;;:::o;4686:93::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;4421:6;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;4741:6;:13;;-1:-1:-1;;4741:13:0;-1:-1:-1;;;4741:13:0;;;4766:7;;;;4741:6;4766:7;4686:93::o;29483:645::-;29540:4;29608:12;29561:30;29587:3;29561:25;:30::i;:::-;29557:541;;;-1:-1:-1;29623:14:0;;;;:9;:14;;;;;;;;:24;;;;;29662:28;;;;29743:21;;29737:28;;:5;:28;;;;;:43;29799:14;;;;;;;;-1:-1:-1;29799:30:0;;;;29623:24;;29705:162;;-1:-1:-1;;;;;29737:43:0;;;;29799:30;29623:24;29705:13;:162::i;:::-;29968:28;29974:14;;;:9;:14;;;;;;;;:21;29968:28;;:5;:28;;;;;:52;;;29937:121;;30039:4;29937:12;:121::i;:::-;29882:28;29888:14;;;:9;:14;;;;;;;;:21;29882:28;;:5;:28;;;;;:52;;:176;30082:4;;-1:-1:-1;30075:11:0;;29557:541;-1:-1:-1;30115:5:0;;29483:645;-1:-1:-1;;29483:645:0:o;12771:25::-;;;;:::o;2553:20::-;;;-1:-1:-1;;;;;2553:20:0;;:::o;30198:112::-;30291:10;30278:24;;;;:12;:24;;;;;;;;;30271:31;;;;;;;;;;;;;;;;;30249:9;;30271:31;;;30278:24;30271:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30198:112;:::o;10490:32::-;;;-1:-1:-1;;;;;10490:32:0;;:::o;30887:178::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;30952:35;;-1:-1:-1;;;;;30952:12:0;;;30973:4;30965:21;30952:35;;;;;;;;;30965:21;30952:12;:35;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;19150:325:0;19274:4;19247:7;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;19316:14;;;;:5;:14;;;;;:34;;;19354:3;-1:-1:-1;19316:41:0;;;:96;;-1:-1:-1;19411:1:0;19374:14;;;:5;:14;;;;;:34;;;:38;19316:96;:151;;;;-1:-1:-1;19430:14:0;;;;:5;:14;;;;;:37;;;;;19429:38;19316:151;19296:171;19150:325;-1:-1:-1;;;19150:325:0:o;12306:173::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;12403:4;7840:5;7829:8;:16;7825:61;;;12431:3;;12436:4;7976:6;7968:5;:14;7964:57;;;12458:6;:13;;;7964:57;;10456:27;;;;:::o;8845:82::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;8911:8;;;-1:-1:-1;;8899:20:0;;8911:8;;;;8910:9;8899:20;;;8845:82::o;7693:23::-;;;;:::o;12826:37::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12826:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8815:20::-;;;;;;:::o;11809:198::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11936:11;:26;;;;11973:11;:26;11809:198::o;11451:137::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11542:17;:38;;-1:-1:-1;;11542:38:0;-1:-1:-1;;;;;11542:38:0;;;;;;;;;;11451:137::o;12015:105::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;12090:9;:22;12015:105::o;24318:1487::-;24990:20;4421:6;;24990:20;;;;;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;24433:14;;;;:5;:14;;;;;:33;;;22197:3;:12;-1:-1:-1;22197:12:0;22189:42;;;;;-1:-1:-1;;;;;22189:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24502:10;;24492:20;;24484:64;;;;;-1:-1:-1;;;;;24484:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24625:3;24581:14;;;:5;:14;;;;;:32;;;-1:-1:-1;;;;;24581:32:0;:48;;24559:127;;;;;-1:-1:-1;;;;;24559:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24715:5;24705:15;;24697:55;;;;;-1:-1:-1;;;;;24697:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24785:10;24799:9;24785:23;:50;;;;;24813:22;24824:10;24813;:22::i;:::-;24812:23;24785:50;24763:135;;;;;;;-1:-1:-1;;;;;24763:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24925:14;;;;:5;:14;;;;;:32;;;24909:70;;-1:-1:-1;;;;;24925:32:0;24959:10;24971:7;24909:15;:70::i;:::-;25013:41;25025:10;25037:7;25046;25013:11;:41::i;:::-;24990:64;;25082:40;25093:7;25102;25111:10;25082;:40::i;:::-;25065:57;;25135:44;25149:7;25158:12;25172:6;25135:13;:44::i;:::-;25229:60;25242:39;25255:7;25264:16;25272:7;25264;:16::i;:::-;25242:12;:39::i;:::-;25283:5;25229:12;:60::i;:::-;25192:97;;25335:36;25348:7;25357:13;25335:12;:36::i;:::-;25452:40;25459:14;;;:5;:14;;;;;;;;25452:6;25459:32;;;;-1:-1:-1;;;;;25459:32:0;25452:40;;;;;;;;25302:69;;-1:-1:-1;25425:106:0;;25507:13;25425:12;:106::i;:::-;25382:40;25389:14;;;:5;:14;;;;;;;;25382:6;25389:32;;;;;-1:-1:-1;;;;;25389:32:0;;;25382:40;;;;;;;;:149;;;;25570:14;;;;;;;:32;25389;25617:31;;;;25542:154;;25570:32;;;;25617:31;25663:22;25542:13;:154::i;:::-;25766:31;25781:7;25790:6;25766:14;:31::i;:::-;4435:1;24318:1487;;;;;;:::o;10391:24::-;;;;:::o;10169:18::-;;;;:::o;10422:27::-;;;;:::o;10811:124::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;10896:16;:31;10811:124::o;18781:361::-;18903:4;18922:7;18944;18866:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;19001:10:0;;;;-1:-1:-1;19001:5:0;:10;;;;;:33;;;;19049:31;;;;;19095:28;;;;19001:33;;;;;-1:-1:-1;;;;;19095:28:0;;;;18781:361::o;29222:253::-;29291:4;29335:14;;29328:3;:21;;:66;;;;-1:-1:-1;29393:1:0;29366:14;;;:9;:14;;;;;:24;;;:28;29328:66;:139;;;;-1:-1:-1;;29411:28:0;29417:14;;;:9;:14;;;;;;;;:21;29411:28;;:5;:28;;;;;:37;;:49;29464:3;29411:49;;;;:56;;;29222:253::o;14441:2791::-;16126:18;4421:6;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;15208:9;;15195;:22;;15187:59;;;;;-1:-1:-1;;;;;15187:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15265:20;15278:6;15265:12;:20::i;:::-;15257:55;;;;;;;-1:-1:-1;;;;;15257:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15372:25:0;;;;:55;;;15401:26;15417:9;15401:15;:26::i;:::-;15350:126;;;;;;;-1:-1:-1;;;;;15350:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15510:30;15523:11;;15536:3;15510:12;:30::i;:::-;15495:45;;15487:90;;;;;-1:-1:-1;;;;;15487:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15611:30;15624:11;;15637:3;15611:12;:30::i;:::-;15596:45;;;;15588:90;;;;;-1:-1:-1;;;;;15588:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15711:17;;;;15689:118;;;;;-1:-1:-1;;;;;15689:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15837:1;15826:12;;15818:41;;;;;-1:-1:-1;;;;;15818:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15881:3;15874:4;:10;15870:26;;;15893:3;15886:10;;15870:26;15963:11;15929:30;15942:3;15947:11;;15929:12;:30::i;:::-;:45;;15907:121;;;;;-1:-1:-1;;;;;15907:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16066:49;16082:6;16090:10;16102:12;16066:15;:49::i;:::-;16161:17;;16160:305;;16235:230;16270:149;16309:55;16322:31;16335:11;16348:4;16322:12;:31::i;:::-;16355:8;;16309:12;:55::i;16270:149::-;16442:4;16235:12;:230::i;:::-;16160:305;;;16200:4;16160:305;16126:339;;16525:513;;;;;;;;;16544:221;;;;;;;;;16575:6;-1:-1:-1;;;;;16544:221:0;;;;;16600:10;-1:-1:-1;;;;;16544:221:0;;;;;16629:11;16544:221;;;;16659:5;16544:221;;;;16683:8;16544:221;;;;16710:9;-1:-1:-1;;;;;16544:221:0;;;;;16738:12;16544:221;;;16525:513;;;;16780:247;;;;;;;;;16811:12;16780:247;;;;;;16842:12;16780:247;;;;16873:4;16780:247;;;;16896:10;16780:247;;;;16925:1;16780:247;;;;16945:12;16780:247;;;;16976:5;16780:247;;;;;;17000:12;16780:247;;;;;16525:513;;;16505:5;:17;16511:10;;16505:17;;;;;;;;;;;:533;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16505:533:0;;;;;-1:-1:-1;;;;;16505:533:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16505:533:0;;;;;-1:-1:-1;;;;;16505:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16505:533:0;;;;;-1:-1:-1;;;;;16505:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17049:8;:20;17058:10;-1:-1:-1;;;;;17049:20:0;-1:-1:-1;;;;;17049:20:0;;;;;;;;;;;;17075:10;;17049:37;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;17049:37:0;;;;;;;;;;;;;;;;;;;;;;17102:27;17110:6;17118:10;;17102:27;;;;-1:-1:-1;;;;;17102:27:0;-1:-1:-1;;;;;17102:27:0;;;;;;;;;;;;;;;;;;;;;17153;17166:10;;17178:1;17153:12;:27::i;:::-;17140:10;:40;-1:-1:-1;;;;;;;;;;;14441:2791:0:o;11259:180::-;11348:15;;11323:4;;-1:-1:-1;;;11348:15:0;;;;11347:16;;:84;;-1:-1:-1;11378:17:0;;11413:13;;11367:60;;;;;;-1:-1:-1;;;;;11367:60:0;;;;;;;;;;;;;;;;11430:1;;11378:17;;;;;11367:35;;:60;;;;;;;;;;;;;;;11430:1;11378:17;11367:60;;;5:2:-1;;;;30:1;27;20:12;10943:118:0;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11025:13;:28;10943:118::o;23070:1240::-;23742:20;23819:14;23956:19;23160:9;23171:10;23183:12;;8464:13;8452:8;:25;;8444:56;;;;;;;-1:-1:-1;;;;;8444:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8516:34;;;;;;-1:-1:-1;;;;;8516:34:0;;;;;;;;;;;;;;;;;;;4421:6;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;23239:14;;;;:5;:14;;;;;:33;;;22197:3;:12;-1:-1:-1;22197:12:0;22189:42;;;;;-1:-1:-1;;;;;22189:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23308:10;;23298:20;;23290:62;;;;;-1:-1:-1;;;;;23290:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23415:3;23371:14;;;:5;:14;;;;;:32;;;-1:-1:-1;;;;;23371:32:0;:48;23363:80;;;;;-1:-1:-1;;;;;23363:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23489:12;;23476:9;:25;;:54;;;;;23518:12;;23505:9;:25;;23476:54;23454:131;;;;;;;-1:-1:-1;;;;;23454:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23618:10;23632:9;23618:23;:50;;;;;23646:22;23657:10;23646;:22::i;:::-;23645:23;23618:50;23596:135;;;;;;;-1:-1:-1;;;;;23596:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23765:43;23777:10;23789:9;23800:7;23765:11;:43::i;:::-;23742:66;;23836:42;23847:7;23856:9;23867:10;23836;:42::i;:::-;23819:59;;23899:44;23913:7;23922:12;23936:6;23899:13;:44::i;:::-;23991:132;24022:62;24035:9;24046:37;24059:5;24066:16;24074:7;24066;:16::i;:::-;24046:12;:37::i;23991:132::-;24214:14;;;;:5;:14;;;;;:31;;;23956:167;;-1:-1:-1;24202:57:0;;-1:-1:-1;;;;;24214:31:0;23956:167;24202:11;:57::i;:::-;24271:31;24286:7;24295:6;24271:14;:31::i;:::-;4435:1;23070:1240;;;;;;;:::o;3630:105::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;3700:29;3719:9;3700:18;:29::i;:::-;3630:105;:::o;8037:159::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;8141:9;7840:5;7829:8;:16;7825:61;;;8168:8;:20;;;7825:61;;31073:192;31156:12;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;-1:-1:-1;;;;;;31171:14:0;;;;;;:6;:14;;;;;;;31196:18;;;31225:32;31178:6;31247:3;31171:14;31225:13;:32::i;:::-;31073:192;;;:::o;19544:518::-;19620:4;19602:7;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;19706:33;19731:7;19706:24;:33::i;:::-;19702:330;;;19756:14;;;;:5;:14;;;;;:37;;;:44;;-1:-1:-1;;19756:44:0;19796:4;19756:44;;;;;;19847:29;;19895:31;;;;19945:34;;;;;19815:179;;-1:-1:-1;;;;;19847:29:0;;;;19895:31;;19815:13;:179::i;:::-;20016:4;20009:11;;;;5919:480;6047:18;6068:35;6081:6;6097:4;6068:12;:35::i;:::-;6119:38;;;;;;-1:-1:-1;;;;;6119:38:0;;;;;;;;;;;;;;;6047:56;;-1:-1:-1;6119:38:0;;;;;;;;;;6174:6;-1:-1:-1;;;;;6168:22:0;;6191:8;6201:7;6168:41;;;;;-1:-1:-1;;;6168:41:0;;;;;;;-1:-1:-1;;;;;6168:41:0;-1:-1:-1;;;;;6168:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6168:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6168:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6306:10:0;;-1:-1:-1;6243:58:0;6256:35;6269:6;6285:4;6256:12;:35::i;6243:58::-;6242:74;6220:171;;;;;-1:-1:-1;;;;;6220:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5919:480;;;;:::o;1278:132::-;1360:7;;;1381;;;;1374:15;;;;1278:132;;;;:::o;28524:193::-;28582:4;28653:18;;28700:8;;;;28524:193::o;6594:570::-;6795:18;6726:6;6734:8;6744:7;5844;5800:6;-1:-1:-1;;;;;5794:23:0;;5818:6;5834:4;5794:46;;;;;-1:-1:-1;;;5794:46:0;;;;;;;-1:-1:-1;;;;;5794:46:0;-1:-1:-1;;;;;5794:46:0;;;;;;-1:-1:-1;;;;;5794:46:0;-1:-1:-1;;;;;5794:46:0;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5794:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5794:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5794:46:0;:57;;5772:119;;;;;-1:-1:-1;;;;;5772:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6782:1;6772:11;;6764:20;;;;;;6816:35;6829:6;6845:4;6816:12;:35::i;:::-;6862:60;;;;;;-1:-1:-1;;;;;6862:60:0;;;;;;;6907:4;6862:60;;;;;;;;;;;;6795:56;;-1:-1:-1;6862:26:0;;;;;;:60;;;;;;;;;;;;;;;-1:-1:-1;6862:26:0;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;6862:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6862:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;6938:37:0;;;;;;-1:-1:-1;;;;;6938:37:0;;;6862:60;6938:37;;;;;;;;;;;;;;;;;;;;7064:35;7077:6;7093:4;7064:12;:35::i;:::-;7009:33;7022:10;7034:7;7009:12;:33::i;:::-;7008:91;6986:170;;;;;-1:-1:-1;;;;;6986:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26786:526;26955:128;;;;;;;;;;;-1:-1:-1;;;;;26955:128:0;;;;;;;;;;;;;;;;-1:-1:-1;26955:128:0;;;;;;27057:15;26955:128;;;;;;26937:14;;;26927:25;;:9;:25;;;;;:156;;;;;;;;;;;;-1:-1:-1;;26927:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27107:10;27094:24;;:12;:24;;;;;27124:14;;27:10:-1;;23:18;;;45:23;;27094:45:0;;;;;;;;;;;;;27172:14;;27155:41;;;;;;;;;;;-1:-1:-1;;27155:41:0;;;;;;;;;27224:31;27237:14;;27253:1;27224:12;:31::i;:::-;27207:14;:48;;;27273:31;;27302:1;27273:12;:31::i;:::-;27266:38;26786:526;-1:-1:-1;;;;26786:526:0:o;27320:817::-;27440:7;27479;27440;;27530:19;27544:4;27530:13;:19::i;:::-;:41;;;;;;;;;27526:213;;;27609:11;;;;:5;:11;;;;;:32;;;27588:63;;27600:7;;27643;27588:11;:63::i;:::-;-1:-1:-1;27698:11:0;;;;:5;:11;;;;;:28;;;27675:52;;27688:8;;27675:12;:52::i;:::-;27666:61;;27526:213;27776:15;27753:19;27767:4;27753:13;:19::i;:::-;:38;;;;;;;;;27749:129;;;27840:11;;;;:5;:11;;;;;:25;;;27817:49;;27830:8;;27817:12;:49::i;:::-;27808:58;;27749:129;27902:6;27892:16;;27888:190;;27929:11;;;;:5;:11;;;;;:36;;;;;;;;27925:114;;;27995:28;28008:6;28016;27995:12;:28::i;:::-;27986:37;;27925:114;28060:6;28053:13;;;;27888:190;28088:41;;;-1:-1:-1;;;;;28088:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27320:817;;;;;;;;:::o;25813:485::-;25917:21;25930:7;25917:12;:21::i;:::-;25913:378;;;26023:24;;;;:9;:24;;;;;:34;;;25992:106;;26076:7;25992:12;:106::i;:::-;25955:24;;;;:9;:24;;;;;:34;;:143;25913:378;;;26198:14;;;;:5;:14;;;;;;;;:29;26229:24;;;:9;:24;;;;;;26198:29;26229:40;;26184:95;;-1:-1:-1;;;;;26198:29:0;;;;26229:40;26271:7;26184:13;:95::i;28145:313::-;28199:7;;28223:19;28237:4;28223:13;:19::i;:::-;:41;;;;;;;;;28219:87;;;-1:-1:-1;28288:6:0;;28281:13;;28219:87;28343:15;28320:19;28334:4;28320:13;:19::i;:::-;:38;;;;;;;;;28316:81;;;-1:-1:-1;28382:3:0;;28375:10;;209:391;269:9;499:7;;495:38;;;-1:-1:-1;524:1:0;517:8;;495:38;-1:-1:-1;545:7:0;;;550:2;545;:7;566:6;;;;;;;;:12;559:20;;;687:288;747:7;967:2;962;:7;;;;;;;;;687:288;-1:-1:-1;;;687:288:0:o;1092:119::-;1152:7;1175:8;;;;1168:16;;;;-1:-1:-1;1198:7:0;;;1092:119::o;26306:472::-;26417:14;;;;:5;:14;;;;;:34;;;26406:45;;;26384:124;;;;;-1:-1:-1;;;;;26384:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26583:14;;;;:5;:14;;;;;:34;;;26556:94;;26632:7;26556:12;:94::i;:::-;26519:14;;;;:5;:14;;;;;:34;;:131;;;26665:39;26661:109;;;26711:19;;;;;;;;;;;;;;;;;26661:109;;;26751:19;;;;;;;;;;;;;;;;;26306:472;;:::o;8935:378::-;9017:34;;;;;;-1:-1:-1;;;;;9017:34:0;;;;;;;;9062:21;;9017:34;;;;;;;;-1:-1:-1;9122:27:0;;-1:-1:-1;;;;;9086:25:0;;;;;9122:27;;;;;9140:8;;9122:27;;;;9140:8;9086:25;9122:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9122:27:0;9231:8;-1:-1:-1;;;;;9223:25:0;;9182:37;9195:13;9210:8;9182:12;:37::i;:::-;:66;9160:145;;;;;-1:-1:-1;;;;;9160:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3876:175;-1:-1:-1;;;;;3947:23:0;;;;3939:32;;;;;;4004:5;;;3983:38;;-1:-1:-1;;;;;3983:38:0;;;;4004:5;;;3983:38;;;4028:5;:17;;-1:-1:-1;;4028:17:0;-1:-1:-1;;;;;4028:17:0;;;;;;;;;;3876:175::o;6407:179::-;6513:7;6551:6;-1:-1:-1;;;;;6545:23:0;;6569:8;6545:33;;;;;-1:-1:-1;;;6545:33:0;;;;;;;-1:-1:-1;;;;;6545:33:0;-1:-1:-1;;;;;6545:33:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6545:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6545:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6545:33:0;;6407:179;-1:-1:-1;;;6407:179:0:o;28836:301::-;28958:4;28979:8;;28975:25;;;-1:-1:-1;28996:4:0;28989:11;;28975:25;29033:17;;29022:63;;;;;;-1:-1:-1;;;;;29022:63:0;;;;;;;;;;;;;;;;;;;;;29033:17;;;;;29022:38;;:63;;;;;29033:17;;29022:63;;;;;;;29033:17;;29022:63;;;5:2:-1;;;;30:1;27;20:12;5:2;29022:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;29125:4:0;;28836:301;-1:-1:-1;;;;;;;28836:301:0:o
Swarm Source
bzzr://a38e630d35e39ce1f13118d060493c5985a42fd9d31bfed654ce936c05096b02
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 45.99% | $0.250822 | 8,164.5935 | $2,047.86 | |
ETH | Ether (ETH) | 17.24% | $3,420.59 | 0.2244 | $767.51 |
ETH | 7.85% | $0.067483 | 5,180.976 | $349.63 | |
ETH | 3.60% | $0.013786 | 11,615.046 | $160.13 | |
ETH | 2.64% | $0.029807 | 3,939.8575 | $117.43 | |
ETH | 1.66% | $0.009955 | 7,440.585 | $74.07 | |
ETH | 1.59% | $0.000629 | 112,770.3201 | $70.9 | |
ETH | 1.40% | $0.002044 | 30,541.9265 | $62.43 | |
ETH | 1.06% | $0.000656 | 71,834.7052 | $47.15 | |
ETH | 0.57% | $0.000439 | 57,541.7466 | $25.25 | |
ETH | 0.43% | $0.002251 | 8,477.362 | $19.08 | |
ETH | 0.11% | $0.000182 | 28,088 | $5.11 | |
ETH | 0.11% | $0.022822 | 209.278 | $4.78 | |
ETH | 0.10% | $0.00099 | 4,299.2254 | $4.26 | |
ETH | 0.07% | $0.062318 | 49.7758 | $3.1 | |
ETH | 0.07% | $0.039996 | 75.68 | $3.03 | |
ETH | 0.06% | $0.000336 | 7,910.61 | $2.65 | |
ETH | 0.03% | $0.000302 | 4,595.5093 | $1.39 | |
ETH | 0.02% | $0.004857 | 205.6466 | $0.9987 | |
BSC | 15.40% | $670.99 | 1.022 | $685.72 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.