ERC-20
Overview
Max Total Supply
1,257,472.368223275721381839 ARTIDS
Holders
39
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
50,000 ARTIDSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x4aab76C4...128E2Af6f The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
StokrToken
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-01-30 */ pragma solidity 0.5.12; /// @title SafeMath /// @dev Math operations with safety checks that throw on error library SafeMath { /// @dev Add two integers function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } /// @dev Subtract two integers function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } /// @dev Multiply tow integers function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } /// @dev Floor divide two integers function div(uint a, uint b) internal pure returns (uint) { return a / b; } } // File: contracts/ownership/Ownable.sol pragma solidity 0.5.12; /// @title Ownable /// @dev Provide a simple access control with a single authority: the owner contract Ownable { // Ethereum address of current owner address public owner; // Ethereum address of the next owner // (has to claim ownership first to become effective owner) address public newOwner; // @dev Log event on ownership transferred // @param previousOwner Ethereum address of previous owner // @param newOwner Ethereum address of new owner event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /// @dev Forbid call by anyone but owner modifier onlyOwner() { require(msg.sender == owner, "Restricted to owner"); _; } /// @dev Deployer account becomes initial owner constructor() public { owner = msg.sender; } /// @dev Transfer ownership to a new Ethereum account (safe method) /// Note: the new owner has to claim his ownership to become effective owner. /// @param _newOwner Ethereum address to transfer ownership to function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0x0), "New owner is zero"); newOwner = _newOwner; } /// @dev Transfer ownership to a new Ethereum account (unsafe method) /// Note: It's strongly recommended to use the safe variant via transferOwnership /// and claimOwnership, to prevent accidental transfers to a wrong address. /// @param _newOwner Ethereum address to transfer ownership to function transferOwnershipUnsafe(address _newOwner) public onlyOwner { require(_newOwner != address(0x0), "New owner is zero"); _transferOwnership(_newOwner); } /// @dev Become effective owner (if dedicated so by previous owner) function claimOwnership() public { require(msg.sender == newOwner, "Restricted to new owner"); _transferOwnership(msg.sender); } /// @dev Transfer ownership (internal method) /// @param _newOwner Ethereum address to transfer ownership to function _transferOwnership(address _newOwner) private { if (_newOwner != owner) { emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } newOwner = address(0x0); } } // File: contracts/whitelist/Whitelist.sol pragma solidity 0.5.12; /// @title Whitelist /// @author STOKR contract Whitelist is Ownable { // Set of admins mapping(address => bool) public admins; // Set of Whitelisted addresses mapping(address => bool) public isWhitelisted; /// @dev Log entry on admin added to set /// @param admin An Ethereum address event AdminAdded(address indexed admin); /// @dev Log entry on admin removed from set /// @param admin An Ethereum address event AdminRemoved(address indexed admin); /// @dev Log entry on investor added set /// @param admin An Ethereum address /// @param investor An Ethereum address event InvestorAdded(address indexed admin, address indexed investor); /// @dev Log entry on investor removed from set /// @param admin An Ethereum address /// @param investor An Ethereum address event InvestorRemoved(address indexed admin, address indexed investor); /// @dev Only admin modifier onlyAdmin() { require(admins[msg.sender], "Restricted to whitelist admin"); _; } /// @dev Add admin to set /// @param _admin An Ethereum address function addAdmin(address _admin) public onlyOwner { require(_admin != address(0x0), "Whitelist admin is zero"); if (!admins[_admin]) { admins[_admin] = true; emit AdminAdded(_admin); } } /// @dev Remove admin from set /// @param _admin An Ethereum address function removeAdmin(address _admin) public onlyOwner { require(_admin != address(0x0), "Whitelist admin is zero"); // Necessary? if (admins[_admin]) { admins[_admin] = false; emit AdminRemoved(_admin); } } /// @dev Add investor to set of whitelisted addresses /// @param _investors A list where each entry is an Ethereum address function addToWhitelist(address[] calldata _investors) external onlyAdmin { for (uint256 i = 0; i < _investors.length; i++) { if (!isWhitelisted[_investors[i]]) { isWhitelisted[_investors[i]] = true; emit InvestorAdded(msg.sender, _investors[i]); } } } /// @dev Remove investor from set of whitelisted addresses /// @param _investors A list where each entry is an Ethereum address function removeFromWhitelist(address[] calldata _investors) external onlyAdmin { for (uint256 i = 0; i < _investors.length; i++) { if (isWhitelisted[_investors[i]]) { isWhitelisted[_investors[i]] = false; emit InvestorRemoved(msg.sender, _investors[i]); } } } } // File: contracts/whitelist/Whitelisted.sol pragma solidity 0.5.12; /// @title Whitelisted /// @author STOKR contract Whitelisted is Ownable { Whitelist public whitelist; /// @dev Log entry on change of whitelist contract instance /// @param previous Ethereum address of previous whitelist /// @param current Ethereum address of new whitelist event WhitelistChange(address indexed previous, address indexed current); /// @dev Ensure only whitelisted addresses can call modifier onlyWhitelisted(address _address) { require(whitelist.isWhitelisted(_address), "Address is not whitelisted"); _; } /// @dev Constructor /// @param _whitelist address of whitelist contract constructor(Whitelist _whitelist) public { setWhitelist(_whitelist); } /// @dev Set the address of whitelist /// @param _newWhitelist An Ethereum address function setWhitelist(Whitelist _newWhitelist) public onlyOwner { require(address(_newWhitelist) != address(0x0), "Whitelist address is zero"); if (address(_newWhitelist) != address(whitelist)) { emit WhitelistChange(address(whitelist), address(_newWhitelist)); whitelist = Whitelist(_newWhitelist); } } } // File: contracts/token/ERC20.sol pragma solidity 0.5.12; /// @title ERC20 interface /// @dev see https://github.com/ethereum/EIPs/issues/20 interface ERC20 { event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); function totalSupply() external view returns (uint); function balanceOf(address _owner) external view returns (uint); function allowance(address _owner, address _spender) external view returns (uint); function approve(address _spender, uint _value) external returns (bool); function transfer(address _to, uint _value) external returns (bool); function transferFrom(address _from, address _to, uint _value) external returns (bool); } // File: contracts/token/ProfitSharing.sol pragma solidity 0.5.12; /// @title ProfitSharing /// @author STOKR contract ProfitSharing is Ownable { using SafeMath for uint; // An InvestorAccount object keeps track of the investor's // - balance: amount of tokens he/she holds (always up-to-date) // - profitShare: amount of wei this token owed him/her at the last update // - lastTotalProfits: determines when his/her profitShare was updated // Note, this construction requires: // - totalProfits to never decrease // - totalSupply to be fixed // - profitShare of all involved parties to get updated prior to any token transfer // - lastTotalProfits to be set to current totalProfits upon profitShare update struct InvestorAccount { uint balance; // token balance uint lastTotalProfits; // totalProfits [wei] at the time of last profit share update uint profitShare; // profit share [wei] of last update } // Investor account database mapping(address => InvestorAccount) public accounts; // Authority who is allowed to deposit profits [wei] on this address public profitDepositor; // Authority who is allowed to distribute profit shares [wei] to investors // (so, that they don't need to withdraw it by themselves) address public profitDistributor; // Amount of total profits [wei] stored to this token // In contrast to the wei balance (which may be reduced due to profit share withdrawal) // this value will never decrease uint public totalProfits; // As long as the total supply isn't fixed, i.e. new tokens can appear out of thin air, // the investors' profit shares aren't determined bool public totalSupplyIsFixed; // Total amount of tokens uint internal totalSupply_; /// @dev Log entry on change of profit deposit authority /// @param previous Ethereum address of previous profit depositor /// @param current Ethereum address of new profit depositor event ProfitDepositorChange( address indexed previous, address indexed current ); /// @dev Log entry on change of profit distribution authority /// @param previous Ethereum address of previous profit distributor /// @param current Ethereum address of new profit distributor event ProfitDistributorChange( address indexed previous, address indexed current ); /// @dev Log entry on profit deposit /// @param depositor Profit depositor's address /// @param amount Deposited profits in wei event ProfitDeposit( address indexed depositor, uint amount ); /// @dev Log entry on profit share update /// @param investor Investor's address /// @param amount New wei amount the token owes the investor event ProfitShareUpdate( address indexed investor, uint amount ); /// @dev Log entry on profit withdrawal /// @param investor Investor's address /// @param amount Wei amount the investor withdrew from this token event ProfitShareWithdrawal( address indexed investor, address indexed beneficiary, uint amount ); /// @dev Restrict operation to profit deposit authority only modifier onlyProfitDepositor() { require(msg.sender == profitDepositor, "Restricted to profit depositor"); _; } /// @dev Restrict operation to profit distribution authority only modifier onlyProfitDistributor() { require(msg.sender == profitDistributor, "Restricted to profit distributor"); _; } /// @dev Restrict operation to when total supply doesn't change anymore modifier onlyWhenTotalSupplyIsFixed() { require(totalSupplyIsFixed, "Total supply may change"); _; } /// @dev Constructor /// @param _profitDepositor Profit deposit authority constructor(address _profitDepositor, address _profitDistributor) public { setProfitDepositor(_profitDepositor); setProfitDistributor(_profitDistributor); } /// @dev Profit deposit if possible via fallback function function () external payable { require(msg.data.length == 0, "Fallback call with data"); depositProfit(); } /// @dev Change profit depositor /// @param _newProfitDepositor An Ethereum address function setProfitDepositor(address _newProfitDepositor) public onlyOwner { require(_newProfitDepositor != address(0x0), "New profit depositor is zero"); if (_newProfitDepositor != profitDepositor) { emit ProfitDepositorChange(profitDepositor, _newProfitDepositor); profitDepositor = _newProfitDepositor; } } /// @dev Change profit distributor /// @param _newProfitDistributor An Ethereum address function setProfitDistributor(address _newProfitDistributor) public onlyOwner { require(_newProfitDistributor != address(0x0), "New profit distributor is zero"); if (_newProfitDistributor != profitDistributor) { emit ProfitDistributorChange(profitDistributor, _newProfitDistributor); profitDistributor = _newProfitDistributor; } } /// @dev Deposit profit function depositProfit() public payable onlyProfitDepositor onlyWhenTotalSupplyIsFixed { require(totalSupply_ > 0, "Total supply is zero"); totalProfits = totalProfits.add(msg.value); emit ProfitDeposit(msg.sender, msg.value); } /// @dev Profit share owing /// @param _investor An Ethereum address /// @return A positive number function profitShareOwing(address _investor) public view returns (uint) { if (!totalSupplyIsFixed || totalSupply_ == 0) { return 0; } InvestorAccount memory account = accounts[_investor]; return totalProfits.sub(account.lastTotalProfits) .mul(account.balance) .div(totalSupply_) .add(account.profitShare); } /// @dev Update profit share /// @param _investor An Ethereum address function updateProfitShare(address _investor) public onlyWhenTotalSupplyIsFixed { uint newProfitShare = profitShareOwing(_investor); accounts[_investor].lastTotalProfits = totalProfits; accounts[_investor].profitShare = newProfitShare; emit ProfitShareUpdate(_investor, newProfitShare); } /// @dev Withdraw profit share function withdrawProfitShare() public { _withdrawProfitShare(msg.sender, msg.sender); } function withdrawProfitShareTo(address payable _beneficiary) public { _withdrawProfitShare(msg.sender, _beneficiary); } /// @dev Withdraw profit share function withdrawProfitShares(address payable[] calldata _investors) external onlyProfitDistributor { for (uint i = 0; i < _investors.length; ++i) { _withdrawProfitShare(_investors[i], _investors[i]); } } /// @dev Withdraw profit share function _withdrawProfitShare(address _investor, address payable _beneficiary) internal { updateProfitShare(_investor); uint withdrawnProfitShare = accounts[_investor].profitShare; accounts[_investor].profitShare = 0; _beneficiary.transfer(withdrawnProfitShare); emit ProfitShareWithdrawal(_investor, _beneficiary, withdrawnProfitShare); } } // File: contracts/token/MintableToken.sol pragma solidity 0.5.12; /// @title MintableToken /// @author STOKR /// @dev Extension of the ERC20 compliant ProfitSharing Token /// that allows the creation of tokens via minting for a /// limited time period (until minting gets finished). contract MintableToken is ERC20, ProfitSharing, Whitelisted { address public minter; uint public numberOfInvestors = 0; /// @dev Log entry on mint /// @param to Beneficiary who received the newly minted tokens /// @param amount The amount of minted token units event Minted(address indexed to, uint amount); /// @dev Log entry on mint finished event MintFinished(); /// @dev Restrict an operation to be callable only by the minter modifier onlyMinter() { require(msg.sender == minter, "Restricted to minter"); _; } /// @dev Restrict an operation to be executable only while minting was not finished modifier canMint() { require(!totalSupplyIsFixed, "Total supply has been fixed"); _; } /// @dev Set minter authority /// @param _minter Ethereum address of minter authority function setMinter(address _minter) public onlyOwner { require(minter == address(0x0), "Minter has already been set"); require(_minter != address(0x0), "Minter is zero"); minter = _minter; } /// @dev Mint tokens, i.e. create tokens out of thin air /// @param _to Beneficiary who will receive the newly minted tokens /// @param _amount The amount of minted token units function mint(address _to, uint _amount) public onlyMinter canMint onlyWhitelisted(_to) { if (accounts[_to].balance == 0) { numberOfInvestors++; } totalSupply_ = totalSupply_.add(_amount); accounts[_to].balance = accounts[_to].balance.add(_amount); emit Minted(_to, _amount); emit Transfer(address(0x0), _to, _amount); } /// @dev Finish minting -- this should be irreversible function finishMinting() public onlyMinter canMint { totalSupplyIsFixed = true; emit MintFinished(); } } // File: contracts/crowdsale/RateSourceInterface.sol pragma solidity 0.5.12; /// @title RateSource /// @author STOKR interface RateSource { /// @dev The current price of an Ether in EUR cents /// @return Current ether rate function etherRate() external view returns (uint); } // File: contracts/crowdsale/MintingCrowdsale.sol pragma solidity 0.5.12; /// @title MintingCrowdsale /// @author STOKR contract MintingCrowdsale is Ownable { using SafeMath for uint; // Maximum Time of offering period after extension uint constant MAXOFFERINGPERIOD = 80 days; // Ether rate oracle contract providing the price of an Ether in EUR cents RateSource public rateSource; // The token to be sold // In the following, the term "token unit" always refers to the smallest // and non-divisible quantum. Thus, token unit amounts are always integers. // One token is expected to consist of 10^18 token units. MintableToken public token; // Token amounts in token units // The public and the private sale are both capped (i.e. two distinct token pools) // The tokenRemaining variables keep track of how many token units are available // for the respective type of sale uint public tokenCapOfPublicSale; uint public tokenCapOfPrivateSale; uint public tokenRemainingForPublicSale; uint public tokenRemainingForPrivateSale; // Prices are in Euro cents (i.e. 1/100 EUR) uint public tokenPrice; // The minimum amount of tokens a purchaser has to buy via one transaction uint public tokenPurchaseMinimum; // The maximum total amount of tokens a purchaser may buy during start phase uint public tokenPurchaseLimit; // Total token purchased by investor (while purchase amount is limited) mapping(address => uint) public tokenPurchased; // Public sale period uint public openingTime; uint public closingTime; uint public limitEndTime; // Ethereum address where invested funds will be transferred to address payable public companyWallet; // Amount and receiver of reserved tokens uint public tokenReservePerMill; address public reserveAccount; // Wether this crowdsale was finalized or not bool public isFinalized = false; /// @dev Log entry upon token distribution event /// @param beneficiary Ethereum address of token recipient /// @param amount Number of token units /// @param isPublicSale Whether the distribution was via public sale event TokenDistribution(address indexed beneficiary, uint amount, bool isPublicSale); /// @dev Log entry upon token purchase event /// @param buyer Ethereum address of token purchaser /// @param value Worth in wei of purchased token amount /// @param amount Number of token units event TokenPurchase(address indexed buyer, uint value, uint amount); /// @dev Log entry upon rate change event /// @param previous Previous closing time of sale /// @param current Current closing time of sale event ClosingTimeChange(uint previous, uint current); /// @dev Log entry upon finalization event event Finalization(); /// @dev Constructor /// @param _rateSource Ether rate oracle contract /// @param _token The token to be sold /// @param _tokenCapOfPublicSale Maximum number of token units to mint in public sale /// @param _tokenCapOfPrivateSale Maximum number of token units to mint in private sale /// @param _tokenPurchaseMinimum Minimum amount of tokens an investor has to buy at once /// @param _tokenPurchaseLimit Maximum total token amounts individually buyable in limit phase /// @param _tokenPrice Price of a token in EUR cent /// @param _openingTime Block (Unix) timestamp of sale opening time /// @param _closingTime Block (Unix) timestamp of sale closing time /// @param _limitEndTime Block (Unix) timestamp until token purchases are limited /// @param _companyWallet Ethereum account who will receive sent ether /// @param _tokenReservePerMill Per mill amount of sold tokens to mint for reserve account /// @param _reserveAccount Ethereum address of reserve tokens recipient constructor( RateSource _rateSource, MintableToken _token, uint _tokenCapOfPublicSale, uint _tokenCapOfPrivateSale, uint _tokenPurchaseMinimum, uint _tokenPurchaseLimit, uint _tokenReservePerMill, uint _tokenPrice, uint _openingTime, uint _closingTime, uint _limitEndTime, address payable _companyWallet, address _reserveAccount ) public { require(address(_rateSource) != address(0x0), "Rate source is zero"); require(address(_token) != address(0x0), "Token address is zero"); require(_token.minter() == address(0x0), "Token has another minter"); require(_tokenCapOfPublicSale > 0, "Cap of public sale is zero"); require(_tokenCapOfPrivateSale > 0, "Cap of private sale is zero"); require(_tokenPurchaseMinimum <= _tokenCapOfPublicSale && _tokenPurchaseMinimum <= _tokenCapOfPrivateSale, "Purchase minimum exceeds cap"); require(_tokenPrice > 0, "Token price is zero"); require(_openingTime >= now, "Opening lies in the past"); require(_closingTime >= _openingTime, "Closing lies before opening"); require(_companyWallet != address(0x0), "Company wallet is zero"); require(_reserveAccount != address(0x0), "Reserve account is zero"); // Note: There are no time related requirements regarding limitEndTime. // If it's below openingTime, token purchases will never be limited. // If it's above closingTime, token purchases will always be limited. if (_limitEndTime > _openingTime) { // But, if there's a purchase limitation phase, the limit must be at // least the purchase minimum or above to make purchases possible. require(_tokenPurchaseLimit >= _tokenPurchaseMinimum, "Purchase limit is below minimum"); } // Utilize safe math to ensure the sum of three token pools does't overflow _tokenCapOfPublicSale.add(_tokenCapOfPrivateSale).mul(_tokenReservePerMill); rateSource = _rateSource; token = _token; tokenCapOfPublicSale = _tokenCapOfPublicSale; tokenCapOfPrivateSale = _tokenCapOfPrivateSale; tokenPurchaseMinimum = _tokenPurchaseMinimum; tokenPurchaseLimit= _tokenPurchaseLimit; tokenReservePerMill = _tokenReservePerMill; tokenPrice = _tokenPrice; openingTime = _openingTime; closingTime = _closingTime; limitEndTime = _limitEndTime; companyWallet = _companyWallet; reserveAccount = _reserveAccount; tokenRemainingForPublicSale = _tokenCapOfPublicSale; tokenRemainingForPrivateSale = _tokenCapOfPrivateSale; } /// @dev Fallback function: buys tokens function () external payable { require(msg.data.length == 0, "Fallback call with data"); buyTokens(); } /// @dev Distribute tokens purchased off-chain via public sale /// Note: additional requirements are enforced in internal function. /// @param beneficiaries List of recipients' Ethereum addresses /// @param amounts List of token units each recipient will receive function distributeTokensViaPublicSale( address[] memory beneficiaries, uint[] memory amounts ) public { tokenRemainingForPublicSale = distributeTokens(tokenRemainingForPublicSale, beneficiaries, amounts, true); } /// @dev Distribute tokens purchased off-chain via private sale /// Note: additional requirements are enforced in internal function. /// @param beneficiaries List of recipients' Ethereum addresses /// @param amounts List of token units each recipient will receive function distributeTokensViaPrivateSale( address[] memory beneficiaries, uint[] memory amounts ) public { tokenRemainingForPrivateSale = distributeTokens(tokenRemainingForPrivateSale, beneficiaries, amounts, false); } /// @dev Check whether the sale has closed /// @return True iff sale closing time has passed function hasClosed() public view returns (bool) { return now >= closingTime; } /// @dev Check wether the sale is open /// @return True iff sale opening time has passed and sale is not closed yet function isOpen() public view returns (bool) { return now >= openingTime && !hasClosed(); } /// @dev Determine the remaining open time of sale /// @return Time in seconds until sale gets closed, or 0 if sale was closed function timeRemaining() public view returns (uint) { if (hasClosed()) { return 0; } return closingTime - now; } /// @dev Determine the amount of sold tokens (off-chain and on-chain) /// @return Token units amount function tokenSold() public view returns (uint) { return (tokenCapOfPublicSale - tokenRemainingForPublicSale) + (tokenCapOfPrivateSale - tokenRemainingForPrivateSale); } /// @dev Purchase tokens function buyTokens() public payable { require(isOpen(), "Sale is not open"); uint etherRate = rateSource.etherRate(); require(etherRate > 0, "Ether rate is zero"); // Units: [1e-18*ether] * [cent/ether] / [cent/token] => [1e-18*token] uint amount = msg.value.mul(etherRate).div(tokenPrice); require(amount <= tokenRemainingForPublicSale, "Not enough tokens available"); require(amount >= tokenPurchaseMinimum, "Investment is too low"); // Is the total amount an investor can purchase with Ether limited? if (now < limitEndTime) { uint purchased = tokenPurchased[msg.sender].add(amount); require(purchased <= tokenPurchaseLimit, "Purchase limit reached"); tokenPurchased[msg.sender] = purchased; } tokenRemainingForPublicSale = tokenRemainingForPublicSale.sub(amount); token.mint(msg.sender, amount); forwardFunds(); emit TokenPurchase(msg.sender, msg.value, amount); } /// @dev Extend the offering period of the crowd sale. /// @param _newClosingTime new closingTime of the crowdsale function changeClosingTime(uint _newClosingTime) public onlyOwner { require(!hasClosed(), "Sale has already ended"); require(_newClosingTime > now, "ClosingTime not in the future"); require(_newClosingTime > openingTime, "New offering is zero"); require(_newClosingTime - openingTime <= MAXOFFERINGPERIOD, "New offering too long"); emit ClosingTimeChange(closingTime, _newClosingTime); closingTime = _newClosingTime; } /// @dev Finalize, i.e. end token minting phase and enable token transfers function finalize() public onlyOwner { require(!isFinalized, "Sale has already been finalized"); require(hasClosed(), "Sale has not closed"); if (tokenReservePerMill > 0) { token.mint(reserveAccount, tokenSold().mul(tokenReservePerMill).div(1000)); } token.finishMinting(); isFinalized = true; emit Finalization(); } /// @dev Distribute tokens purchased off-chain (in Euro) to investors /// @param tokenRemaining Token units available for sale /// @param beneficiaries Ethereum addresses of purchasers /// @param amounts Token unit amounts to deliver to each investor /// @return Token units available for sale after distribution function distributeTokens( uint tokenRemaining, address[] memory beneficiaries, uint[] memory amounts, bool isPublicSale ) internal onlyOwner returns (uint) { require(!isFinalized, "Sale has been finalized"); require(beneficiaries.length == amounts.length, "Lengths are different"); for (uint i = 0; i < beneficiaries.length; ++i) { address beneficiary = beneficiaries[i]; uint amount = amounts[i]; require(amount <= tokenRemaining, "Not enough tokens available"); tokenRemaining = tokenRemaining.sub(amount); token.mint(beneficiary, amount); emit TokenDistribution(beneficiary, amount, isPublicSale); } return tokenRemaining; } /// @dev Forward invested ether to company wallet function forwardFunds() internal { companyWallet.transfer(address(this).balance); } } // File: contracts/token/TokenRecoverable.sol pragma solidity 0.5.12; /// @title TokenRecoverable /// @author STOKR contract TokenRecoverable is Ownable { // Address that can do the TokenRecovery address public tokenRecoverer; /// @dev Event emitted when the TokenRecoverer changes /// @param previous Ethereum address of previous token recoverer /// @param current Ethereum address of new token recoverer event TokenRecovererChange(address indexed previous, address indexed current); /// @dev Event emitted in case of a TokenRecovery /// @param oldAddress Ethereum address of old account /// @param newAddress Ethereum address of new account event TokenRecovery(address indexed oldAddress, address indexed newAddress); /// @dev Restrict operation to token recoverer modifier onlyTokenRecoverer() { require(msg.sender == tokenRecoverer, "Restricted to token recoverer"); _; } /// @dev Constructor /// @param _tokenRecoverer Ethereum address of token recoverer constructor(address _tokenRecoverer) public { setTokenRecoverer(_tokenRecoverer); } /// @dev Set token recoverer /// @param _newTokenRecoverer Ethereum address of new token recoverer function setTokenRecoverer(address _newTokenRecoverer) public onlyOwner { require(_newTokenRecoverer != address(0x0), "New token recoverer is zero"); if (_newTokenRecoverer != tokenRecoverer) { emit TokenRecovererChange(tokenRecoverer, _newTokenRecoverer); tokenRecoverer = _newTokenRecoverer; } } /// @dev Recover token /// @param _oldAddress address /// @param _newAddress address function recoverToken(address _oldAddress, address _newAddress) public; } // File: contracts/token/StokrToken.sol pragma solidity 0.5.12; /// @title StokrToken /// @author Stokr contract StokrToken is MintableToken, TokenRecoverable { string public name; string public symbol; uint8 public constant decimals = 18; mapping(address => mapping(address => uint)) internal allowance_; /// @dev Log entry on self destruction of the token event TokenDestroyed(); /// @dev Constructor /// @param _whitelist Ethereum address of whitelist contract /// @param _tokenRecoverer Ethereum address of token recoverer constructor( string memory _name, string memory _symbol, Whitelist _whitelist, address _profitDepositor, address _profitDistributor, address _tokenRecoverer ) public Whitelisted(_whitelist) ProfitSharing(_profitDepositor, _profitDistributor) TokenRecoverable(_tokenRecoverer) { name = _name; symbol = _symbol; } /// @dev Self destruct can only be called by crowdsale contract in case the goal wasn't reached function destruct() public onlyMinter { emit TokenDestroyed(); selfdestruct(address(uint160(owner))); } /// @dev Recover token /// @param _oldAddress address of old account /// @param _newAddress address of new account function recoverToken(address _oldAddress, address _newAddress) public onlyTokenRecoverer onlyWhitelisted(_newAddress) { // Ensure that new address is *not* an existing account. // Check for account.profitShare is not needed because of following implication: // (account.lastTotalProfits == 0) ==> (account.profitShare == 0) require(accounts[_newAddress].balance == 0 && accounts[_newAddress].lastTotalProfits == 0, "New address exists already"); updateProfitShare(_oldAddress); accounts[_newAddress] = accounts[_oldAddress]; delete accounts[_oldAddress]; emit TokenRecovery(_oldAddress, _newAddress); emit Transfer(_oldAddress, _newAddress, accounts[_newAddress].balance); } /// @dev Total supply of this token /// @return Token amount function totalSupply() public view returns (uint) { return totalSupply_; } /// @dev Token balance /// @param _investor Ethereum address of token holder /// @return Token amount function balanceOf(address _investor) public view returns (uint) { return accounts[_investor].balance; } /// @dev Allowed token amount a third party trustee may transfer /// @param _investor Ethereum address of token holder /// @param _spender Ethereum address of third party /// @return Allowed token amount function allowance(address _investor, address _spender) public view returns (uint) { return allowance_[_investor][_spender]; } /// @dev Approve a third party trustee to transfer tokens /// Note: additional requirements are enforced within internal function. /// @param _spender Ethereum address of third party /// @param _value Maximum token amount that is allowed to get transferred /// @return Always true function approve(address _spender, uint _value) public returns (bool) { return _approve(msg.sender, _spender, _value); } /// @dev Increase the amount of tokens a third party trustee may transfer /// Note: additional requirements are enforces within internal function. /// @param _spender Ethereum address of third party /// @param _amount Additional token amount that is allowed to get transferred /// @return Always true function increaseAllowance(address _spender, uint _amount) public returns (bool) { require(allowance_[msg.sender][_spender] + _amount >= _amount, "Allowance overflow"); return _approve(msg.sender, _spender, allowance_[msg.sender][_spender].add(_amount)); } /// @dev Decrease the amount of tokens a third party trustee may transfer /// Note: additional requirements are enforces within internal function. /// @param _spender Ethereum address of third party /// @param _amount Reduced token amount that is allowed to get transferred /// @return Always true function decreaseAllowance(address _spender, uint _amount) public returns (bool) { require(_amount <= allowance_[msg.sender][_spender], "Amount exceeds allowance"); return _approve(msg.sender, _spender, allowance_[msg.sender][_spender].sub(_amount)); } /// @dev Check if a token transfer is possible /// @param _from Ethereum address of token sender /// @param _to Ethereum address of token recipient /// @param _value Token amount to transfer /// @return True iff a transfer with given pramaters would succeed function canTransfer(address _from, address _to, uint _value) public view returns (bool) { return totalSupplyIsFixed && _from != address(0x0) && _to != address(0x0) && _value <= accounts[_from].balance && whitelist.isWhitelisted(_from) && whitelist.isWhitelisted(_to); } /// @dev Check if a token transfer by third party is possible /// @param _spender Ethereum address of third party trustee /// @param _from Ethereum address of token holder /// @param _to Ethereum address of token recipient /// @param _value Token amount to transfer /// @return True iff a transfer with given pramaters would succeed function canTransferFrom(address _spender, address _from, address _to, uint _value) public view returns (bool) { return canTransfer(_from, _to, _value) && _value <= allowance_[_from][_spender]; } /// @dev Token transfer /// Note: additional requirements are enforces within internal function. /// @param _to Ethereum address of token recipient /// @param _value Token amount to transfer /// @return Always true function transfer(address _to, uint _value) public returns (bool) { return _transfer(msg.sender, _to, _value); } /// @dev Token transfer by a third party /// Note: additional requirements are enforces within internal function. /// @param _from Ethereum address of token holder /// @param _to Ethereum address of token recipient /// @param _value Token amount to transfer /// @return Always true function transferFrom(address _from, address _to, uint _value) public returns (bool) { require(_value <= allowance_[_from][msg.sender], "Amount exceeds allowance"); return _approve(_from, msg.sender, allowance_[_from][msg.sender].sub(_value)) && _transfer(_from, _to, _value); } /// @dev Approve a third party trustee to transfer tokens (internal implementation) /// @param _from Ethereum address of token holder /// @param _spender Ethereum address of third party /// @param _value Maximum token amount the trustee is allowed to transfer /// @return Always true function _approve(address _from, address _spender, uint _value) internal onlyWhitelisted(_from) onlyWhenTotalSupplyIsFixed returns (bool) { allowance_[_from][_spender] = _value; emit Approval(_from, _spender, _value); return true; } /// @dev Token transfer (internal implementation) /// @param _from Ethereum address of token sender /// @param _to Ethereum address of token recipient /// @param _value Token amount to transfer /// @return Always true function _transfer(address _from, address _to, uint _value) internal onlyWhitelisted(_from) onlyWhitelisted(_to) onlyWhenTotalSupplyIsFixed returns (bool) { require(_to != address(0x0), "Recipient is zero"); require(_value <= accounts[_from].balance, "Amount exceeds balance"); updateProfitShare(_from); updateProfitShare(_to); accounts[_from].balance = accounts[_from].balance.sub(_value); accounts[_to].balance = accounts[_to].balance.add(_value); emit Transfer(_from, _to, _value); return true; } } // File: contracts/crowdsale/StokrCrowdsale.sol pragma solidity 0.5.12; /// @title StokrCrowdsale /// @author STOKR contract StokrCrowdsale is MintingCrowdsale { // Soft cap in token units uint public tokenGoal; // As long as the goal is not reached funds of purchases are held back // and investments are assigned to investors here to enable a refunding // if the goal is missed upon finalization mapping(address => uint) public investments; // Log entry upon investor refund event event InvestorRefund(address indexed investor, uint value); /// @dev Constructor /// @param _token The token /// @param _tokenCapOfPublicSale Available token units for public sale /// @param _tokenCapOfPrivateSale Available token units for private sale /// @param _tokenGoal Minimum number of sold token units to be successful /// @param _tokenPurchaseMinimum Minimum amount of tokens an investor has to buy at once /// @param _tokenPurchaseLimit Maximum total token amounts individually buyable in limit phase /// @param _tokenReservePerMill Additional reserve tokens in per mill of sold tokens /// @param _tokenPrice Price of a token in EUR cent /// @param _rateSource Ethereum address of ether rate setting authority /// @param _openingTime Block (Unix) timestamp of sale opening time /// @param _closingTime Block (Unix) timestamp of sale closing time /// @param _limitEndTime Block (Unix) timestamp until token purchases are limited /// @param _companyWallet Ethereum account who will receive sent ether /// @param _reserveAccount An address constructor( RateSource _rateSource, StokrToken _token, uint _tokenCapOfPublicSale, uint _tokenCapOfPrivateSale, uint _tokenGoal, uint _tokenPurchaseMinimum, uint _tokenPurchaseLimit, uint _tokenReservePerMill, uint _tokenPrice, uint _openingTime, uint _closingTime, uint _limitEndTime, address payable _companyWallet, address _reserveAccount ) public MintingCrowdsale( _rateSource, _token, _tokenCapOfPublicSale, _tokenCapOfPrivateSale, _tokenPurchaseMinimum, _tokenPurchaseLimit, _tokenReservePerMill, _tokenPrice, _openingTime, _closingTime, _limitEndTime, _companyWallet, _reserveAccount ) { require( _tokenGoal <= _tokenCapOfPublicSale + _tokenCapOfPrivateSale, "Goal is not attainable" ); tokenGoal = _tokenGoal; } /// @dev Wether the goal of sold tokens was reached or not /// @return True if the sale can be considered successful function goalReached() public view returns (bool) { return tokenSold() >= tokenGoal; } /// @dev Investors can claim refunds here if crowdsale was unsuccessful function distributeRefunds(address payable[] calldata _investors) external { for (uint i = 0; i < _investors.length; ++i) { refundInvestor(_investors[i]); } } /// @dev Investors can claim refunds here if crowdsale was unsuccessful function claimRefund() public { refundInvestor(msg.sender); } /// @dev Overwritten. Kill the token if goal was missed function finalize() public onlyOwner { super.finalize(); if (!goalReached()) { StokrToken(address(token)).destruct(); } } function distributeTokensViaPublicSale( address[] memory beneficiaries, uint[] memory amounts ) public { super.distributeTokensViaPublicSale(beneficiaries, amounts); // The goal may get reached due to token distribution, // so forward any accumulated funds to the company wallet. forwardFunds(); } function distributeTokensViaPrivateSale( address[] memory beneficiaries, uint[] memory amounts ) public { super.distributeTokensViaPrivateSale(beneficiaries, amounts); // The goal may get reached due to token distribution, // so forward any accumulated funds to the company wallet. forwardFunds(); } /// @dev Overwritten. Funds are held back until goal was reached function forwardFunds() internal { if (goalReached()) { super.forwardFunds(); } else { investments[msg.sender] = investments[msg.sender].add(msg.value); } } /// @dev Refund an investor if the sale was not successful /// @param _investor Ethereum address of investor function refundInvestor(address payable _investor) internal { require(isFinalized, "Sale has not been finalized"); require(!goalReached(), "Goal was reached"); uint investment = investments[_investor]; if (investment > 0) { investments[_investor] = 0; _investor.transfer(investment); emit InvestorRefund(_investor, investment); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"contract Whitelist","name":"_whitelist","type":"address"},{"internalType":"address","name":"_profitDepositor","type":"address"},{"internalType":"address","name":"_profitDistributor","type":"address"},{"internalType":"address","name":"_tokenRecoverer","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProfitDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"current","type":"address"}],"name":"ProfitDepositorChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"current","type":"address"}],"name":"ProfitDistributorChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProfitShareUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"investor","type":"address"},{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProfitShareWithdrawal","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenDestroyed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"current","type":"address"}],"name":"TokenRecovererChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"TokenRecovery","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"current","type":"address"}],"name":"WhitelistChange","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accounts","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"lastTotalProfits","type":"uint256"},{"internalType":"uint256","name":"profitShare","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_investor","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_investor","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"canTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"canTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"depositProfit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"destruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numberOfInvestors","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"profitDepositor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"profitDistributor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_investor","type":"address"}],"name":"profitShareOwing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_oldAddress","type":"address"},{"internalType":"address","name":"_newAddress","type":"address"}],"name":"recoverToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newProfitDepositor","type":"address"}],"name":"setProfitDepositor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newProfitDistributor","type":"address"}],"name":"setProfitDistributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newTokenRecoverer","type":"address"}],"name":"setTokenRecoverer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract Whitelist","name":"_newWhitelist","type":"address"}],"name":"setWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenRecoverer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalProfits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupplyIsFixed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnershipUnsafe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_investor","type":"address"}],"name":"updateProfitShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelist","outputs":[{"internalType":"contract Whitelist","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawProfitShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_beneficiary","type":"address"}],"name":"withdrawProfitShareTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable[]","name":"_investors","type":"address[]"}],"name":"withdrawProfitShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600a553480156200001657600080fd5b506040516200591238038062005912833981810160405260c08110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b838201915060208201858111156200007457600080fd5b82518660018202830111640100000000821117156200009257600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c8578082015181840152602081019050620000ab565b50505050905090810190601f168015620000f65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011a57600080fd5b838201915060208201858111156200013157600080fd5b82518660018202830111640100000000821117156200014f57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018557808201518184015260208101905062000168565b50505050905090810190601f168015620001b35780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919080519060200190929190805190602001909291908051906020019092919050505080848484336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200023a82620002af60201b60201c565b6200024b816200052d60201b60201c565b50506200025e81620007ab60201b60201c565b50620002708162000a2960201b60201c565b5085600c90805190602001906200028992919062000ca7565b5084600d9080519060200190620002a292919062000ca7565b5050505050505062000d56565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e65772070726f666974206465706f7369746f72206973207a65726f0000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146200052a578073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4fdc16b3739cf80464626c98a53f8eea115ac9f94694287afc84b9dd1102cc2860405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620005f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e65772070726f666974206469737472696275746f72206973207a65726f000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620007a8578073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f024c8e1d8737257a61b74ae4e70b314f3dc339e5a5c43de51344fca0b393358660405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200086e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f57686974656c6973742061646472657373206973207a65726f0000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000a26578073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f10afc05abeac7c59bbc9efaa96af76388095ae1028cb85e59f676d20a7dbf64760405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000aec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000b90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e657720746f6b656e207265636f7665726572206973207a65726f000000000081525060200191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000ca4578073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff693c6449c4445af5f6bd9eaf2f1d405209024c25d65eb2321805553df1bb6a060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cea57805160ff191683800117855562000d1b565b8280016001018555821562000d1b579182015b8281111562000d1a57825182559160200191906001019062000cfd565b5b50905062000d2a919062000d2e565b5090565b62000d5391905b8082111562000d4f57600081600090555060010162000d35565b5090565b90565b614bac8062000d666000396000f3fe6080604052600436106102515760003560e01c8063854cff2f11610139578063b445abe1116100b6578063e46638e61161007a578063e46638e614610f08578063e77a14be14610f9b578063e86dde5614610fec578063f2fde38b1461101b578063fca3b5aa1461106c578063feaea586146110bd57610251565b8063b445abe114610d59578063bd998cb314610db0578063d4ee1d9014610ddb578063d9ad01c414610e32578063dd62ed3e14610e8357610251565b806395d89b41116100fd57806395d89b4114610b3b578063a457c2d714610bcb578063a824c9d214610c3e578063a9059cbb14610c8f578063b1efee8414610d0257610251565b8063854cff2f146109865780638d82eab8146109d75780638da5cb5b14610a3c578063924a96f014610a9357806393e59dc114610ae457610251565b80632b68b9c6116101d257806351213f481161019657806351213f48146107895780635e5c06e2146107da57806370a082311461084d5780637157797f146108b257806371d60d8f146109655780637d64bcb41461096f57610251565b80632b68b9c61461065c578063313ce5671461067357806339509351146106a457806340c10f19146107175780634e71e0c81461077257610251565b80631ac2765d116102195780631ac2765d146104705780631af2c9fd146104f65780631e4c2fe31461052157806323b872dd14610572578063268808c61461060557610251565b806306fdde03146102d45780630754617214610364578063095ea7b3146103bb57806318160ddd1461042e5780631aa8a09214610459575b600080369050146102ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f46616c6c6261636b2063616c6c2077697468206461746100000000000000000081525060200191505060405180910390fd5b6102d261112e565b005b3480156102e057600080fd5b506102e9611356565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561032957808201518184015260208101905061030e565b50505050905090810190601f1680156103565780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037057600080fd5b506103796113f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c757600080fd5b50610414600480360360408110156103de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141a565b604051808215151515815260200191505060405180910390f35b34801561043a57600080fd5b5061044361142f565b6040518082815260200191505060405180910390f35b34801561046557600080fd5b5061046e611439565b005b34801561047c57600080fd5b506104f46004803603602081101561049357600080fd5b81019080803590602001906401000000008111156104b057600080fd5b8201836020820111156104c257600080fd5b803590602001918460208302840111640100000000831117156104e457600080fd5b9091929391929390505050611445565b005b34801561050257600080fd5b5061050b611583565b6040518082815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611589565b005b34801561057e57600080fd5b506105eb6004803603606081101561059557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611596565b604051808215151515815260200191505060405180910390f35b34801561061157600080fd5b5061061a61173f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066857600080fd5b50610671611765565b005b34801561067f57600080fd5b5061068861188e565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106b057600080fd5b506106fd600480360360408110156106c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611893565b604051808215151515815260200191505060405180910390f35b34801561072357600080fd5b506107706004803603604081101561073a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a2a565b005b34801561077e57600080fd5b50610787611e8a565b005b34801561079557600080fd5b506107d8600480360360208110156107ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f58565b005b3480156107e657600080fd5b50610829600480360360208110156107fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121d3565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561085957600080fd5b5061089c6004803603602081101561087057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121fd565b6040518082815260200191505060405180910390f35b3480156108be57600080fd5b5061094b600480360360808110156108d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612249565b604051808215151515815260200191505060405180910390f35b61096d61112e565b005b34801561097b57600080fd5b506109846122e8565b005b34801561099257600080fd5b506109d5600480360360208110156109a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612477565b005b3480156109e357600080fd5b50610a26600480360360208110156109fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f2565b6040518082815260200191505060405180910390f35b348015610a4857600080fd5b50610a516127f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9f57600080fd5b50610ae260048036036020811015610ab657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612819565b005b348015610af057600080fd5b50610af9612a94565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4757600080fd5b50610b50612aba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b90578082015181840152602081019050610b75565b50505050905090810190601f168015610bbd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bd757600080fd5b50610c2460048036036040811015610bee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b58565b604051808215151515815260200191505060405180910390f35b348015610c4a57600080fd5b50610c8d60048036036020811015610c6157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ced565b005b348015610c9b57600080fd5b50610ce860048036036040811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e5e565b604051808215151515815260200191505060405180910390f35b348015610d0e57600080fd5b50610d17612e73565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6557600080fd5b50610d6e612e99565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dbc57600080fd5b50610dc5612ebf565b6040518082815260200191505060405180910390f35b348015610de757600080fd5b50610df0612ec5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e3e57600080fd5b50610e8160048036036020811015610e5557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eeb565b005b348015610e8f57600080fd5b50610ef260048036036040811015610ea657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613166565b6040518082815260200191505060405180910390f35b348015610f1457600080fd5b50610f8160048036036060811015610f2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131ed565b604051808215151515815260200191505060405180910390f35b348015610fa757600080fd5b50610fea60048036036020811015610fbe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348c565b005b348015610ff857600080fd5b506110016135fd565b604051808215151515815260200191505060405180910390f35b34801561102757600080fd5b5061106a6004803603602081101561103e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613610565b005b34801561107857600080fd5b506110bb6004803603602081101561108f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137b9565b005b3480156110c957600080fd5b5061112c600480360360408110156110e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a26565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f5265737472696374656420746f2070726f666974206465706f7369746f72000081525060200191505060405180910390fd5b600660009054906101000a900460ff16611273576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b6000600754116112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f74616c20737570706c79206973207a65726f00000000000000000000000081525060200191505060405180910390fd5b61130034600554613f4490919063ffffffff16565b6005819055503373ffffffffffffffffffffffffffffffffffffffff167f1ecaf5d6abf37d825612fa02d0f7a9db7b880595f4dbf94c8e645d2b1bee37d4346040518082815260200191505060405180910390a2565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ec5780601f106113c1576101008083540402835291602001916113ec565b820191906000526020600020905b8154815290600101906020018083116113cf57829003601f168201915b505050505081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611427338484613f60565b905092915050565b6000600754905090565b6114433333614223565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5265737472696374656420746f2070726f666974206469737472696275746f7281525060200191505060405180910390fd5b60008090505b8282905081101561157e5761157383838381811061152857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1684848481811061155157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614223565b80600101905061150e565b505050565b600a5481565b6115933382614223565b50565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561168a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f416d6f756e74206578636565647320616c6c6f77616e6365000000000000000081525060200191505060405180910390fd5b611723843361171e85600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436c90919063ffffffff16565b613f60565b80156117365750611735848484614383565b5b90509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5265737472696374656420746f206d696e74657200000000000000000000000081525060200191505060405180910390fd5b7f95581ace7737226d280f9814ae6267c15c73e513c71c48a432da5b991223891060405160405180910390a16000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b601281565b60008182600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011015611989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f416c6c6f77616e6365206f766572666c6f77000000000000000000000000000081525060200191505060405180910390fd5b611a223384611a1d85600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4490919063ffffffff16565b613f60565b905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5265737472696374656420746f206d696e74657200000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff1615611b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f74616c20737570706c7920686173206265656e206669786564000000000081525060200191505060405180910390fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1057600080fd5b505afa158015611c24573d6000803e3d6000fd5b505050506040513d6020811015611c3a57600080fd5b8101908080519060200190929190505050611cbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611d1b57600a600081548092919060010191905055505b611d3082600754613f4490919063ffffffff16565b600781905550611d8b82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613f4490919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508273ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5265737472696374656420746f206e6577206f776e657200000000000000000081525060200191505060405180910390fd5b611f56336149b6565b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e657720746f6b656e207265636f7665726572206973207a65726f000000000081525060200191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146121d0578073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff693c6449c4445af5f6bd9eaf2f1d405209024c25d65eb2321805553df1bb6a060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60006122568484846131ed565b80156122de5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211155b9050949350505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5265737472696374656420746f206d696e74657200000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff161561242e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f74616c20737570706c7920686173206265656e206669786564000000000081525060200191505060405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f57686974656c6973742061646472657373206973207a65726f0000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146126ef578073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f10afc05abeac7c59bbc9efaa96af76388095ae1028cb85e59f676d20a7dbf64760405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000600660009054906101000a900460ff16158061271257506000600754145b1561272057600090506127ef565b612728614b56565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506127eb81604001516127dd6007546127cf85600001516127c1876020015160055461436c90919063ffffffff16565b614b0b90919063ffffffff16565b614b4290919063ffffffff16565b613f4490919063ffffffff16565b9150505b919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e65772070726f666974206469737472696275746f72206973207a65726f000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612a91578073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f024c8e1d8737257a61b74ae4e70b314f3dc339e5a5c43de51344fca0b393358660405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b505780601f10612b2557610100808354040283529160200191612b50565b820191906000526020600020905b815481529060010190602001808311612b3357829003601f168201915b505050505081565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115612c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f416d6f756e74206578636565647320616c6c6f77616e6365000000000000000081525060200191505060405180910390fd5b612ce53384612ce085600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436c90919063ffffffff16565b613f60565b905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612daf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6577206f776e6572206973207a65726f00000000000000000000000000000081525060200191505060405180910390fd5b612e5b816149b6565b50565b6000612e6b338484614383565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e65772070726f666974206465706f7369746f72206973207a65726f0000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613163578073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4fdc16b3739cf80464626c98a53f8eea115ac9f94694287afc84b9dd1102cc2860405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660009054906101000a900460ff1680156132385750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132715750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156132bf5750600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548211155b80156133a15750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561336557600080fd5b505afa158015613379573d6000803e3d6000fd5b505050506040513d602081101561338f57600080fd5b81019080805190602001909291905050505b80156134835750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561344757600080fd5b505afa15801561345b573d6000803e3d6000fd5b505050506040513d602081101561347157600080fd5b81019080805190602001909291905050505b90509392505050565b600660009054906101000a900460ff1661350e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b6000613519826126f2565b9050600554600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff167f0bb36062f5e51c9cb6f165015f6e178eaa498868b42a1f797f2b864ddaca59ee826040518082815260200191505060405180910390a25050565b600660009054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613775576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6577206f776e6572206973207a65726f00000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461387b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461393f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4d696e7465722068617320616c7265616479206265656e20736574000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156139e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d696e746572206973207a65726f00000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5265737472696374656420746f20746f6b656e207265636f766572657200000081525060200191505060405180910390fd5b80600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b8957600080fd5b505afa158015613b9d573d6000803e3d6000fd5b505050506040513d6020811015613bb357600080fd5b8101908080519060200190929190505050613c36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154148015613cca57506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b613d3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4e657720616464726573732065786973747320616c726561647900000000000081525060200191505060405180910390fd5b613d458361348c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015481600001556001820154816001015560028201548160020155905050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160009055600282016000905550508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f83ddb032791a0e182e3dd293d85ca1da7411793659d2c8bd8fbe346e38a7265160405160405180910390a38173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546040518082815260200191505060405180910390a3505050565b600080828401905083811015613f5657fe5b8091505092915050565b600083600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561400257600080fd5b505afa158015614016573d6000803e3d6000fd5b505050506040513d602081101561402c57600080fd5b81019080805190602001909291905050506140af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff16614131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b82600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150509392505050565b61422c8261348c565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614301573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f182fd1cdcccc248c64c7d44f15aaa1374c533a4e902ef27c9d5afd6ae6665a43836040518082815260200191505060405180910390a3505050565b60008282111561437857fe5b818303905092915050565b600083600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561442557600080fd5b505afa158015614439573d6000803e3d6000fd5b505050506040513d602081101561444f57600080fd5b81019080805190602001909291905050506144d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b83600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561457257600080fd5b505afa158015614586573d6000803e3d6000fd5b505050506040513d602081101561459c57600080fd5b810190808051906020019092919050505061461f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff166146a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415614744576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f526563697069656e74206973207a65726f00000000000000000000000000000081525060200191505060405180910390fd5b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548411156147fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416d6f756e7420657863656564732062616c616e63650000000000000000000081525060200191505060405180910390fd5b6148058661348c565b61480e8561348c565b61486384600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461436c90919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506148fe84600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613f4490919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a36001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ac6578073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831415614b1e5760009050614b3c565b6000828402905082848281614b2f57fe5b0414614b3757fe5b809150505b92915050565b6000818381614b4d57fe5b04905092915050565b6040518060600160405280600081526020016000815260200160008152509056fea265627a7a72315820d9c87a8a5ae219dbe74808e7359f463bdc9a730dfb2a658251f935a6fbab0d0464736f6c634300050c003200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000b251fe6a1a8c5559b0d532b00775eb39aa433d560000000000000000000000003a4f0ae1ab1c48bf2db78246a17c536dc328c38e000000000000000000000000c1d70999ba324e2a6d003324a4f0923ac872b86300000000000000000000000042978457b7c8230cd7980ffb984e1ac59583ab0600000000000000000000000000000000000000000000000000000000000000175061726b696e476f20536563757269747920546f6b656e0000000000000000000000000000000000000000000000000000000000000000000000000000000004474f545300000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c8063854cff2f11610139578063b445abe1116100b6578063e46638e61161007a578063e46638e614610f08578063e77a14be14610f9b578063e86dde5614610fec578063f2fde38b1461101b578063fca3b5aa1461106c578063feaea586146110bd57610251565b8063b445abe114610d59578063bd998cb314610db0578063d4ee1d9014610ddb578063d9ad01c414610e32578063dd62ed3e14610e8357610251565b806395d89b41116100fd57806395d89b4114610b3b578063a457c2d714610bcb578063a824c9d214610c3e578063a9059cbb14610c8f578063b1efee8414610d0257610251565b8063854cff2f146109865780638d82eab8146109d75780638da5cb5b14610a3c578063924a96f014610a9357806393e59dc114610ae457610251565b80632b68b9c6116101d257806351213f481161019657806351213f48146107895780635e5c06e2146107da57806370a082311461084d5780637157797f146108b257806371d60d8f146109655780637d64bcb41461096f57610251565b80632b68b9c61461065c578063313ce5671461067357806339509351146106a457806340c10f19146107175780634e71e0c81461077257610251565b80631ac2765d116102195780631ac2765d146104705780631af2c9fd146104f65780631e4c2fe31461052157806323b872dd14610572578063268808c61461060557610251565b806306fdde03146102d45780630754617214610364578063095ea7b3146103bb57806318160ddd1461042e5780631aa8a09214610459575b600080369050146102ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f46616c6c6261636b2063616c6c2077697468206461746100000000000000000081525060200191505060405180910390fd5b6102d261112e565b005b3480156102e057600080fd5b506102e9611356565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561032957808201518184015260208101905061030e565b50505050905090810190601f1680156103565780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037057600080fd5b506103796113f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103c757600080fd5b50610414600480360360408110156103de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061141a565b604051808215151515815260200191505060405180910390f35b34801561043a57600080fd5b5061044361142f565b6040518082815260200191505060405180910390f35b34801561046557600080fd5b5061046e611439565b005b34801561047c57600080fd5b506104f46004803603602081101561049357600080fd5b81019080803590602001906401000000008111156104b057600080fd5b8201836020820111156104c257600080fd5b803590602001918460208302840111640100000000831117156104e457600080fd5b9091929391929390505050611445565b005b34801561050257600080fd5b5061050b611583565b6040518082815260200191505060405180910390f35b34801561052d57600080fd5b506105706004803603602081101561054457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611589565b005b34801561057e57600080fd5b506105eb6004803603606081101561059557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611596565b604051808215151515815260200191505060405180910390f35b34801561061157600080fd5b5061061a61173f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561066857600080fd5b50610671611765565b005b34801561067f57600080fd5b5061068861188e565b604051808260ff1660ff16815260200191505060405180910390f35b3480156106b057600080fd5b506106fd600480360360408110156106c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611893565b604051808215151515815260200191505060405180910390f35b34801561072357600080fd5b506107706004803603604081101561073a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a2a565b005b34801561077e57600080fd5b50610787611e8a565b005b34801561079557600080fd5b506107d8600480360360208110156107ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f58565b005b3480156107e657600080fd5b50610829600480360360208110156107fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121d3565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561085957600080fd5b5061089c6004803603602081101561087057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121fd565b6040518082815260200191505060405180910390f35b3480156108be57600080fd5b5061094b600480360360808110156108d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612249565b604051808215151515815260200191505060405180910390f35b61096d61112e565b005b34801561097b57600080fd5b506109846122e8565b005b34801561099257600080fd5b506109d5600480360360208110156109a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612477565b005b3480156109e357600080fd5b50610a26600480360360208110156109fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126f2565b6040518082815260200191505060405180910390f35b348015610a4857600080fd5b50610a516127f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9f57600080fd5b50610ae260048036036020811015610ab657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612819565b005b348015610af057600080fd5b50610af9612a94565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b4757600080fd5b50610b50612aba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b90578082015181840152602081019050610b75565b50505050905090810190601f168015610bbd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bd757600080fd5b50610c2460048036036040811015610bee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612b58565b604051808215151515815260200191505060405180910390f35b348015610c4a57600080fd5b50610c8d60048036036020811015610c6157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ced565b005b348015610c9b57600080fd5b50610ce860048036036040811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e5e565b604051808215151515815260200191505060405180910390f35b348015610d0e57600080fd5b50610d17612e73565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6557600080fd5b50610d6e612e99565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dbc57600080fd5b50610dc5612ebf565b6040518082815260200191505060405180910390f35b348015610de757600080fd5b50610df0612ec5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e3e57600080fd5b50610e8160048036036020811015610e5557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eeb565b005b348015610e8f57600080fd5b50610ef260048036036040811015610ea657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613166565b6040518082815260200191505060405180910390f35b348015610f1457600080fd5b50610f8160048036036060811015610f2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506131ed565b604051808215151515815260200191505060405180910390f35b348015610fa757600080fd5b50610fea60048036036020811015610fbe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061348c565b005b348015610ff857600080fd5b506110016135fd565b604051808215151515815260200191505060405180910390f35b34801561102757600080fd5b5061106a6004803603602081101561103e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613610565b005b34801561107857600080fd5b506110bb6004803603602081101561108f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137b9565b005b3480156110c957600080fd5b5061112c600480360360408110156110e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a26565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f5265737472696374656420746f2070726f666974206465706f7369746f72000081525060200191505060405180910390fd5b600660009054906101000a900460ff16611273576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b6000600754116112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f546f74616c20737570706c79206973207a65726f00000000000000000000000081525060200191505060405180910390fd5b61130034600554613f4490919063ffffffff16565b6005819055503373ffffffffffffffffffffffffffffffffffffffff167f1ecaf5d6abf37d825612fa02d0f7a9db7b880595f4dbf94c8e645d2b1bee37d4346040518082815260200191505060405180910390a2565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ec5780601f106113c1576101008083540402835291602001916113ec565b820191906000526020600020905b8154815290600101906020018083116113cf57829003601f168201915b505050505081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611427338484613f60565b905092915050565b6000600754905090565b6114433333614223565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5265737472696374656420746f2070726f666974206469737472696275746f7281525060200191505060405180910390fd5b60008090505b8282905081101561157e5761157383838381811061152857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1684848481811061155157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614223565b80600101905061150e565b505050565b600a5481565b6115933382614223565b50565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561168a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f416d6f756e74206578636565647320616c6c6f77616e6365000000000000000081525060200191505060405180910390fd5b611723843361171e85600e60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436c90919063ffffffff16565b613f60565b80156117365750611735848484614383565b5b90509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5265737472696374656420746f206d696e74657200000000000000000000000081525060200191505060405180910390fd5b7f95581ace7737226d280f9814ae6267c15c73e513c71c48a432da5b991223891060405160405180910390a16000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b601281565b60008182600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054011015611989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f416c6c6f77616e6365206f766572666c6f77000000000000000000000000000081525060200191505060405180910390fd5b611a223384611a1d85600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f4490919063ffffffff16565b613f60565b905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611aed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5265737472696374656420746f206d696e74657200000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff1615611b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f74616c20737570706c7920686173206265656e206669786564000000000081525060200191505060405180910390fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1057600080fd5b505afa158015611c24573d6000803e3d6000fd5b505050506040513d6020811015611c3a57600080fd5b8101908080519060200190929190505050611cbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415611d1b57600a600081548092919060010191905055505b611d3082600754613f4490919063ffffffff16565b600781905550611d8b82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613f4490919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508273ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5265737472696374656420746f206e6577206f776e657200000000000000000081525060200191505060405180910390fd5b611f56336149b6565b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4e657720746f6b656e207265636f7665726572206973207a65726f000000000081525060200191505060405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146121d0578073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff693c6449c4445af5f6bd9eaf2f1d405209024c25d65eb2321805553df1bb6a060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60006122568484846131ed565b80156122de5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211155b9050949350505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5265737472696374656420746f206d696e74657200000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff161561242e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f74616c20737570706c7920686173206265656e206669786564000000000081525060200191505060405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f57686974656c6973742061646472657373206973207a65726f0000000000000081525060200191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146126ef578073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f10afc05abeac7c59bbc9efaa96af76388095ae1028cb85e59f676d20a7dbf64760405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000600660009054906101000a900460ff16158061271257506000600754145b1561272057600090506127ef565b612728614b56565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506127eb81604001516127dd6007546127cf85600001516127c1876020015160055461436c90919063ffffffff16565b614b0b90919063ffffffff16565b614b4290919063ffffffff16565b613f4490919063ffffffff16565b9150505b919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561297e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e65772070726f666974206469737472696275746f72206973207a65726f000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612a91578073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f024c8e1d8737257a61b74ae4e70b314f3dc339e5a5c43de51344fca0b393358660405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b505780601f10612b2557610100808354040283529160200191612b50565b820191906000526020600020905b815481529060010190602001808311612b3357829003601f168201915b505050505081565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115612c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f416d6f756e74206578636565647320616c6c6f77616e6365000000000000000081525060200191505060405180910390fd5b612ce53384612ce085600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461436c90919063ffffffff16565b613f60565b905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612daf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6577206f776e6572206973207a65726f00000000000000000000000000000081525060200191505060405180910390fd5b612e5b816149b6565b50565b6000612e6b338484614383565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4e65772070726f666974206465706f7369746f72206973207a65726f0000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613163578073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4fdc16b3739cf80464626c98a53f8eea115ac9f94694287afc84b9dd1102cc2860405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660009054906101000a900460ff1680156132385750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156132715750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156132bf5750600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548211155b80156133a15750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561336557600080fd5b505afa158015613379573d6000803e3d6000fd5b505050506040513d602081101561338f57600080fd5b81019080805190602001909291905050505b80156134835750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561344757600080fd5b505afa15801561345b573d6000803e3d6000fd5b505050506040513d602081101561347157600080fd5b81019080805190602001909291905050505b90509392505050565b600660009054906101000a900460ff1661350e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b6000613519826126f2565b9050600554600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff167f0bb36062f5e51c9cb6f165015f6e178eaa498868b42a1f797f2b864ddaca59ee826040518082815260200191505060405180910390a25050565b600660009054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613775576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6577206f776e6572206973207a65726f00000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461387b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5265737472696374656420746f206f776e65720000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461393f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4d696e7465722068617320616c7265616479206265656e20736574000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156139e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4d696e746572206973207a65726f00000000000000000000000000000000000081525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f5265737472696374656420746f20746f6b656e207265636f766572657200000081525060200191505060405180910390fd5b80600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b8957600080fd5b505afa158015613b9d573d6000803e3d6000fd5b505050506040513d6020811015613bb357600080fd5b8101908080519060200190929190505050613c36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154148015613cca57506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b613d3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4e657720616464726573732065786973747320616c726561647900000000000081525060200191505060405180910390fd5b613d458361348c565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015481600001556001820154816001015560028201548160020155905050600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808201600090556001820160009055600282016000905550508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f83ddb032791a0e182e3dd293d85ca1da7411793659d2c8bd8fbe346e38a7265160405160405180910390a38173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546040518082815260200191505060405180910390a3505050565b600080828401905083811015613f5657fe5b8091505092915050565b600083600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561400257600080fd5b505afa158015614016573d6000803e3d6000fd5b505050506040513d602081101561402c57600080fd5b81019080805190602001909291905050506140af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff16614131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b82600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a360019150509392505050565b61422c8261348c565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614301573d6000803e3d6000fd5b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f182fd1cdcccc248c64c7d44f15aaa1374c533a4e902ef27c9d5afd6ae6665a43836040518082815260200191505060405180910390a3505050565b60008282111561437857fe5b818303905092915050565b600083600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561442557600080fd5b505afa158015614439573d6000803e3d6000fd5b505050506040513d602081101561444f57600080fd5b81019080805190602001909291905050506144d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b83600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633af32abf826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561457257600080fd5b505afa158015614586573d6000803e3d6000fd5b505050506040513d602081101561459c57600080fd5b810190808051906020019092919050505061461f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f41646472657373206973206e6f742077686974656c697374656400000000000081525060200191505060405180910390fd5b600660009054906101000a900460ff166146a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f74616c20737570706c79206d6179206368616e676500000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415614744576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f526563697069656e74206973207a65726f00000000000000000000000000000081525060200191505060405180910390fd5b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548411156147fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f416d6f756e7420657863656564732062616c616e63650000000000000000000081525060200191505060405180910390fd5b6148058661348c565b61480e8561348c565b61486384600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461436c90919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506148fe84600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613f4490919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a36001925050509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ac6578073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080831415614b1e5760009050614b3c565b6000828402905082848281614b2f57fe5b0414614b3757fe5b809150505b92915050565b6000818381614b4d57fe5b04905092915050565b6040518060600160405280600081526020016000815260200160008152509056fea265627a7a72315820d9c87a8a5ae219dbe74808e7359f463bdc9a730dfb2a658251f935a6fbab0d0464736f6c634300050c0032
Deployed Bytecode Sourcemap
33392:8541:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12675:1;12656:8;;:15;;:20;12648:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12717:15;:13;:15::i;:::-;33392:8541;33456:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33456:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;33456:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16426:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16426:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36652:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36652:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36652:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35589:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35589:88:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15047:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15047:101:0;;;:::i;:::-;;15333:263;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15333:263:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15333:263:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;15333:263:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15333:263:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;15333:263:0;;;;;;;;;;;;:::i;:::-;;16454:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16454:33:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15156:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15156:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15156:133:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;40068:316;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40068:316:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40068:316:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31647:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31647:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34424:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34424:126:0;;;:::i;:::-;;33508:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33508:35:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37139:281;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37139:281:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37139:281:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17686:396;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17686:396:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17686:396:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2835:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2835:153:0;;;:::i;:::-;;32725:359;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32725:359:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32725:359:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;9381:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9381:51:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9381:51:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35814:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35814:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35814:118:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39111:223;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39111:223:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;39111:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13747:264;;;:::i;:::-;;18150:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18150:127:0;;;:::i;:::-;;7137:365;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7137:365:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7137:365:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14133:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14133:449:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14133:449:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1099:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1099:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13318:392;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13318:392:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13318:392:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6351:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6351:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33481:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33481:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;33481:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37770:277;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37770:277:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37770:277:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2568:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2568:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2568:185:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;39601:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39601:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39601:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9507:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9507:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9690:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9690:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9922:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9922:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1236:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1236:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12842:370;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12842:370:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12842:370:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;36178:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36178:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36178:140:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38353:363;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38353:363:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38353:363:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14670:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14670:333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14670:333:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;10103:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10103:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2059:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2059:170:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2059:170:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;17262:224;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17262:224:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17262:224:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;34690:818;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34690:818:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34690:818:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13747:264;11769:15;;;;;;;;;;;11755:29;;:10;:29;;;11747:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12200:18;;;;;;;;;;;12192:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13868:1;13853:12;;:16;13845:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13922:27;13939:9;13922:12;;:16;;:27;;;;:::i;:::-;13907:12;:42;;;;13981:10;13967:36;;;13993:9;13967:36;;;;;;;;;;;;;;;;;;13747:264::o;33456:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16426:21::-;;;;;;;;;;;;;:::o;36652:134::-;36716:4;36740:38;36749:10;36761:8;36771:6;36740:8;:38::i;:::-;36733:45;;36652:134;;;;:::o;35589:88::-;35633:4;35657:12;;35650:19;;35589:88;:::o;15047:101::-;15096:44;15117:10;15129;15096:20;:44::i;:::-;15047:101::o;15333:263::-;11984:17;;;;;;;;;;;11970:31;;:10;:31;;;11962:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15472:6;15481:1;15472:10;;15467:122;15488:10;;:17;;15484:1;:21;15467:122;;;15527:50;15548:10;;15559:1;15548:13;;;;;;;;;;;;;;;15563:10;;15574:1;15563:13;;;;;;;;;;;;;;;15527:20;:50::i;:::-;15507:3;;;;;15467:122;;;;15333:263;;:::o;16454:33::-;;;;:::o;15156:133::-;15235:46;15256:10;15268:12;15235:20;:46::i;:::-;15156:133;:::o;40068:316::-;40147:4;40182:10;:17;40193:5;40182:17;;;;;;;;;;;;;;;:29;40200:10;40182:29;;;;;;;;;;;;;;;;40172:6;:39;;40164:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40260:70;40269:5;40276:10;40288:41;40322:6;40288:10;:17;40299:5;40288:17;;;;;;;;;;;;;;;:29;40306:10;40288:29;;;;;;;;;;;;;;;;:33;;:41;;;;:::i;:::-;40260:8;:70::i;:::-;:116;;;;;40347:29;40357:5;40364:3;40369:6;40347:9;:29::i;:::-;40260:116;40253:123;;40068:316;;;;;:::o;31647:29::-;;;;;;;;;;;;;:::o;34424:126::-;16901:6;;;;;;;;;;;16887:20;;:10;:20;;;16879:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34478:16;;;;;;;;;;34534:5;;;;;;;;;;;34505:37;;;33508:35;33541:2;33508:35;:::o;37139:281::-;37214:4;37285:7;37274;37239:10;:22;37250:10;37239:22;;;;;;;;;;;;;;;:32;37262:8;37239:32;;;;;;;;;;;;;;;;:42;:53;;37231:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37335:77;37344:10;37356:8;37366:45;37403:7;37366:10;:22;37377:10;37366:22;;;;;;;;;;;;;;;:32;37389:8;37366:32;;;;;;;;;;;;;;;;:36;;:45;;;;:::i;:::-;37335:8;:77::i;:::-;37328:84;;37139:281;;;;:::o;17686:396::-;16901:6;;;;;;;;;;;16887:20;;:10;:20;;;16879:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17088:18;;;;;;;;;;;17087:19;17079:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17769:3;6777:9;;;;;;;;;;;:23;;;6801:8;6777:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6777:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6777:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6777:33:0;;;;;;;;;;;;;;;;6769:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17814:1;17789:8;:13;17798:3;17789:13;;;;;;;;;;;;;;;:21;;;:26;17785:78;;;17832:17;;:19;;;;;;;;;;;;;17785:78;17890:25;17907:7;17890:12;;:16;;:25;;;;:::i;:::-;17875:12;:40;;;;17950:34;17976:7;17950:8;:13;17959:3;17950:13;;;;;;;;;;;;;;;:21;;;:25;;:34;;;;:::i;:::-;17926:8;:13;17935:3;17926:13;;;;;;;;;;;;;;;:21;;:58;;;;18009:3;18002:20;;;18014:7;18002:20;;;;;;;;;;;;;;;;;;18061:3;18038:36;;18055:3;18038:36;;;18066:7;18038:36;;;;;;;;;;;;;;;;;;17149:1;17686:396;;:::o;2835:153::-;2901:8;;;;;;;;;;;2887:22;;:10;:22;;;2879:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2950:30;2969:10;2950:18;:30::i;:::-;2835:153::o;32725:359::-;1651:5;;;;;;;;;;;1637:19;;:10;:19;;;1629:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32846:3;32816:34;;:18;:34;;;;32808:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32921:14;;;;;;;;;;;32899:36;;:18;:36;;;32895:182;;32994:18;32957:56;;32978:14;;;;;;;;;;;32957:56;;;;;;;;;;;;33047:18;33030:14;;:35;;;;;;;;;;;;;;;;;;32895:182;32725:359;:::o;9381:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35814:118::-;35873:4;35897:8;:19;35906:9;35897:19;;;;;;;;;;;;;;;:27;;;35890:34;;35814:118;;;:::o;39111:223::-;39225:4;39254:31;39266:5;39273:3;39278:6;39254:11;:31::i;:::-;:72;;;;;39299:10;:17;39310:5;39299:17;;;;;;;;;;;;;;;:27;39317:8;39299:27;;;;;;;;;;;;;;;;39289:6;:37;;39254:72;39247:79;;39111:223;;;;;;:::o;18150:127::-;16901:6;;;;;;;;;;;16887:20;;:10;:20;;;16879:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17088:18;;;;;;;;;;;17087:19;17079:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18233:4;18212:18;;:25;;;;;;;;;;;;;;;;;;18255:14;;;;;;;;;;18150:127::o;7137:365::-;1651:5;;;;;;;;;;;1637:19;;:10;:19;;;1629:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7254:3;7220:38;;7228:13;7220:38;;;;7212:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7339:9;;;;;;;;;;;7305:44;;7313:13;7305:44;;;7301:194;;7415:13;7371:59;;7395:9;;;;;;;;;;;7371:59;;;;;;;;;;;;7469:13;7447:9;;:36;;;;;;;;;;;;;;;;;;7301:194;7137:365;:::o;14133:449::-;14199:4;14221:18;;;;;;;;;;;14220:19;:40;;;;14259:1;14243:12;;:17;14220:40;14216:81;;;14284:1;14277:8;;;;14216:81;14309:30;;:::i;:::-;14342:8;:19;14351:9;14342:19;;;;;;;;;;;;;;;14309:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14381:193;14554:7;:19;;;14381:139;14507:12;;14381:92;14457:7;:15;;;14381:42;14398:7;:24;;;14381:12;;:16;;:42;;;;:::i;:::-;:75;;:92;;;;:::i;:::-;:125;;:139;;;;:::i;:::-;:172;;:193;;;;:::i;:::-;14374:200;;;14133:449;;;;:::o;1099:20::-;;;;;;;;;;;;;:::o;13318:392::-;1651:5;;;;;;;;;;;1637:19;;:10;:19;;;1629:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13448:3;13415:37;;:21;:37;;;;13407:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13529:17;;;;;;;;;;;13504:42;;:21;:42;;;13500:203;;13611:21;13568:65;;13592:17;;;;;;;;;;;13568:65;;;;;;;;;;;;13670:21;13650:17;;:41;;;;;;;;;;;;;;;;;;13500:203;13318:392;:::o;6351:26::-;;;;;;;;;;;;;:::o;33481:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37770:277::-;37845:4;37881:10;:22;37892:10;37881:22;;;;;;;;;;;;;;;:32;37904:8;37881:32;;;;;;;;;;;;;;;;37870:7;:43;;37862:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37962:77;37971:10;37983:8;37993:45;38030:7;37993:10;:22;38004:10;37993:22;;;;;;;;;;;;;;;:32;38016:8;37993:32;;;;;;;;;;;;;;;;:36;;:45;;;;:::i;:::-;37962:8;:77::i;:::-;37955:84;;37770:277;;;;:::o;2568:185::-;1651:5;;;;;;;;;;;1637:19;;:10;:19;;;1629:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2677:3;2656:25;;:9;:25;;;;2648:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:29;2735:9;2716:18;:29::i;:::-;2568:185;:::o;39601:126::-;39661:4;39685:34;39695:10;39707:3;39712:6;39685:9;:34::i;:::-;39678:41;;39601:126;;;;:::o;9507:30::-;;;;;;;;;;;;;:::o;9690:32::-;;;;;;;;;;;;;:::o;9922:24::-;;;;:::o;1236:23::-;;;;;;;;;;;;;:::o;12842:370::-;1651:5;;;;;;;;;;;1637:19;;:10;:19;;;1629:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:3;12935:35;;:19;:35;;;;12927:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13043:15;;;;;;;;;;;13020:38;;:19;:38;;;13016:189;;13119:19;13080:59;;13102:15;;;;;;;;;;;13080:59;;;;;;;;;;;;13174:19;13156:15;;:37;;;;;;;;;;;;;;;;;;13016:189;12842:370;:::o;36178:140::-;36255:4;36279:10;:21;36290:9;36279:21;;;;;;;;;;;;;;;:31;36301:8;36279:31;;;;;;;;;;;;;;;;36272:38;;36178:140;;;;:::o;38353:363::-;38445:4;38474:18;;;;;;;;;;;:56;;;;;38526:3;38509:21;;:5;:21;;;;38474:56;:92;;;;;38562:3;38547:19;;:3;:19;;;;38474:92;:142;;;;;38593:8;:15;38602:5;38593:15;;;;;;;;;;;;;;;:23;;;38583:6;:33;;38474:142;:189;;;;;38633:9;;;;;;;;;;;:23;;;38657:5;38633:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38633:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38633:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38633:30:0;;;;;;;;;;;;;;;;38474:189;:234;;;;;38680:9;;;;;;;;;;;:23;;;38704:3;38680:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38680:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38680:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38680:28:0;;;;;;;;;;;;;;;;38474:234;38467:241;;38353:363;;;;;:::o;14670:333::-;12200:18;;;;;;;;;;;12192:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14761:19;14783:27;14800:9;14783:16;:27::i;:::-;14761:49;;14862:12;;14823:8;:19;14832:9;14823:19;;;;;;;;;;;;;;;:36;;:51;;;;14919:14;14885:8;:19;14894:9;14885:19;;;;;;;;;;;;;;;:31;;:48;;;;14969:9;14951:44;;;14980:14;14951:44;;;;;;;;;;;;;;;;;;12257:1;14670:333;:::o;10103:30::-;;;;;;;;;;;;;:::o;2059:170::-;1651:5;;;;;;;;;;;1637:19;;:10;:19;;;1629:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2162:3;2141:25;;:9;:25;;;;2133:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:9;2201:8;;:20;;;;;;;;;;;;;;;;;;2059:170;:::o;17262:224::-;1651:5;;;;;;;;;;;1637:19;;:10;:19;;;1629:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17352:3;17334:22;;:6;;;;;;;;;;;:22;;;17326:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17426:3;17407:23;;:7;:23;;;;17399:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17471:7;17462:6;;:16;;;;;;;;;;;;;;;;;;17262:224;:::o;34690:818::-;32341:14;;;;;;;;;;;32327:28;;:10;:28;;;32319:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34823:11;6777:9;;;;;;;;;;;:23;;;6801:8;6777:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6777:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6777:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6777:33:0;;;;;;;;;;;;;;;;6769:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35126:1;35093:8;:21;35102:11;35093:21;;;;;;;;;;;;;;;:29;;;:34;:81;;;;;35173:1;35131:8;:21;35140:11;35131:21;;;;;;;;;;;;;;;:38;;;:43;35093:81;35085:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35235:30;35253:11;35235:17;:30::i;:::-;35302:8;:21;35311:11;35302:21;;;;;;;;;;;;;;;35278:8;:21;35287:11;35278:21;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;35341:8;:21;35350:11;35341:21;;;;;;;;;;;;;;;;35334:28;;;;;;;;;;;;;;;;;;;;35407:11;35380:39;;35394:11;35380:39;;;;;;;;;;;;35457:11;35435:65;;35444:11;35435:65;;;35470:8;:21;35479:11;35470:21;;;;;;;;;;;;;;;:29;;;35435:65;;;;;;;;;;;;;;;;;;32400:1;34690:818;;:::o;172:139::-;224:4;241:6;254:1;250;:5;241:14;;280:1;275;:6;;268:14;;;;302:1;295:8;;;172:139;;;;:::o;40719:309::-;40887:4;40826:5;6777:9;;;;;;;;;;;:23;;;6801:8;6777:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6777:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6777:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6777:33:0;;;;;;;;;;;;;;;;6769:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12200:18;;;;;;;;;;;12192:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40939:6;40909:10;:17;40920:5;40909:17;;;;;;;;;;;;;;;:27;40927:8;40909:27;;;;;;;;;;;;;;;:36;;;;40979:8;40963:33;;40972:5;40963:33;;;40989:6;40963:33;;;;;;;;;;;;;;;;;;41016:4;41009:11;;40719:309;;;;;;:::o;15640:395::-;15739:28;15757:9;15739:17;:28::i;:::-;15780:25;15808:8;:19;15817:9;15808:19;;;;;;;;;;;;;;;:31;;;15780:59;;15886:1;15852:8;:19;15861:9;15852:19;;;;;;;;;;;;;;;:31;;:35;;;;15898:12;:21;;:43;15920:20;15898:43;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15898:43:0;15992:12;15959:68;;15981:9;15959:68;;;16006:20;15959:68;;;;;;;;;;;;;;;;;;15640:395;;;:::o;355:116::-;407:4;436:1;431;:6;;424:14;;;;462:1;458;:5;451:12;;355:116;;;;:::o;41294:634::-;41488:4;41397:5;6777:9;;;;;;;;;;;:23;;;6801:8;6777:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6777:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6777:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6777:33:0;;;;;;;;;;;;;;;;6769:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41429:3;6777:9;;;;;;;;;;;:23;;;6801:8;6777:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6777:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6777:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6777:33:0;;;;;;;;;;;;;;;;6769:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12200:18;;;;;;;;;;;12192:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41533:3;41518:19;;:3;:19;;;;41510:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41588:8;:15;41597:5;41588:15;;;;;;;;;;;;;;;:23;;;41578:6;:33;;41570:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41651:24;41669:5;41651:17;:24::i;:::-;41686:22;41704:3;41686:17;:22::i;:::-;41747:35;41775:6;41747:8;:15;41756:5;41747:15;;;;;;;;;;;;;;;:23;;;:27;;:35;;;;:::i;:::-;41721:8;:15;41730:5;41721:15;;;;;;;;;;;;;;;:23;;:61;;;;41817:33;41843:6;41817:8;:13;41826:3;41817:13;;;;;;;;;;;;;;;:21;;;:25;;:33;;;;:::i;:::-;41793:8;:13;41802:3;41793:13;;;;;;;;;;;;;;;:21;;:57;;;;41884:3;41868:28;;41877:5;41868:28;;;41889:6;41868:28;;;;;;;;;;;;;;;;;;41916:4;41909:11;;6852:1;41294:634;;;;;;:::o;3117:235::-;3200:5;;;;;;;;;;;3187:18;;:9;:18;;;3183:128;;3255:9;3227:38;;3248:5;;;;;;;;;;;3227:38;;;;;;;;;;;;3290:9;3282:5;;:17;;;;;;;;;;;;;;;;;;3183:128;3340:3;3321:8;;:23;;;;;;;;;;;;;;;;;;3117:235;:::o;515:202::-;567:4;593:1;588;:6;584:47;;;618:1;611:8;;;;584:47;643:6;656:1;652;:5;643:14;;686:1;681;677;:5;;;;;;:10;670:18;;;;708:1;701:8;;;515:202;;;;;:::o;765:89::-;817:4;845:1;841;:5;;;;;;834:12;;765:89;;;;:::o;33392:8541::-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://d9c87a8a5ae219dbe74808e7359f463bdc9a730dfb2a658251f935a6fbab0d04
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.