More Info
Private Name Tags
ContractCreator
Latest 10 from a total of 10 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 11874797 | 1474 days ago | IN | 0 ETH | 0.005207 | ||||
Buy | 11873925 | 1474 days ago | IN | 1.01511457 ETH | 0.01594845 | ||||
Withdraw | 11780075 | 1489 days ago | IN | 0 ETH | 0.00606425 | ||||
Withdraw | 11772483 | 1490 days ago | IN | 0 ETH | 0.00482782 | ||||
Buy | 11656017 | 1508 days ago | IN | 0.2006004 ETH | 0.00282998 | ||||
Buy | 11642245 | 1510 days ago | IN | 0.1 ETH | 0.00480689 | ||||
Set Sell Treshol... | 11640947 | 1510 days ago | IN | 0 ETH | 0.00388767 | ||||
Set Buy Out Pric... | 11639975 | 1510 days ago | IN | 0 ETH | 0.00243717 | ||||
Deposit | 11639950 | 1510 days ago | IN | 2 ETH | 0.0021596 | ||||
Set ERC20 | 11639925 | 1510 days ago | IN | 0 ETH | 0.0059225 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TokenSale
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-12 */ /** *Submitted for verification at Etherscan.io on 2020-12-28 */ //SPDX-License-Identifier: UNLICENSED pragma solidity 0.6.2; /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { /** * @dev Error constants. */ string public constant NOT_CURRENT_OWNER = "018001"; string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002"; /** * @dev Current owner address. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The 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, NOT_CURRENT_OWNER); _; } /** * @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 { require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } } /** * @dev Math operations with safety checks that throw on error. This contract is based on the * source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/math/SafeMath.sol. */ library SafeMath { /** * @dev List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant OVERFLOW = "008001"; string constant SUBTRAHEND_GREATER_THEN_MINUEND = "008002"; string constant DIVISION_BY_ZERO = "008003"; /** * @dev Multiplies two numbers, reverts on overflow. * @param _factor1 Factor number. * @param _factor2 Factor number. * @return product The product of the two factors. */ function mul( uint256 _factor1, uint256 _factor2 ) internal pure returns (uint256 product) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_factor1 == 0) { return 0; } product = _factor1 * _factor2; require(product / _factor1 == _factor2, OVERFLOW); } /** * @dev Integer division of two numbers, truncating the quotient, reverts on division by zero. * @param _dividend Dividend number. * @param _divisor Divisor number. * @return quotient The quotient. */ function div( uint256 _dividend, uint256 _divisor ) internal pure returns (uint256 quotient) { // Solidity automatically asserts when dividing by 0, using all gas. require(_divisor > 0, DIVISION_BY_ZERO); quotient = _dividend / _divisor; // assert(_dividend == _divisor * quotient + _dividend % _divisor); // There is no case in which this doesn't hold. } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). * @param _minuend Minuend number. * @param _subtrahend Subtrahend number. * @return difference Difference. */ function sub( uint256 _minuend, uint256 _subtrahend ) internal pure returns (uint256 difference) { require(_subtrahend <= _minuend, SUBTRAHEND_GREATER_THEN_MINUEND); difference = _minuend - _subtrahend; } /** * @dev Adds two numbers, reverts on overflow. * @param _addend1 Number. * @param _addend2 Number. * @return sum Sum. */ function add( uint256 _addend1, uint256 _addend2 ) internal pure returns (uint256 sum) { sum = _addend1 + _addend2; require(sum >= _addend1, OVERFLOW); } /** * @dev Divides two numbers and returns the remainder (unsigned integer modulo), reverts when * dividing by zero. * @param _dividend Number. * @param _divisor Number. * @return remainder Remainder. */ function mod( uint256 _dividend, uint256 _divisor ) internal pure returns (uint256 remainder) { require(_divisor != 0, DIVISION_BY_ZERO); remainder = _dividend % _divisor; } } /** * @dev signature of external (deployed) contract (ERC20 token) * only methods we will use */ contract ERC20Token { function totalSupply() external view returns (uint256){} function balanceOf(address account) external view returns (uint256){} function allowance(address owner, address spender) external view returns (uint256){} function transfer(address recipient, uint256 amount) external returns (bool){} function approve(address spender, uint256 amount) external returns (bool){} function transferFrom(address sender, address recipient, uint256 amount) external returns (bool){} function decimals() external view returns (uint8){} } contract TokenSale is Ownable, ReentrancyGuard { using SafeMath for uint256; modifier onlyPriceManager() { require( msg.sender == price_manager, "only price manager can call this function" ); _; } modifier onlyOwnerOrPriceManager() { require( msg.sender == price_manager || msg.sender == owner, "only owner or price manager can call this function" ); _; } ERC20Token token; /** * @dev some non-working address from the start to ensure owner will set correct one */ address ERC20Contract = 0x0000000000000000000000000000000000000000; address price_manager = 0x0000000000000000000000000000000000000000; uint256 ref_commission = 5; mapping(address => uint256) private ref_balances; /** * @dev 10**18 for tokens with 18 digits, need to be changed accordingly (setter/getter) */ uint256 adj_constant = 1000000000000000000; //initial in wei uint256 sell_price = 100000000000000000; //initial in wei uint256 buyout_price = 70000000000000000; uint256 constant curve_scale = 100000; uint256 price_curve = 200; // in 1/100000 i.e. 1% == 1000, 0.1% == 100 uint256 sell_threshold = 250000000000000000; //events event Bought(uint256 tokens_amount, uint256 amount_wei, address wallet); event BoughtWithRef(uint256 tokens_amount, uint256 wei_amount, address buyer, address ref_wallet); event Sold(uint256 tokens_amount, uint256 amount_wei, address wallet); event TokensDeposited(uint256 amount, address wallet); event FinneyDeposited(uint256 amount, address wallet); event Withdrawn(uint256 amount, address wallet); event RefWithdrawnEther(uint256 amount, address wallet); event RefWithdrawnTokens(uint256 amount, address wallet); event TokensWithdrawn(uint256 amount, address wallet); event UpdateSellPrice(uint256 timestamp, uint256 new_price); event UpdateBuyoutPrice(uint256 timestamp, uint256 new_price); /** * @dev set price_manager == owner in the beginning, but could be changed by setter, below */ constructor() public { price_manager = owner; } function setPriceManagerRight(address newPriceManager) external onlyOwner{ price_manager = newPriceManager; } function getPriceManager() public view returns(address){ return price_manager; } function setPriceCurve(uint256 new_curve) external onlyOwnerOrPriceManager{ price_curve = new_curve; } function getPriceCurve() public view returns(uint256){ return price_curve; } function setSellTreshold(uint256 new_treshold) external onlyOwnerOrPriceManager{ sell_threshold = new_treshold; } function getSellTreshold() public view returns(uint256){ return sell_threshold; } function upForecastPrice(uint256 current_price, uint256 num_tokens) public view returns(uint256) { uint256 change =0; uint256 forecast_price = current_price; for (uint32 i=0; i < num_tokens; i++){ change = forecast_price.div(curve_scale).mul(price_curve); forecast_price = forecast_price.add(change); } return forecast_price; } function downForecastPrice(uint256 current_price, uint256 num_tokens) public view returns (uint256) { uint256 change =0; uint256 forecast_price = current_price; for (uint32 i=0; i < num_tokens; i++){ change = forecast_price.div(curve_scale).mul(price_curve); forecast_price = forecast_price.sub(change); } return forecast_price; } function effectiveBuyAmount(uint256 current_price, uint256 num_tokens) public view returns(uint256) { uint256 change =0; uint256 forecast_price = current_price; uint256 total_amount = current_price; for (uint32 i=0; i < num_tokens-1; i++){ change = forecast_price.div(curve_scale).mul(price_curve); forecast_price = forecast_price.add(change); total_amount += forecast_price; } return total_amount; } function effectiveSellAmount(uint256 current_price, uint256 num_tokens) public view returns(uint256) { uint256 change =0; uint256 forecast_price = current_price; uint256 total_amount = current_price; for (uint32 i=0; i < num_tokens-1; i++){ change = forecast_price.div(curve_scale).mul(price_curve); forecast_price = forecast_price.sub(change); total_amount += forecast_price; } return total_amount; } function updatePricesBuy(uint256 num_tokens) internal { sell_price = upForecastPrice(sell_price, num_tokens); buyout_price = upForecastPrice(buyout_price, num_tokens); uint256 timestamp = now; emit UpdateSellPrice(timestamp,sell_price); emit UpdateBuyoutPrice(timestamp, buyout_price); } function updatePricesSell(uint256 num_tokens) internal { sell_price = downForecastPrice(sell_price, num_tokens); buyout_price = downForecastPrice(buyout_price, num_tokens); uint256 timestamp = now; emit UpdateSellPrice(timestamp,sell_price); emit UpdateBuyoutPrice(timestamp, buyout_price); } /** * @dev setter/getter for ERC20 linked to exchange (current) smartcontract */ function setERC20(address newERC20Contract) external onlyOwner returns(bool){ ERC20Contract = newERC20Contract; token = ERC20Token(ERC20Contract); } function getERC20() external view returns(address){ return ERC20Contract; } /** * @dev setter/getter for digits constant (current 10**18) */ function setAdjConstant(uint256 new_adj_constant) external onlyOwner{ adj_constant = new_adj_constant; } function getAdjConstant() external view returns(uint256){ return adj_constant; } /** * @dev setter/getter for digits constant (current 10**18) */ function setRefCommission(uint256 new_ref_commission) external onlyOwner{ ref_commission = new_ref_commission; } function getRefCommission() external view returns(uint256){ return ref_commission; } /** * @dev setters/getters for prices */ function setSellPrice(uint256 new_sell_price) external onlyPriceManager{ sell_price = new_sell_price; } function setBuyOutPrice(uint256 new_buyout_price) external onlyPriceManager{ buyout_price = new_buyout_price; } function getSellPrice() external view returns(uint256){ return sell_price; } function getBuyOutPrice() external view returns(uint256){ return buyout_price; } /** * @dev user buys tokens * ref_wallet parameter, set 0x0 if not used */ function buy(address ref_wallet, uint256 num_tokens) payable external notContract nonReentrant returns (bool) { uint256 amountSent = msg.value; //in wei.. require(amountSent == effectiveBuyAmount(sell_price,num_tokens), "amount do not correspond"); require(ref_wallet == address(0x0) || ref_wallet != msg.sender, "you cannot use ref. code for yourself"); uint256 dexBalance = token.balanceOf(address(this)); //calc number of tokens (real ones, not converted based on decimals..) uint256 amountTobuy = num_tokens; //tokens as user see them uint256 realAmountTobuy = amountTobuy.mul(adj_constant); //tokens adjusted to real ones require(realAmountTobuy > 0, "not enough ether to buy any feasible amount of tokens"); require(realAmountTobuy <= dexBalance, "Not enough tokens in the reserve"); try token.transfer(msg.sender, realAmountTobuy) { //ensure we revert in case of failure if (ref_wallet == address(0x0)){ emit Bought(amountTobuy, amountSent, msg.sender); } else { uint256 ref_comiss = amountSent.div(100).mul(ref_commission); ref_balances[ref_wallet] = ref_balances[ref_wallet].add(ref_comiss); emit BoughtWithRef(amountTobuy, amountSent, msg.sender, ref_wallet); } updatePricesBuy(num_tokens); return true; } catch { require(false,"transfer failed"); } //we could not get here, i.e. it is error if we here return false; } receive() external payable {// called when ether is send, just do not allow it revert(); } /** * @dev user sells tokens */ function sell(uint256 amount_tokens) external notContract nonReentrant returns(bool) { require(sell_price >= sell_threshold, "price should reach threshold"); uint256 amount_wei = 0; require(amount_tokens > 0, "You need to sell at least some tokens"); uint256 realAmountTokens = amount_tokens.mul(adj_constant); uint256 token_bal = token.balanceOf(msg.sender); require(token_bal >= realAmountTokens, "Check the token balance on your wallet"); uint256 allowance = token.allowance(msg.sender, address(this)); require(allowance >= realAmountTokens, "Check the token allowance"); amount_wei = effectiveSellAmount(buyout_price,amount_tokens); require(address(this).balance > amount_wei, "unsufficient funds"); bool success = false; //ensure we revert in case of failure try token.transferFrom(msg.sender, address(this), realAmountTokens) { //just continue if all good.. } catch { require(false,"tokens transfer failed"); return false; } // ** msg.sender.transfer(amount_wei); .** (success, ) = msg.sender.call.value(amount_wei)(""); require(success, "Transfer failed."); // ** end ** updatePricesSell(amount_tokens); // all done.. emit Sold(amount_tokens, amount_wei, msg.sender); return true; //normal completion } /** * @dev returns contract balance, in wei */ function getContractBalance() external view returns (uint256) { return address(this).balance; } /** * @dev returns contract tokens balance */ function getContractTokensBalance() external view returns (uint256) { return token.balanceOf(address(this)); } /** * @dev use of msg.sender in view function is not security measure (it doesnt work for view functions), * it is used only for convinience here. And etherscan do not support it (limitation of etherscan view * functions support, but web3 supports). */ function checkRefBalance(address ref_wallet) external onlyOwner view returns (uint256) { return ref_balances[ref_wallet]; } function setRefBalance(address ref_wallet, uint256 balance) external onlyOwner{ ref_balances[ref_wallet] = balance; } /** * @dev use of msg.sender in view function is not security measure (it doesnt work for view functions), * it is used only for convinience here. And etherscan do not support it (limitation of etherscan view * functions support, but web3 supports). */ function checkOwnRefBalance() external view returns (uint256) { return ref_balances[msg.sender]; } /** * @dev - ref. withdraw ether */ function ref_withdraw_ether() external notContract nonReentrant { require(ref_balances[msg.sender] >0,"no balance"); uint256 amount = ref_balances[msg.sender]; //ether require(address(this).balance >= amount, "unsufficient funds"); bool success = false; // ** sendTo.transfer(amount);** (success, ) = (payable(msg.sender)).call.value(amount)(""); require(success, "Transfer failed."); ref_balances[msg.sender] = 0; // ** end ** emit RefWithdrawnEther(amount, msg.sender); //wei } /** * @dev - ref. withdraw ether */ function ref_withdraw_tokens() external notContract nonReentrant { require(ref_balances[msg.sender] >0,"no balance"); uint256 amount = ref_balances[msg.sender];//wei uint256 dexBalance = token.balanceOf(address(this)); //calc number of tokens (real ones, not converted based on decimals..) //to ensure that divider is smaller amount = amount.mul(100000); uint256 amount_tokens = amount.div(sell_price); //tokens as user see them uint256 real_amount_tokens = amount_tokens.mul(adj_constant); //tokens adjusted to real ones //convert back real_amount_tokens = real_amount_tokens.div(100000); require(real_amount_tokens > 0, "not enough balance to buy any feasible amount of tokens"); require(real_amount_tokens <= dexBalance, "Not enough tokens in the reserve"); try token.transfer(msg.sender, real_amount_tokens) { //ensure we revert in case of failure ref_balances[msg.sender] = 0; emit RefWithdrawnTokens(real_amount_tokens, msg.sender); //wei } catch { require(false,"transfer failed"); } } /** * @dev - four functions below are for owner to * deposit/withdraw eth/tokens to exchange contract */ function withdraw(address payable sendTo, uint256 amount) external onlyOwner { require(address(this).balance >= amount, "unsufficient funds"); bool success = false; // ** sendTo.transfer(amount);** (success, ) = sendTo.call.value(amount)(""); require(success, "Transfer failed."); // ** end ** emit Withdrawn(amount, sendTo); //wei } function deposit(uint256 amount) payable external onlyOwner { //amount in finney require(amount*(1 finney) == msg.value,"please provide value in finney"); emit FinneyDeposited(amount, owner); //in finney } function depositTokens(uint256 amount) external onlyOwner { require(amount > 0, "You need to deposit at least some tokens"); uint256 allowance = token.allowance(msg.sender, address(this)); require(allowance >= amount, "Check the token allowance"); token.transferFrom(msg.sender, address(this), amount); emit TokensDeposited(amount.div(adj_constant), owner); } function withdrawTokens(address to_wallet, uint256 amount_tokens) external onlyOwner{ require(amount_tokens > 0, "You need to withdraw at least some tokens"); uint256 realAmountTokens = amount_tokens.mul(adj_constant); uint256 contractTokenBalance = token.balanceOf(address(this)); require(contractTokenBalance >= realAmountTokens, "unsufficient funds"); //ensure we revert in case of failure try token.transfer(to_wallet, realAmountTokens) { //just continue if all good.. } catch { require(false,"tokens transfer failed"); } // all done.. emit TokensWithdrawn(amount_tokens, to_wallet); } /** * @dev service function to check tokens on wallet and allowance of wallet */ function walletTokenBalance(address wallet) external view returns(uint256){ return token.balanceOf(wallet); } /** * @dev service function to check allowance of wallet for tokens */ function walletTokenAllowance(address wallet) external view returns (uint256){ return token.allowance(wallet, address(this)); } /** * @dev not bullet-proof check, but additional measure, not to allow buy & sell from contracts */ function isContract(address _addr) internal view returns (bool){ uint32 size; assembly { size := extcodesize(_addr) } return (size > 0); } modifier notContract(){ require( (!isContract(msg.sender)), "external contracts are not allowed" ); _; } //*** fire exit *** function kill(address payable killAddress) external onlyOwner { uint256 contractTokenBalance = token.balanceOf(address(this)); token.transfer(killAddress, contractTokenBalance); selfdestruct(killAddress); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokens_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount_wei","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokens_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wei_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"ref_wallet","type":"address"}],"name":"BoughtWithRef","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"FinneyDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"RefWithdrawnEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"RefWithdrawnTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokens_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount_wei","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"TokensDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"new_price","type":"uint256"}],"name":"UpdateBuyoutPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"new_price","type":"uint256"}],"name":"UpdateSellPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ref_wallet","type":"address"},{"internalType":"uint256","name":"num_tokens","type":"uint256"}],"name":"buy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkOwnRefBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ref_wallet","type":"address"}],"name":"checkRefBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"current_price","type":"uint256"},{"internalType":"uint256","name":"num_tokens","type":"uint256"}],"name":"downForecastPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"current_price","type":"uint256"},{"internalType":"uint256","name":"num_tokens","type":"uint256"}],"name":"effectiveBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"current_price","type":"uint256"},{"internalType":"uint256","name":"num_tokens","type":"uint256"}],"name":"effectiveSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdjConstant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyOutPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractTokensBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getERC20","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceCurve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRefCommission","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"killAddress","type":"address"}],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ref_withdraw_ether","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ref_withdraw_tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_tokens","type":"uint256"}],"name":"sell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_adj_constant","type":"uint256"}],"name":"setAdjConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_buyout_price","type":"uint256"}],"name":"setBuyOutPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newERC20Contract","type":"address"}],"name":"setERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_curve","type":"uint256"}],"name":"setPriceCurve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceManager","type":"address"}],"name":"setPriceManagerRight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ref_wallet","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"setRefBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_ref_commission","type":"uint256"}],"name":"setRefCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_sell_price","type":"uint256"}],"name":"setSellPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_treshold","type":"uint256"}],"name":"setSellTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"current_price","type":"uint256"},{"internalType":"uint256","name":"num_tokens","type":"uint256"}],"name":"upForecastPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"walletTokenAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"walletTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"sendTo","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_wallet","type":"address"},{"internalType":"uint256","name":"amount_tokens","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600380546001600160a01b031990811690915560048054909116905560058055670de0b6b3a764000060075567016345785d8a000060085566f8b0a10e47000060095560c8600a556703782dace9d90000600b5534801561006457600080fd5b50600080546001600160a01b0319908116331780835560018055600480549092166001600160a01b039091161790556134039081906100a390396000f3fe6080604052600436106102bf5760003560e01c8063ac3807811161016e578063cce7ec13116100cb578063f2fde38b1161007f578063f3fef3a311610064578063f3fef3a3146108c8578063f8a623d314610901578063fc6634b914610916576102c9565b8063f2fde38b14610880578063f3fe3bc3146108b3576102c9565b8063dd49756e116100b0578063dd49756e14610802578063dec0fc5c1461082c578063e4849b3214610856576102c9565b8063cce7ec13146107c1578063db7b69ce146107ed576102c9565b8063be17533511610122578063c7e3865811610107578063c7e3865814610749578063ca5c6e9514610779578063cbf0b0c01461078e576102c9565b8063be175335146106ed578063c29a6fda14610702576102c9565b8063b6b55f2511610153578063b6b55f2514610682578063b85646901461069f578063bc526509146106d8576102c9565b8063ac3807811461063d578063ac8fd1481461066d576102c9565b806355e6663a1161021c578063860d248a116101d05780638df501b4116101b55780638df501b4146105e957806394d212e6146106135780639609f6c714610628576102c9565b8063860d248a1461054a5780638da5cb5b146105d4576102c9565b80636f9fb98a116102015780636f9fb98a146104ed57806374ee9e071461050257806384b8524a14610535576102c9565b806355e6663a146104ae5780636da847f5146104c3576102c9565b8063303b6d08116102735780634c82b3b4116102585780634c82b3b4146104235780634ece90a81461044d57806352b31f1d1461047e576102c9565b8063303b6d08146103e457806343d32e9c1461040e576102c9565b806310a56d5d116102a457806310a56d5d1461034b57806318fdec7e1461037e578063210e200a146103b1576102c9565b806306b091f9146102ce5780630c68987d14610309576102c9565b366102c957600080fd5b600080fd5b3480156102da57600080fd5b50610307600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610940565b005b34801561031557600080fd5b506103396004803603604081101561032c57600080fd5b5080359060200135610c7e565b60408051918252519081900360200190f35b34801561035757600080fd5b506103396004803603602081101561036e57600080fd5b50356001600160a01b0316610cdf565b34801561038a57600080fd5b50610307600480360360208110156103a157600080fd5b50356001600160a01b0316610d81565b3480156103bd57600080fd5b50610339600480360360208110156103d457600080fd5b50356001600160a01b0316610e4a565b3480156103f057600080fd5b506103076004803603602081101561040757600080fd5b5035610eb4565b34801561041a57600080fd5b50610339610f48565b34801561042f57600080fd5b506103076004803603602081101561044657600080fd5b5035610f4e565b34801561045957600080fd5b50610462610fb1565b604080516001600160a01b039092168252519081900360200190f35b34801561048a57600080fd5b50610339600480360360408110156104a157600080fd5b5080359060200135610fc0565b3480156104ba57600080fd5b5061033961100a565b3480156104cf57600080fd5b50610307600480360360208110156104e657600080fd5b503561101d565b3480156104f957600080fd5b5061033961106b565b34801561050e57600080fd5b506103396004803603602081101561052557600080fd5b50356001600160a01b031661106f565b34801561054157600080fd5b5061030761111b565b34801561055657600080fd5b5061055f611378565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610599578181015183820152602001610581565b50505050905090810190601f1680156105c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105e057600080fd5b506104626113b1565b3480156105f557600080fd5b506103076004803603602081101561060c57600080fd5b50356113c0565b34801561061f57600080fd5b50610339611454565b34801561063457600080fd5b506103396114e9565b34801561064957600080fd5b506103396004803603604081101561066057600080fd5b50803590602001356114ef565b34801561067957600080fd5b5061033961154b565b6103076004803603602081101561069857600080fd5b5035611551565b3480156106ab57600080fd5b50610307600480360360408110156106c257600080fd5b506001600160a01b038135169060200135611686565b3480156106e457600080fd5b50610307611731565b3480156106f957600080fd5b50610339611afe565b34801561070e57600080fd5b506107356004803603602081101561072557600080fd5b50356001600160a01b0316611b04565b604080519115158252519081900360200190f35b34801561075557600080fd5b506103396004803603604081101561076c57600080fd5b5080359060200135611bdd565b34801561078557600080fd5b50610339611c2f565b34801561079a57600080fd5b50610307600480360360208110156107b157600080fd5b50356001600160a01b0316611c35565b610735600480360360408110156107d757600080fd5b506001600160a01b038135169060200135611dfd565b3480156107f957600080fd5b5061033961229c565b34801561080e57600080fd5b506103076004803603602081101561082557600080fd5b50356122a2565b34801561083857600080fd5b506103076004803603602081101561084f57600080fd5b5035612559565b34801561086257600080fd5b506107356004803603602081101561087957600080fd5b50356125bc565b34801561088c57600080fd5b50610307600480360360208110156108a357600080fd5b50356001600160a01b0316612b14565b3480156108bf57600080fd5b5061055f612ca0565b3480156108d457600080fd5b50610307600480360360408110156108eb57600080fd5b506001600160a01b038135169060200135612cd9565b34801561090d57600080fd5b50610462612ead565b34801561092257600080fd5b506103076004803603602081101561093957600080fd5b5035612ebc565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314610a0b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109d05781810151838201526020016109b8565b50505050905090810190601f1680156109fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008111610a4b5760405162461bcd60e51b81526004018080602001828103825260298152602001806133a56029913960400191505060405180910390fd5b6000610a6260075483612f0a90919063ffffffff16565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b5051905081811015610b4f576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610bbe57600080fd5b505af1925050508015610be357506040513d6020811015610bde57600080fd5b505160015b610c34576040805162461bcd60e51b815260206004820152601660248201527f746f6b656e73207472616e73666572206661696c656400000000000000000000604482015290519081900360640190fd5b50604080518481526001600160a01b038616602082015281517f0ddddc48b57dd67f8fa2ff05c78034b578c31ef5caa05b03d2ca16feadbbb98f929181900390910190a150505050565b60008083815b848163ffffffff161015610cd457600a54610cb890610cac84620186a063ffffffff612fab16565b9063ffffffff612f0a16565b9250610cca828463ffffffff61304416565b9150600101610c84565b509150505b92915050565b600254604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301523060248301529151600093929092169163dd62ed3e91604480820192602092909190829003018186803b158015610d4f57600080fd5b505afa158015610d63573d6000803e3d6000fd5b505050506040513d6020811015610d7957600080fd5b505192915050565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314610e0f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600254604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b158015610d4f57600080fd5b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314610f425760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600755565b60085490565b6004546001600160a01b0316331480610f7157506000546001600160a01b031633145b610fac5760405162461bcd60e51b81526004018080602001828103825260328152602001806133736032913960400191505060405180910390fd5b600b55565b6003546001600160a01b031690565b60008083815b848163ffffffff161015610cd457600a54610fee90610cac84620186a063ffffffff612fab16565b9250611000828463ffffffff6130d316565b9150600101610fc6565b3360009081526006602052604090205490565b6004546001600160a01b031633146110665760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b600955565b4790565b6000805460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146110fe5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50506001600160a01b031660009081526006602052604090205490565b6111243361315a565b156111605760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b60018054810190819055336000908152600660205260409020546111cb576040805162461bcd60e51b815260206004820152600a60248201527f6e6f2062616c616e636500000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526006602052604090205447811115611230576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b604051600090339083908381818185875af1925050503d8060008114611272576040519150601f19603f3d011682016040523d82523d6000602084013e611277565b606091505b505080915050806112cf576040805162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e00000000000000000000000000000000604482015290519081900360640190fd5b3360008181526006602090815260408083209290925581518581529081019290925280517f8642fc8432d193ca9816939deaf08486dfecde62ca290ef755fa4561932221889281900390910190a150506001548114611375576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b6000546001600160a01b031681565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b0316331461144e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600555565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156114b857600080fd5b505afa1580156114cc573d6000803e3d6000fd5b505050506040513d60208110156114e257600080fd5b5051905090565b600a5490565b6000808380825b600186038163ffffffff16101561154157600a5461152190610cac85620186a063ffffffff612fab16565b9350611533838563ffffffff61304416565b9250908201906001016114f6565b5095945050505050565b60095490565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146115df5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50348166038d7ea4c68000021461163d576040805162461bcd60e51b815260206004820152601e60248201527f706c656173652070726f766964652076616c756520696e2066696e6e65790000604482015290519081900360640190fd5b600054604080518381526001600160a01b03909216602083015280517feddca56e728ea017cd6a76222db5c5a1a3c95bc755678277f2ed597e027021a59281900390910190a150565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146117145760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b506001600160a01b03909116600090815260066020526040902055565b61173a3361315a565b156117765760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b60018054810190819055336000908152600660205260409020546117e1576040805162461bcd60e51b815260206004820152600a60248201527f6e6f2062616c616e636500000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526006602090815260408083205460025482517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015292519194936001600160a01b03909116926370a082319260248083019392829003018186803b15801561185457600080fd5b505afa158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b5051905061189582620186a063ffffffff612f0a16565b915060006118ae60085484612fab90919063ffffffff16565b905060006118c760075483612f0a90919063ffffffff16565b90506118dc81620186a063ffffffff612fab16565b90506000811161191d5760405162461bcd60e51b81526004018080602001828103825260378152602001806132f26037913960400191505060405180910390fd5b82811115611972576040805162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e7320696e207468652072657365727665604482015290519081900360640190fd5b600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156119df57600080fd5b505af1925050508015611a0457506040513d60208110156119ff57600080fd5b505160015b611a55576040805162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b503360008181526006602090815260408083209290925581518481529081019290925280517fcada869b31c856a3dd7f3c5037437292c4f2696b79a7bb73a6ffbb126736fee09281900390910190a1505050506001548114611375576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600b5490565b6000805460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314611b935760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b039485161791829055600280549290941691161790915590565b6000808380825b600186038163ffffffff16101561154157600a54611c0f90610cac85620186a063ffffffff612fab16565b9350611c21838563ffffffff6130d316565b925090820190600101611be4565b60055490565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314611cc35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d2857600080fd5b505afa158015611d3c573d6000803e3d6000fd5b505050506040513d6020811015611d5257600080fd5b5051600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b505050506040513d6020811015611def57600080fd5b50506001600160a01b038216ff5b6000611e083361315a565b15611e445760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b600180548101908190556008543490611e5d9085611bdd565b8114611eb0576040805162461bcd60e51b815260206004820152601860248201527f616d6f756e7420646f206e6f7420636f72726573706f6e640000000000000000604482015290519081900360640190fd5b6001600160a01b0385161580611ecf57506001600160a01b0385163314155b611f0a5760405162461bcd60e51b81526004018080602001828103825260258152602001806132cd6025913960400191505060405180910390fd5b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611f6e57600080fd5b505afa158015611f82573d6000803e3d6000fd5b505050506040513d6020811015611f9857600080fd5b50516007549091508590600090611fb690839063ffffffff612f0a16565b905060008111611ff75760405162461bcd60e51b81526004018080602001828103825260358152602001806132736035913960400191505060405180910390fd5b8281111561204c576040805162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e7320696e207468652072657365727665604482015290519081900360640190fd5b600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156120b957600080fd5b505af19250505080156120de57506040513d60208110156120d957600080fd5b505160015b61212f576040805162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b506001600160a01b038816612182576040805183815260208101869052338183015290517fa2a8034590a15fe810e9813d736096c0a03b3236cecb34b5b9f687ed67a6a6249181900360600190a161222e565b60055460009061219d90610cac87606463ffffffff612fab16565b6001600160a01b038a166000908152600660205260409020549091506121c9908263ffffffff6130d316565b6001600160a01b038a1660008181526006602090815260409182902093909355805186815292830188905233838201526060830191909152517f46f017d098ae7f09ad468d6ef84abc20c36313d0e6d3477f6203ad03a874e8589181900360800190a1505b61223787613166565b60019550505050506001548114612295576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5092915050565b60075490565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146123305760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600081116123705760405162461bcd60e51b815260040180806020018281038252602881526020018061334b6028913960400191505060405180910390fd5b600254604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b1580156123da57600080fd5b505afa1580156123ee573d6000803e3d6000fd5b505050506040513d602081101561240457600080fd5b505190508181101561245d576040805162461bcd60e51b815260206004820152601960248201527f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000604482015290519081900360640190fd5b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156124d057600080fd5b505af11580156124e4573d6000803e3d6000fd5b505050506040513d60208110156124fa57600080fd5b50506007547fbb18388c519fe4b4b577b17f416832c870492be5510cdb062b086c0a0025d7889061253290849063ffffffff612fab16565b600054604080519283526001600160a01b0390911660208301528051918290030190a15050565b6004546001600160a01b031633148061257c57506000546001600160a01b031633145b6125b75760405162461bcd60e51b81526004018080602001828103825260328152602001806133736032913960400191505060405180910390fd5b600a55565b60006125c73361315a565b156126035760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b60018054810190819055600b546008541015612666576040805162461bcd60e51b815260206004820152601c60248201527f70726963652073686f756c64207265616368207468726573686f6c6400000000604482015290519081900360640190fd5b6000836126a45760405162461bcd60e51b81526004018080602001828103825260258152602001806132a86025913960400191505060405180910390fd5b60006126bb60075486612f0a90919063ffffffff16565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561272557600080fd5b505afa158015612739573d6000803e3d6000fd5b505050506040513d602081101561274f57600080fd5b50519050818110156127925760405162461bcd60e51b815260040180806020018281038252602681526020018061324d6026913960400191505060405180910390fd5b600254604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d602081101561282657600080fd5b505190508281101561287f576040805162461bcd60e51b815260206004820152601960248201527f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000604482015290519081900360640190fd5b61288b600954886114ef565b93508347116128e1576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810186905290516000926001600160a01b0316916323b872dd91606480830192602092919082900301818787803b15801561295357600080fd5b505af192505050801561297857506040513d602081101561297357600080fd5b505160015b6129c9576040805162461bcd60e51b815260206004820152601660248201527f746f6b656e73207472616e73666572206661696c656400000000000000000000604482015290519081900360640190fd5b5060405133908690600081818185875af1925050503d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b50508091505080612a67576040805162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e00000000000000000000000000000000604482015290519081900360640190fd5b612a7088613207565b6040805189815260208101879052338183015290517fb047a5353a964554348728cb040330b616a3e706a3a328f71f5640e57a435f209181900360600190a16001965050505050506001548114612b0e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50919050565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314612ba25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5060408051808201909152600681527f303138303032000000000000000000000000000000000000000000000000000060208201526001600160a01b038216612c2c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314612d675760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5080471015612dbd576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612e08576040519150601f19603f3d011682016040523d82523d6000602084013e612e0d565b606091505b50508091505080612e65576040805162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e00000000000000000000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038516602082015281517f8c7cdad0d12a8db3e23561b42da6f10c8137914c97beff202213a410e1f520a3929181900390910190a1505050565b6004546001600160a01b031690565b6004546001600160a01b03163314612f055760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b600855565b600082612f1957506000610cd9565b5081810281838281612f2757fe5b04146040518060400160405280600681526020017f3030383030310000000000000000000000000000000000000000000000000000815250906122955760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b60008082116040518060400160405280600681526020017f3030383030330000000000000000000000000000000000000000000000000000815250906130325760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5081838161303c57fe5b049392505050565b6000828211156040518060400160405280600681526020017f3030383030320000000000000000000000000000000000000000000000000000815250906130cc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5050900390565b60408051808201909152600681527f3030383030310000000000000000000000000000000000000000000000000000602082015282820190838210156122955760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b3b63ffffffff16151590565b61317260085482610fc0565b6008556009546131829082610fc0565b6009556008546040805142808252602082019390935281517fff12ff9208e15876b05d323fa2d641784cce0333289906b6ac4de22bdec56f70929181900390910190a160095460408051838152602081019290925280517f21a87bf2289e9717c7c92579154d743191a28bad64673c9b73c114915a84ae2e9281900390910190a15050565b61321360085482610c7e565b6008556009546131829082610c7e56fe6f6e6c79207072696365206d616e616765722063616e2063616c6c20746869732066756e6374696f6e436865636b2074686520746f6b656e2062616c616e6365206f6e20796f75722077616c6c65746e6f7420656e6f75676820657468657220746f2062757920616e79206665617369626c6520616d6f756e74206f6620746f6b656e73596f75206e65656420746f2073656c6c206174206c6561737420736f6d6520746f6b656e73796f752063616e6e6f7420757365207265662e20636f646520666f7220796f757273656c666e6f7420656e6f7567682062616c616e636520746f2062757920616e79206665617369626c6520616d6f756e74206f6620746f6b656e7365787465726e616c20636f6e74726163747320617265206e6f7420616c6c6f776564596f75206e65656420746f206465706f736974206174206c6561737420736f6d6520746f6b656e736f6e6c79206f776e6572206f72207072696365206d616e616765722063616e2063616c6c20746869732066756e6374696f6e596f75206e65656420746f207769746864726177206174206c6561737420736f6d6520746f6b656e73a2646970667358221220102c037189cfae2c31b32ce47263db557a3b36c267ec86bca1834fab756d661164736f6c63430006020033
Deployed Bytecode
0x6080604052600436106102bf5760003560e01c8063ac3807811161016e578063cce7ec13116100cb578063f2fde38b1161007f578063f3fef3a311610064578063f3fef3a3146108c8578063f8a623d314610901578063fc6634b914610916576102c9565b8063f2fde38b14610880578063f3fe3bc3146108b3576102c9565b8063dd49756e116100b0578063dd49756e14610802578063dec0fc5c1461082c578063e4849b3214610856576102c9565b8063cce7ec13146107c1578063db7b69ce146107ed576102c9565b8063be17533511610122578063c7e3865811610107578063c7e3865814610749578063ca5c6e9514610779578063cbf0b0c01461078e576102c9565b8063be175335146106ed578063c29a6fda14610702576102c9565b8063b6b55f2511610153578063b6b55f2514610682578063b85646901461069f578063bc526509146106d8576102c9565b8063ac3807811461063d578063ac8fd1481461066d576102c9565b806355e6663a1161021c578063860d248a116101d05780638df501b4116101b55780638df501b4146105e957806394d212e6146106135780639609f6c714610628576102c9565b8063860d248a1461054a5780638da5cb5b146105d4576102c9565b80636f9fb98a116102015780636f9fb98a146104ed57806374ee9e071461050257806384b8524a14610535576102c9565b806355e6663a146104ae5780636da847f5146104c3576102c9565b8063303b6d08116102735780634c82b3b4116102585780634c82b3b4146104235780634ece90a81461044d57806352b31f1d1461047e576102c9565b8063303b6d08146103e457806343d32e9c1461040e576102c9565b806310a56d5d116102a457806310a56d5d1461034b57806318fdec7e1461037e578063210e200a146103b1576102c9565b806306b091f9146102ce5780630c68987d14610309576102c9565b366102c957600080fd5b600080fd5b3480156102da57600080fd5b50610307600480360360408110156102f157600080fd5b506001600160a01b038135169060200135610940565b005b34801561031557600080fd5b506103396004803603604081101561032c57600080fd5b5080359060200135610c7e565b60408051918252519081900360200190f35b34801561035757600080fd5b506103396004803603602081101561036e57600080fd5b50356001600160a01b0316610cdf565b34801561038a57600080fd5b50610307600480360360208110156103a157600080fd5b50356001600160a01b0316610d81565b3480156103bd57600080fd5b50610339600480360360208110156103d457600080fd5b50356001600160a01b0316610e4a565b3480156103f057600080fd5b506103076004803603602081101561040757600080fd5b5035610eb4565b34801561041a57600080fd5b50610339610f48565b34801561042f57600080fd5b506103076004803603602081101561044657600080fd5b5035610f4e565b34801561045957600080fd5b50610462610fb1565b604080516001600160a01b039092168252519081900360200190f35b34801561048a57600080fd5b50610339600480360360408110156104a157600080fd5b5080359060200135610fc0565b3480156104ba57600080fd5b5061033961100a565b3480156104cf57600080fd5b50610307600480360360208110156104e657600080fd5b503561101d565b3480156104f957600080fd5b5061033961106b565b34801561050e57600080fd5b506103396004803603602081101561052557600080fd5b50356001600160a01b031661106f565b34801561054157600080fd5b5061030761111b565b34801561055657600080fd5b5061055f611378565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610599578181015183820152602001610581565b50505050905090810190601f1680156105c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105e057600080fd5b506104626113b1565b3480156105f557600080fd5b506103076004803603602081101561060c57600080fd5b50356113c0565b34801561061f57600080fd5b50610339611454565b34801561063457600080fd5b506103396114e9565b34801561064957600080fd5b506103396004803603604081101561066057600080fd5b50803590602001356114ef565b34801561067957600080fd5b5061033961154b565b6103076004803603602081101561069857600080fd5b5035611551565b3480156106ab57600080fd5b50610307600480360360408110156106c257600080fd5b506001600160a01b038135169060200135611686565b3480156106e457600080fd5b50610307611731565b3480156106f957600080fd5b50610339611afe565b34801561070e57600080fd5b506107356004803603602081101561072557600080fd5b50356001600160a01b0316611b04565b604080519115158252519081900360200190f35b34801561075557600080fd5b506103396004803603604081101561076c57600080fd5b5080359060200135611bdd565b34801561078557600080fd5b50610339611c2f565b34801561079a57600080fd5b50610307600480360360208110156107b157600080fd5b50356001600160a01b0316611c35565b610735600480360360408110156107d757600080fd5b506001600160a01b038135169060200135611dfd565b3480156107f957600080fd5b5061033961229c565b34801561080e57600080fd5b506103076004803603602081101561082557600080fd5b50356122a2565b34801561083857600080fd5b506103076004803603602081101561084f57600080fd5b5035612559565b34801561086257600080fd5b506107356004803603602081101561087957600080fd5b50356125bc565b34801561088c57600080fd5b50610307600480360360208110156108a357600080fd5b50356001600160a01b0316612b14565b3480156108bf57600080fd5b5061055f612ca0565b3480156108d457600080fd5b50610307600480360360408110156108eb57600080fd5b506001600160a01b038135169060200135612cd9565b34801561090d57600080fd5b50610462612ead565b34801561092257600080fd5b506103076004803603602081101561093957600080fd5b5035612ebc565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314610a0b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109d05781810151838201526020016109b8565b50505050905090810190601f1680156109fd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008111610a4b5760405162461bcd60e51b81526004018080602001828103825260298152602001806133a56029913960400191505060405180910390fd5b6000610a6260075483612f0a90919063ffffffff16565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610acc57600080fd5b505afa158015610ae0573d6000803e3d6000fd5b505050506040513d6020811015610af657600080fd5b5051905081811015610b4f576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610bbe57600080fd5b505af1925050508015610be357506040513d6020811015610bde57600080fd5b505160015b610c34576040805162461bcd60e51b815260206004820152601660248201527f746f6b656e73207472616e73666572206661696c656400000000000000000000604482015290519081900360640190fd5b50604080518481526001600160a01b038616602082015281517f0ddddc48b57dd67f8fa2ff05c78034b578c31ef5caa05b03d2ca16feadbbb98f929181900390910190a150505050565b60008083815b848163ffffffff161015610cd457600a54610cb890610cac84620186a063ffffffff612fab16565b9063ffffffff612f0a16565b9250610cca828463ffffffff61304416565b9150600101610c84565b509150505b92915050565b600254604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301523060248301529151600093929092169163dd62ed3e91604480820192602092909190829003018186803b158015610d4f57600080fd5b505afa158015610d63573d6000803e3d6000fd5b505050506040513d6020811015610d7957600080fd5b505192915050565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314610e0f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600254604080517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b158015610d4f57600080fd5b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314610f425760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600755565b60085490565b6004546001600160a01b0316331480610f7157506000546001600160a01b031633145b610fac5760405162461bcd60e51b81526004018080602001828103825260328152602001806133736032913960400191505060405180910390fd5b600b55565b6003546001600160a01b031690565b60008083815b848163ffffffff161015610cd457600a54610fee90610cac84620186a063ffffffff612fab16565b9250611000828463ffffffff6130d316565b9150600101610fc6565b3360009081526006602052604090205490565b6004546001600160a01b031633146110665760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b600955565b4790565b6000805460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146110fe5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50506001600160a01b031660009081526006602052604090205490565b6111243361315a565b156111605760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b60018054810190819055336000908152600660205260409020546111cb576040805162461bcd60e51b815260206004820152600a60248201527f6e6f2062616c616e636500000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526006602052604090205447811115611230576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b604051600090339083908381818185875af1925050503d8060008114611272576040519150601f19603f3d011682016040523d82523d6000602084013e611277565b606091505b505080915050806112cf576040805162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e00000000000000000000000000000000604482015290519081900360640190fd5b3360008181526006602090815260408083209290925581518581529081019290925280517f8642fc8432d193ca9816939deaf08486dfecde62ca290ef755fa4561932221889281900390910190a150506001548114611375576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b6000546001600160a01b031681565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b0316331461144e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600555565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156114b857600080fd5b505afa1580156114cc573d6000803e3d6000fd5b505050506040513d60208110156114e257600080fd5b5051905090565b600a5490565b6000808380825b600186038163ffffffff16101561154157600a5461152190610cac85620186a063ffffffff612fab16565b9350611533838563ffffffff61304416565b9250908201906001016114f6565b5095945050505050565b60095490565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146115df5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50348166038d7ea4c68000021461163d576040805162461bcd60e51b815260206004820152601e60248201527f706c656173652070726f766964652076616c756520696e2066696e6e65790000604482015290519081900360640190fd5b600054604080518381526001600160a01b03909216602083015280517feddca56e728ea017cd6a76222db5c5a1a3c95bc755678277f2ed597e027021a59281900390910190a150565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146117145760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b506001600160a01b03909116600090815260066020526040902055565b61173a3361315a565b156117765760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b60018054810190819055336000908152600660205260409020546117e1576040805162461bcd60e51b815260206004820152600a60248201527f6e6f2062616c616e636500000000000000000000000000000000000000000000604482015290519081900360640190fd5b3360009081526006602090815260408083205460025482517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015292519194936001600160a01b03909116926370a082319260248083019392829003018186803b15801561185457600080fd5b505afa158015611868573d6000803e3d6000fd5b505050506040513d602081101561187e57600080fd5b5051905061189582620186a063ffffffff612f0a16565b915060006118ae60085484612fab90919063ffffffff16565b905060006118c760075483612f0a90919063ffffffff16565b90506118dc81620186a063ffffffff612fab16565b90506000811161191d5760405162461bcd60e51b81526004018080602001828103825260378152602001806132f26037913960400191505060405180910390fd5b82811115611972576040805162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e7320696e207468652072657365727665604482015290519081900360640190fd5b600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156119df57600080fd5b505af1925050508015611a0457506040513d60208110156119ff57600080fd5b505160015b611a55576040805162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b503360008181526006602090815260408083209290925581518481529081019290925280517fcada869b31c856a3dd7f3c5037437292c4f2696b79a7bb73a6ffbb126736fee09281900390910190a1505050506001548114611375576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600b5490565b6000805460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314611b935760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b039485161791829055600280549290941691161790915590565b6000808380825b600186038163ffffffff16101561154157600a54611c0f90610cac85620186a063ffffffff612fab16565b9350611c21838563ffffffff6130d316565b925090820190600101611be4565b60055490565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314611cc35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611d2857600080fd5b505afa158015611d3c573d6000803e3d6000fd5b505050506040513d6020811015611d5257600080fd5b5051600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b158015611dc557600080fd5b505af1158015611dd9573d6000803e3d6000fd5b505050506040513d6020811015611def57600080fd5b50506001600160a01b038216ff5b6000611e083361315a565b15611e445760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b600180548101908190556008543490611e5d9085611bdd565b8114611eb0576040805162461bcd60e51b815260206004820152601860248201527f616d6f756e7420646f206e6f7420636f72726573706f6e640000000000000000604482015290519081900360640190fd5b6001600160a01b0385161580611ecf57506001600160a01b0385163314155b611f0a5760405162461bcd60e51b81526004018080602001828103825260258152602001806132cd6025913960400191505060405180910390fd5b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611f6e57600080fd5b505afa158015611f82573d6000803e3d6000fd5b505050506040513d6020811015611f9857600080fd5b50516007549091508590600090611fb690839063ffffffff612f0a16565b905060008111611ff75760405162461bcd60e51b81526004018080602001828103825260358152602001806132736035913960400191505060405180910390fd5b8281111561204c576040805162461bcd60e51b815260206004820181905260248201527f4e6f7420656e6f75676820746f6b656e7320696e207468652072657365727665604482015290519081900360640190fd5b600254604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156120b957600080fd5b505af19250505080156120de57506040513d60208110156120d957600080fd5b505160015b61212f576040805162461bcd60e51b815260206004820152600f60248201527f7472616e73666572206661696c65640000000000000000000000000000000000604482015290519081900360640190fd5b506001600160a01b038816612182576040805183815260208101869052338183015290517fa2a8034590a15fe810e9813d736096c0a03b3236cecb34b5b9f687ed67a6a6249181900360600190a161222e565b60055460009061219d90610cac87606463ffffffff612fab16565b6001600160a01b038a166000908152600660205260409020549091506121c9908263ffffffff6130d316565b6001600160a01b038a1660008181526006602090815260409182902093909355805186815292830188905233838201526060830191909152517f46f017d098ae7f09ad468d6ef84abc20c36313d0e6d3477f6203ad03a874e8589181900360800190a1505b61223787613166565b60019550505050506001548114612295576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5092915050565b60075490565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b031633146123305760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600081116123705760405162461bcd60e51b815260040180806020018281038252602881526020018061334b6028913960400191505060405180910390fd5b600254604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b1580156123da57600080fd5b505afa1580156123ee573d6000803e3d6000fd5b505050506040513d602081101561240457600080fd5b505190508181101561245d576040805162461bcd60e51b815260206004820152601960248201527f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000604482015290519081900360640190fd5b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156124d057600080fd5b505af11580156124e4573d6000803e3d6000fd5b505050506040513d60208110156124fa57600080fd5b50506007547fbb18388c519fe4b4b577b17f416832c870492be5510cdb062b086c0a0025d7889061253290849063ffffffff612fab16565b600054604080519283526001600160a01b0390911660208301528051918290030190a15050565b6004546001600160a01b031633148061257c57506000546001600160a01b031633145b6125b75760405162461bcd60e51b81526004018080602001828103825260328152602001806133736032913960400191505060405180910390fd5b600a55565b60006125c73361315a565b156126035760405162461bcd60e51b81526004018080602001828103825260228152602001806133296022913960400191505060405180910390fd5b60018054810190819055600b546008541015612666576040805162461bcd60e51b815260206004820152601c60248201527f70726963652073686f756c64207265616368207468726573686f6c6400000000604482015290519081900360640190fd5b6000836126a45760405162461bcd60e51b81526004018080602001828103825260258152602001806132a86025913960400191505060405180910390fd5b60006126bb60075486612f0a90919063ffffffff16565b600254604080517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561272557600080fd5b505afa158015612739573d6000803e3d6000fd5b505050506040513d602081101561274f57600080fd5b50519050818110156127925760405162461bcd60e51b815260040180806020018281038252602681526020018061324d6026913960400191505060405180910390fd5b600254604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b1580156127fc57600080fd5b505afa158015612810573d6000803e3d6000fd5b505050506040513d602081101561282657600080fd5b505190508281101561287f576040805162461bcd60e51b815260206004820152601960248201527f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000604482015290519081900360640190fd5b61288b600954886114ef565b93508347116128e1576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810186905290516000926001600160a01b0316916323b872dd91606480830192602092919082900301818787803b15801561295357600080fd5b505af192505050801561297857506040513d602081101561297357600080fd5b505160015b6129c9576040805162461bcd60e51b815260206004820152601660248201527f746f6b656e73207472616e73666572206661696c656400000000000000000000604482015290519081900360640190fd5b5060405133908690600081818185875af1925050503d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b50508091505080612a67576040805162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e00000000000000000000000000000000604482015290519081900360640190fd5b612a7088613207565b6040805189815260208101879052338183015290517fb047a5353a964554348728cb040330b616a3e706a3a328f71f5640e57a435f209181900360600190a16001965050505050506001548114612b0e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50919050565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314612ba25760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5060408051808201909152600681527f303138303032000000000000000000000000000000000000000000000000000060208201526001600160a01b038216612c2c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b60005460408051808201909152600681527f30313830303100000000000000000000000000000000000000000000000000006020820152906001600160a01b03163314612d675760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5080471015612dbd576040805162461bcd60e51b815260206004820152601260248201527f756e73756666696369656e742066756e64730000000000000000000000000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612e08576040519150601f19603f3d011682016040523d82523d6000602084013e612e0d565b606091505b50508091505080612e65576040805162461bcd60e51b815260206004820152601060248201527f5472616e73666572206661696c65642e00000000000000000000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038516602082015281517f8c7cdad0d12a8db3e23561b42da6f10c8137914c97beff202213a410e1f520a3929181900390910190a1505050565b6004546001600160a01b031690565b6004546001600160a01b03163314612f055760405162461bcd60e51b81526004018080602001828103825260298152602001806132246029913960400191505060405180910390fd5b600855565b600082612f1957506000610cd9565b5081810281838281612f2757fe5b04146040518060400160405280600681526020017f3030383030310000000000000000000000000000000000000000000000000000815250906122955760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b60008082116040518060400160405280600681526020017f3030383030330000000000000000000000000000000000000000000000000000815250906130325760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5081838161303c57fe5b049392505050565b6000828211156040518060400160405280600681526020017f3030383030320000000000000000000000000000000000000000000000000000815250906130cc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b5050900390565b60408051808201909152600681527f3030383030310000000000000000000000000000000000000000000000000000602082015282820190838210156122955760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109d05781810151838201526020016109b8565b3b63ffffffff16151590565b61317260085482610fc0565b6008556009546131829082610fc0565b6009556008546040805142808252602082019390935281517fff12ff9208e15876b05d323fa2d641784cce0333289906b6ac4de22bdec56f70929181900390910190a160095460408051838152602081019290925280517f21a87bf2289e9717c7c92579154d743191a28bad64673c9b73c114915a84ae2e9281900390910190a15050565b61321360085482610c7e565b6008556009546131829082610c7e56fe6f6e6c79207072696365206d616e616765722063616e2063616c6c20746869732066756e6374696f6e436865636b2074686520746f6b656e2062616c616e6365206f6e20796f75722077616c6c65746e6f7420656e6f75676820657468657220746f2062757920616e79206665617369626c6520616d6f756e74206f6620746f6b656e73596f75206e65656420746f2073656c6c206174206c6561737420736f6d6520746f6b656e73796f752063616e6e6f7420757365207265662e20636f646520666f7220796f757273656c666e6f7420656e6f7567682062616c616e636520746f2062757920616e79206665617369626c6520616d6f756e74206f6620746f6b656e7365787465726e616c20636f6e74726163747320617265206e6f7420616c6c6f776564596f75206e65656420746f206465706f736974206174206c6561737420736f6d6520746f6b656e736f6e6c79206f776e6572206f72207072696365206d616e616765722063616e2063616c6c20746869732066756e6374696f6e596f75206e65656420746f207769746864726177206174206c6561737420736f6d6520746f6b656e73a2646970667358221220102c037189cfae2c31b32ce47263db557a3b36c267ec86bca1834fab756d661164736f6c63430006020033
Deployed Bytecode Sourcemap
6602:17468:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15786:8;;;6602:17468;;;;22035:778;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22035:778:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22035:778:0;;;;;;;;:::i;:::-;;10130:408;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10130:408:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10130:408:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23148:143;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23148:143:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23148:143:0;-1:-1:-1;;;;;23148:143:0;;:::i;8952:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8952:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8952:125:0;-1:-1:-1;;;;;8952:125:0;;:::i;22927:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22927:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22927:123:0;-1:-1:-1;;;;;22927:123:0;;:::i;12763:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12763:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12763:118:0;;:::i;13651:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13651:92:0;;;:::i;9451:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9451:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9451:129:0;;:::i;12586:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12586:89:0;;;:::i;:::-;;;;-1:-1:-1;;;;;12586:89:0;;;;;;;;;;;;;;9713:405;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9713:405:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9713:405:0;;;;;;;:::i;18697:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18697:112:0;;;:::i;13514:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13514:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13514:125:0;;:::i;17528:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17528:109:0;;;:::i;18125:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18125:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18125:137:0;-1:-1:-1;;;;;18125:137:0;;:::i;18872:604::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18872:604:0;;;:::i;568:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;568:65:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;568:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;688:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;688:20:0;;;:::i;13078:126::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13078:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13078:126:0;;:::i;17710:124::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17710:124:0;;;:::i;9349:90::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9349:90:0;;;:::i;11063:501::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11063:501:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11063:501:0;;;;;;;:::i;13755:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13755:96:0;;;:::i;21364:228::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21364:228:0;;:::i;18274:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18274:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;18274:132:0;;;;;;;;:::i;19540:1268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19540:1268:0;;;:::i;9600:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9600:95:0;;;:::i;12386:182::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12386:182:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12386:182:0;-1:-1:-1;;;;;12386:182:0;;:::i;:::-;;;;;;;;;;;;;;;;;;10550:501;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10550:501:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10550:501:0;;;;;;;:::i;13216:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13216:100:0;;;:::i;23824:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23824:243:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23824:243:0;-1:-1:-1;;;;;23824:243:0;;:::i;13971:1709::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13971:1709:0;;;;;;;;:::i;12893:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12893:96:0;;;:::i;21600:419::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21600:419:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21600:419:0;;:::i;9211:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9211:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9211:118:0;;:::i;15867:1583::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15867:1583:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15867:1583:0;;:::i;1525:238::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1525:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1525:238:0;-1:-1:-1;;;;;1525:238:0;;:::i;512:51::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;512:51:0;;;:::i;20946:402::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20946:402:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20946:402:0;;;;;;;;:::i;9099:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9099:94:0;;;:::i;13385:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13385:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13385:117:0;;:::i;22035:778::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22154:1:::1;22138:13;:17;22130:71;;;;-1:-1:-1::0;;;22130:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22212:24;22239:31;22257:12;;22239:13;:17;;:31;;;;:::i;:::-;22312:5;::::0;:30:::1;::::0;;;;;22336:4:::1;22312:30;::::0;::::1;::::0;;;22212:58;;-1:-1:-1;22281:28:0::1;::::0;-1:-1:-1;;;;;22312:5:0;;::::1;::::0;:15:::1;::::0;:30;;;;;::::1;::::0;;;;;;;;;:5;:30;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;22312:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22312:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;22312:30:0;;-1:-1:-1;22371:40:0;;::::1;;22363:71;;;::::0;;-1:-1:-1;;;22363:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22524:5;::::0;:43:::1;::::0;;;;;-1:-1:-1;;;;;22524:43:0;;::::1;;::::0;::::1;::::0;;;;;;;;;:5;;;::::1;::::0;:14:::1;::::0;:43;;;;;::::1;::::0;;;;;;;;:5:::1;::::0;:43;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;22524:43:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;22524:43:0;::::1;;22520:190;;22646:39;::::0;;-1:-1:-1;;;22646:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;22520:190;;22764:41;::::0;;;;;-1:-1:-1;;;;;22764:41:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;1350:1;;22035:778:::0;;:::o;10130:408::-;10221:7;;10294:13;10221:7;10318:181;10339:10;10335:1;:14;;;10318:181;;;10416:11;;10380:48;;:31;:14;7844:6;10380:31;:18;:31;:::i;:::-;:35;:48;:35;:48;:::i;:::-;10371:57;-1:-1:-1;10461:26:0;:14;10371:57;10461:26;:18;:26;:::i;:::-;10444:43;-1:-1:-1;10351:3:0;;10318:181;;;-1:-1:-1;10516:14:0;-1:-1:-1;;10130:408:0;;;;;:::o;23148:143::-;23244:5;;:38;;;;;;-1:-1:-1;;;;;23244:38:0;;;;;;;23276:4;23244:38;;;;;;23217:7;;23244:5;;;;;:15;;:38;;;;;;;;;;;;;;;:5;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;23244:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23244:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23244:38:0;;23148:143;-1:-1:-1;;23148:143:0:o;8952:125::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;9038:13:0::1;:31:::0;;;::::1;-1:-1:-1::0;;;;;9038:31:0;;;::::1;::::0;;;::::1;::::0;;8952:125::o;22927:123::-;23019:5;;:23;;;;;;-1:-1:-1;;;;;23019:23:0;;;;;;;;;22993:7;;23019:5;;;;;:15;;:23;;;;;;;;;;;;;;;:5;:23;;;5:2:-1;;;;30:1;27;20:12;12763:118:0;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;12842:12:0::1;:31:::0;12763:118::o;13651:92::-;13725:10;;13651:92;:::o;9451:129::-;6961:13;;-1:-1:-1;;;;;6961:13:0;6947:10;:27;;:50;;-1:-1:-1;6992:5:0;;-1:-1:-1;;;;;6992:5:0;6978:10;:19;6947:50;6927:148;;;;-1:-1:-1;;;6927:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9543:14:::1;:29:::0;9451:129::o;12586:89::-;12654:13;;-1:-1:-1;;;;;12654:13:0;12586:89;:::o;9713:405::-;9801:7;;9874:13;9801:7;9898:181;9919:10;9915:1;:14;;;9898:181;;;9996:11;;9960:48;;:31;:14;7844:6;9960:31;:18;:31;:::i;:48::-;9951:57;-1:-1:-1;10041:26:0;:14;9951:57;10041:26;:18;:26;:::i;:::-;10024:43;-1:-1:-1;9931:3:0;;9898:181;;18697:112;18790:10;18750:7;18777:24;;;:12;:24;;;;;;18697:112;:::o;13514:125::-;6769:13;;-1:-1:-1;;;;;6769:13:0;6755:10;:27;6735:116;;;;-1:-1:-1;;;6735:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13600:12:::1;:31:::0;13514:125::o;17528:109::-;17608:21;17528:109;:::o;18125:137::-;18203:7;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;;;;;;;18230:24:0::1;;::::0;;;:12:::1;:24;::::0;;;;;;18125:137::o;18872:604::-;23680:22;23691:10;23680;:22::i;:::-;23679:23;23658:107;;;;-1:-1:-1;;;23658:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2552:1:::1;2535:18:::0;;;::::1;::::0;;;;18969:10:::2;2535:13:::1;18956:24:::0;;;:12:::2;:24;::::0;;;;;18948:49:::2;;;::::0;;-1:-1:-1;;;18948:49:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;19047:10;19017:14;19034:24:::0;;;:12:::2;:24;::::0;;;;;19095:21:::2;:31:::0;-1:-1:-1;19095:31:0::2;19087:62;;;::::0;;-1:-1:-1;;;19087:62:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;19257:44;::::0;19169:12:::2;::::0;19266:10:::2;::::0;19290:6;;19169:12;19257:44;19169:12;19257:44;19290:6;19266:10;19257:44:::2;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;19243:58:0;;;;;19320:7;19312:36;;;::::0;;-1:-1:-1;;;19312:36:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;19372:10;19386:1;19359:24:::0;;;:12:::2;:24;::::0;;;;;;;:28;;;;19425:37;;;;;;;::::2;::::0;;;;;;::::2;::::0;;;;;;;;::::2;2611:1;;2647:13:::1;;2631:12;:29;2623:73;;;::::0;;-1:-1:-1;;;2623:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23778:1;18872:604::o:0;568:65::-;;;;;;;;;;;;;;;;;;;:::o;688:20::-;;;-1:-1:-1;;;;;688:20:0;;:::o;13078:126::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;13161:14:0::1;:35:::0;13078:126::o;17710:124::-;17796:5;;:30;;;;;;17820:4;17796:30;;;;;;17769:7;;-1:-1:-1;;;;;17796:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;17796:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17796:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17796:30:0;;-1:-1:-1;17710:124:0;:::o;9349:90::-;9420:11;;9349:90;:::o;11063:501::-;11155:7;;11227:13;;11155:7;11298:229;11330:1;11319:10;:12;11315:1;:16;;;11298:229;;;11398:11;;11362:48;;:31;:14;7844:6;11362:31;:18;:31;:::i;:48::-;11353:57;-1:-1:-1;11443:26:0;:14;11353:57;11443:26;:18;:26;:::i;:::-;11426:43;-1:-1:-1;11485:30:0;;;;11333:3;;11298:229;;;-1:-1:-1;11544:12:0;11063:501;-1:-1:-1;;;;;11063:501:0:o;13755:96::-;13831:12;;13755:96;:::o;21364:228::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;;21483:9:::1;21462:6;21470:8;21462:17;:30;21454:72;;;::::0;;-1:-1:-1;;;21454:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21566:5;::::0;21542:30:::1;::::0;;;;;-1:-1:-1;;;;;21566:5:0;;::::1;21542:30;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;21364:228:::0;:::o;18274:132::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;;;;;;18364:24:0;;::::1;;::::0;;;:12:::1;:24;::::0;;;;:34;18274:132::o;19540:1268::-;23680:22;23691:10;23680;:22::i;:::-;23679:23;23658:107;;;;-1:-1:-1;;;23658:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2552:1:::1;2535:18:::0;;;::::1;::::0;;;;19638:10:::2;2535:13:::1;19625:24:::0;;;:12:::2;:24;::::0;;;;;19617:49:::2;;;::::0;;-1:-1:-1;;;19617:49:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;19716:10;19686:14;19703:24:::0;;;:12:::2;:24;::::0;;;;;;;;19784:5:::2;::::0;:30;;;;;19808:4:::2;19784:30;::::0;::::2;::::0;;;19703:24;;19686:14;-1:-1:-1;;;;;19784:5:0;;::::2;::::0;:15:::2;::::0;:30;;;;;19703:24;19784:30;;;;;:5;:30;::::2;;5:2:-1::0;::::2;;;30:1;27::::0;20:12:::2;5:2;19784:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;19784:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;-1:-1:::0;19784:30:0;;-1:-1:-1;19969:18:0::2;:6:::0;19980::::2;19969:18;:10;:18;:::i;:::-;19960:27;;20008:21;20032:22;20043:10;;20032:6;:10;;:22;;;;:::i;:::-;20008:46;;20100:26;20129:31;20147:12;;20129:13;:17;;:31;;;;:::i;:::-;20100:60:::0;-1:-1:-1;20257:30:0::2;20100:60:::0;20280:6:::2;20257:30;:22;:30;:::i;:::-;20236:51;;20337:1;20316:18;:22;20308:90;;;;-1:-1:-1::0;;;20308:90:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20439:10;20417:18;:32;;20409:77;;;::::0;;-1:-1:-1;;;20409:77:0;;::::2;;::::0;::::2;::::0;;;;;;;::::2;::::0;;;;;;;;;;;;;::::2;;20517:5;::::0;:46:::2;::::0;;;;;20532:10:::2;20517:46;::::0;::::2;::::0;;;;;;;;;-1:-1:-1;;;;;20517:5:0;;::::2;::::0;:14:::2;::::0;:46;;;;;::::2;::::0;;;;;;;;;:5:::2;::::0;:46;::::2;;5:2:-1::0;::::2;;;30:1;27::::0;20:12:::2;5:2;20517:46:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;-1:-1:::0;20517:46:0;::::2;;20513:286;;20755:32;::::0;;-1:-1:-1;;;20755:32:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;20513:286;-1:-1:-1::0;20630:10:0::2;20644:1;20617:24:::0;;;:12:::2;:24;::::0;;;;;;;:28;;;;20665:50;;;;;;;::::2;::::0;;;;;;::::2;::::0;;;;;;;;::::2;2611:1;;;;2647:13:::1;;2631:12;:29;2623:73;;;::::0;;-1:-1:-1;;;2623:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;9600:95:::0;9673:14;;9600:95;:::o;12386:182::-;12457:4;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;12483:13:0::1;:32:::0;;;;;::::1;-1:-1:-1::0;;;;;12483:32:0;;::::1;;::::0;;;;12526:5:::1;:33:::0;;12545:13;;;::::1;12526:33:::0;::::1;;::::0;;;;12386:182::o;10550:501::-;10641:7;;10714:13;;10641:7;10785:229;10817:1;10806:10;:12;10802:1;:16;;;10785:229;;;10885:11;;10849:48;;:31;:14;7844:6;10849:31;:18;:31;:::i;:48::-;10840:57;-1:-1:-1;10930:26:0;:14;10840:57;10930:26;:18;:26;:::i;:::-;10913:43;-1:-1:-1;10972:30:0;;;;10820:3;;10785:229;;13216:100;13294:14;;13216:100;:::o;23824:243::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;23933:5:0::1;::::0;:30:::1;::::0;;;;;23957:4:::1;23933:30;::::0;::::1;::::0;;;23902:28:::1;::::0;-1:-1:-1;;;;;23933:5:0::1;::::0;:15:::1;::::0;:30;;;;;::::1;::::0;;;;;;;;:5;:30;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;23933:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23933:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;23933:30:0;23974:5:::1;::::0;:49:::1;::::0;;;;;-1:-1:-1;;;;;23974:49:0;;::::1;;::::0;::::1;::::0;;;;;;;;;23933:30;;-1:-1:-1;23974:5:0;::::1;::::0;:14:::1;::::0;:49;;;;;23933:30:::1;::::0;23974:49;;;;;;;;:5:::1;::::0;:49;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;23974:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23974:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;;;;;;;24034:25:0;::::1;;13971:1709:::0;14075:4;23680:22;23691:10;23680;:22::i;:::-;23679:23;23658:107;;;;-1:-1:-1;;;23658:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2552:1:::1;2535:18:::0;;;::::1;::::0;;;;14185:10:::2;::::0;14113:9:::2;::::0;14166:41:::2;::::0;14196:10;14166:18:::2;:41::i;:::-;14152:10;:55;14144:92;;;::::0;;-1:-1:-1;;;14144:92:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;-1:-1:-1::0;;;;;14255:26:0;::::2;::::0;;:54:::2;;-1:-1:-1::0;;;;;;14285:24:0;::::2;14299:10;14285:24;;14255:54;14247:104;;;;-1:-1:-1::0;;;14247:104:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14394:5;::::0;:30:::2;::::0;;;;;14418:4:::2;14394:30;::::0;::::2;::::0;;;14373:18:::2;::::0;-1:-1:-1;;;;;14394:5:0::2;::::0;:15:::2;::::0;:30;;;;;::::2;::::0;;;;;;;;:5;:30;::::2;;5:2:-1::0;::::2;;;30:1;27::::0;20:12:::2;5:2;14394:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;14394:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;-1:-1:::0;14394:30:0;14635:12:::2;::::0;14394:30;;-1:-1:-1;14537:10:0;;14515:19:::2;::::0;14619:29:::2;::::0;14537:10;;14619:29:::2;:15;:29;:::i;:::-;14593:55;;14745:1;14727:15;:19;14719:85;;;;-1:-1:-1::0;;;14719:85:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14842:10;14823:15;:29;;14815:74;;;::::0;;-1:-1:-1;;;14815:74:0;;::::2;;::::0;::::2;::::0;;;;;;;::::2;::::0;;;;;;;;;;;;;::::2;;14930:5;::::0;:43:::2;::::0;;;;;14945:10:::2;14930:43;::::0;::::2;::::0;;;;;;;;;-1:-1:-1;;;;;14930:5:0;;::::2;::::0;:14:::2;::::0;:43;;;;;::::2;::::0;;;;;;;;;:5:::2;::::0;:43;::::2;;5:2:-1::0;::::2;;;30:1;27::::0;20:12:::2;5:2;14930:43:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;-1:-1:::0;14930:43:0;::::2;;14926:651;;15533:32;::::0;;-1:-1:-1;;;15533:32:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;14926:651;-1:-1:-1::0;;;;;;15031:26:0;::::2;15027:405;;15082:43;::::0;;;;;::::2;::::0;::::2;::::0;;;15114:10:::2;15082:43:::0;;;;;;::::2;::::0;;;;;;;::::2;15027:405;;;15211:14;::::0;15166:18:::2;::::0;15187:39:::2;::::0;:19:::2;:10:::0;15202:3:::2;15187:19;:14;:19;:::i;:39::-;-1:-1:-1::0;;;;;15272:24:0;::::2;;::::0;;;:12:::2;:24;::::0;;;;;15166:60;;-1:-1:-1;15272:40:0::2;::::0;15166:60;15272:40:::2;:28;:40;:::i;:::-;-1:-1:-1::0;;;;;15245:24:0;::::2;;::::0;;;:12:::2;:24;::::0;;;;;;;;:67;;;;15354:62;;;;;;;::::2;::::0;;;15393:10:::2;15354:62:::0;;;;;;;;;;;;::::2;::::0;;;;;;;::::2;15027:405;;15446:27;15462:10;15446:15;:27::i;:::-;15495:4;15488:11;;;;;;2647:13:::1;;2631:12;:29;2623:73;;;::::0;;-1:-1:-1;;;2623:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23778:1;13971:1709:::0;;;;:::o;12893:96::-;12969:12;;12893:96;:::o;21600:419::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;;21686:1:::1;21677:6;:10;21669:63;;;;-1:-1:-1::0;;;21669:63:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21763:5;::::0;:42:::1;::::0;;;;;21779:10:::1;21763:42;::::0;::::1;::::0;21799:4:::1;21763:42:::0;;;;;;21743:17:::1;::::0;-1:-1:-1;;;;;21763:5:0::1;::::0;:15:::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:5;:42;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;21763:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21763:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;21763:42:0;;-1:-1:-1;21824:19:0;;::::1;;21816:57;;;::::0;;-1:-1:-1;;;21816:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21884:5;::::0;:53:::1;::::0;;;;;21903:10:::1;21884:53;::::0;::::1;::::0;21923:4:::1;21884:53:::0;;;;;;;;;;;;-1:-1:-1;;;;;21884:5:0;;::::1;::::0;:18:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;;:5:::1;::::0;:53;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;21884:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21884:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;;21990:12:0::1;::::0;21963:48:::1;::::0;21979:24:::1;::::0;:6;;:24:::1;:10;:24;:::i;:::-;22005:5;::::0;21963:48:::1;::::0;;;;;-1:-1:-1;;;;;22005:5:0;;::::1;21963:48;::::0;::::1;::::0;;;;;;;;;::::1;1350:1;21600:419:::0;:::o;9211:118::-;6961:13;;-1:-1:-1;;;;;6961:13:0;6947:10;:27;;:50;;-1:-1:-1;6992:5:0;;-1:-1:-1;;;;;6992:5:0;6978:10;:19;6947:50;6927:148;;;;-1:-1:-1;;;6927:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9298:11:::1;:23:::0;9211:118::o;15867:1583::-;15946:4;23680:22;23691:10;23680;:22::i;:::-;23679:23;23658:107;;;;-1:-1:-1;;;23658:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2552:1:::1;2535:18:::0;;;::::1;::::0;;;;15985:14:::2;::::0;15971:10:::2;::::0;:28:::2;;15963:69;;;::::0;;-1:-1:-1;;;15963:69:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;16043:18;16084:17:::0;16076:67:::2;;;;-1:-1:-1::0;;;16076:67:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16154:24;16181:31;16199:12;;16181:13;:17;;:31;;;;:::i;:::-;16253:5;::::0;:27:::2;::::0;;;;;16269:10:::2;16253:27;::::0;::::2;::::0;;;16154:58;;-1:-1:-1;16233:17:0::2;::::0;-1:-1:-1;;;;;16253:5:0;;::::2;::::0;:15:::2;::::0;:27;;;;;::::2;::::0;;;;;;;;;:5;:27;::::2;;5:2:-1::0;::::2;;;30:1;27::::0;20:12:::2;5:2;16253:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;16253:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;-1:-1:::0;16253:27:0;;-1:-1:-1;16299:29:0;;::::2;;16291:80;;;;-1:-1:-1::0;;;16291:80:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16402:5;::::0;:42:::2;::::0;;;;;16418:10:::2;16402:42;::::0;::::2;::::0;16438:4:::2;16402:42:::0;;;;;;16382:17:::2;::::0;-1:-1:-1;;;;;16402:5:0::2;::::0;:15:::2;::::0;:42;;;;;::::2;::::0;;;;;;;;:5;:42;::::2;;5:2:-1::0;::::2;;;30:1;27::::0;20:12:::2;5:2;16402:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;16402:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;-1:-1:::0;16402:42:0;;-1:-1:-1;16463:29:0;;::::2;;16455:67;;;::::0;;-1:-1:-1;;;16455:67:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;16565:47;16585:12;;16598:13;16565:19;:47::i;:::-;16552:60;;16685:10;16661:21;:34;16653:65;;;::::0;;-1:-1:-1;;;16653:65:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;16821:5;::::0;:63:::2;::::0;;;;;16840:10:::2;16821:63;::::0;::::2;::::0;16860:4:::2;16821:63:::0;;;;;;;;;;;;16729:12:::2;::::0;-1:-1:-1;;;;;16821:5:0::2;::::0;:18:::2;::::0;:63;;;;;::::2;::::0;;;;;;;;16729:12;16821:5;:63;::::2;;5:2:-1::0;::::2;;;30:1;27::::0;20:12:::2;5:2;16821:63:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;-1:-1:::0;16821:63:0;::::2;;16817:224;;16963:39;::::0;;-1:-1:-1;;;16963:39:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;16817:224;;17149:37;::::0;:10:::2;::::0;17171;;17149:37:::2;::::0;;;17171:10;17149;:37:::2;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;17135:51:0;;;;;17205:7;17197:36;;;::::0;;-1:-1:-1;;;17197:36:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;17266:31;17283:13;17266:16;:31::i;:::-;17348:43;::::0;;;;;::::2;::::0;::::2;::::0;;;17380:10:::2;17348:43:::0;;;;;;::::2;::::0;;;;;;;::::2;17409:4;17402:11;;;;;;;2647:13:::1;;2631:12;:29;2623:73;;;::::0;;-1:-1:-1;;;2623:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23778:1;15867:1583:::0;;;:::o;1525:238::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;-1:-1:-1;1651:31:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;;;1626:23:0;::::1;1618:65;;;::::0;-1:-1:-1;;;1618:65:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;27:10:-1;;8:100:::1;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;1618:65:0;-1:-1:-1::0;1716:5:0::1;::::0;;1695:38:::1;::::0;-1:-1:-1;;;;;1695:38:0;;::::1;::::0;1716:5;::::1;::::0;1695:38:::1;::::0;::::1;1740:5;:17:::0;;;::::1;-1:-1:-1::0;;;;;1740:17:0;;;::::1;::::0;;;::::1;::::0;;1525:238::o;512:51::-;;;;;;;;;;;;;;;;;;;:::o;20946:402::-;1318:5;;1325:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1318:5:0;1304:10;:19;1296:47;;;;-1:-1:-1;;;1296:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1296:47:0;;21067:6:::1;21042:21;:31;;21034:62;;;::::0;;-1:-1:-1;;;21034:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21195:29;::::0;21107:12:::1;::::0;-1:-1:-1;;;;;21195:11:0;::::1;::::0;21213:6;;21107:12;21195:29;21107:12;21195:29;21213:6;21195:11;:29:::1;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;21181:43:0;;;;;21243:7;21235:36;;;::::0;;-1:-1:-1;;;21235:36:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21309:25;::::0;;;;;-1:-1:-1;;;;;21309:25:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;1350:1;20946:402:::0;;:::o;9099:94::-;9172:13;;-1:-1:-1;;;;;9172:13:0;9099:94;:::o;13385:117::-;6769:13;;-1:-1:-1;;;;;6769:13:0;6755:10;:27;6735:116;;;;-1:-1:-1;;;6735:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13467:10:::1;:27:::0;13385:117::o;3470:485::-;3572:15;3811:13;3807:49;;-1:-1:-1;3847:1:0;3840:8;;3807:49;-1:-1:-1;3874:19:0;;;3885:8;3874;:19;:8;3908:18;;;;;:30;3940:8;;;;;;;;;;;;;;;;;3900:49;;;;;-1:-1:-1;;;3900:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4188:409:0;4291:16;4412:1;4401:8;:12;4415:16;;;;;;;;;;;;;;;;;4393:39;;;;;-1:-1:-1;;;4393:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4393:39:0;;4462:8;4450:9;:20;;;;;;;4188:409;-1:-1:-1;;;4188:409:0:o;4836:248::-;4941:18;4994:8;4979:11;:23;;5004:31;;;;;;;;;;;;;;;;;4971:65;;;;;-1:-1:-1;;;4971:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4971:65:0;-1:-1:-1;;5056:22:0;;;4836:248::o;5237:197::-;5419:8;;;;;;;;;;;;;;;;;5368:19;;;;5402:15;;;;5394:34;;;;-1:-1:-1;;;5394:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;23425:190:0;23547:18;23598:8;;;;;23425:190::o;11587:337::-;11665:39;11681:10;;11693;11665:15;:39::i;:::-;11652:10;:52;11746:12;;11730:41;;11760:10;11730:15;:41::i;:::-;11715:12;:56;11847:10;;11821:37;;;11802:3;11821:37;;;;;;;;;;;;;;;;;;;;;;;11903:12;;11874:42;;;;;;;;;;;;;;;;;;;;;;;;;11587:337;;:::o;11936:342::-;12015:41;12033:10;;12045;12015:17;:41::i;:::-;12002:10;:54;12100:12;;12082:43;;12114:10;12082:17;:43::i
Swarm Source
ipfs://102c037189cfae2c31b32ce47263db557a3b36c267ec86bca1834fab756d6611
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,388.74 | 0.0151 | $36.1 |
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.