Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Sponsored
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 11275046 | 1044 days 22 hrs ago | IN | Create: TwoKeyAdmin | 0 ETH | 0.28727742 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TwoKeyAdmin
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-02 */ pragma solidity ^0.4.13; contract ERC20 { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function allowance(address _ocwner, address _spender) public view returns (uint256); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract IERC20 { function balanceOf( address whom ) external view returns (uint); function transfer( address _to, uint256 _value ) external returns (bool); function transferFrom( address _from, address _to, uint256 _value ) external returns (bool); function approve( address _spender, uint256 _value ) public returns (bool); function decimals() external view returns (uint); function symbol() external view returns (string); function name() external view returns (string); function freezeTransfers() external; function unfreezeTransfers() external; } contract IKyberReserveInterface { // Pricing contract uint public collectedFeesInTwei; // Pricing contract function resetCollectedFees() public; // Pricing contract function setLiquidityParams( uint _rInFp, uint _pMinInFp, uint _numFpBits, uint _maxCapBuyInWei, uint _maxCapSellInWei, uint _feeInBps, uint _maxTokenToEthRateInPrecision, uint _minTokenToEthRateInPrecision ) public; function withdraw(ERC20 token, uint amount, address destination) public returns(bool); function disableTrade() public returns (bool); function enableTrade() public returns (bool); function withdrawEther(uint amount, address sendTo) external; function withdrawToken(ERC20 token, uint amount, address sendTo) external; function setContracts(address _kyberNetwork, address _conversionRates, address _sanityRates) public; function getDestQty(ERC20 src, ERC20 dest, uint srcQty, uint rate) public view returns(uint); } contract IStructuredStorage { function setProxyLogicContractAndDeployer(address _proxyLogicContract, address _deployer) external; function setProxyLogicContract(address _proxyLogicContract) external; // *** Getter Methods *** function getUint(bytes32 _key) external view returns(uint); function getString(bytes32 _key) external view returns(string); function getAddress(bytes32 _key) external view returns(address); function getBytes(bytes32 _key) external view returns(bytes); function getBool(bytes32 _key) external view returns(bool); function getInt(bytes32 _key) external view returns(int); function getBytes32(bytes32 _key) external view returns(bytes32); // *** Getter Methods For Arrays *** function getBytes32Array(bytes32 _key) external view returns (bytes32[]); function getAddressArray(bytes32 _key) external view returns (address[]); function getUintArray(bytes32 _key) external view returns (uint[]); function getIntArray(bytes32 _key) external view returns (int[]); function getBoolArray(bytes32 _key) external view returns (bool[]); // *** Setter Methods *** function setUint(bytes32 _key, uint _value) external; function setString(bytes32 _key, string _value) external; function setAddress(bytes32 _key, address _value) external; function setBytes(bytes32 _key, bytes _value) external; function setBool(bytes32 _key, bool _value) external; function setInt(bytes32 _key, int _value) external; function setBytes32(bytes32 _key, bytes32 _value) external; // *** Setter Methods For Arrays *** function setBytes32Array(bytes32 _key, bytes32[] _value) external; function setAddressArray(bytes32 _key, address[] _value) external; function setUintArray(bytes32 _key, uint[] _value) external; function setIntArray(bytes32 _key, int[] _value) external; function setBoolArray(bytes32 _key, bool[] _value) external; // *** Delete Methods *** function deleteUint(bytes32 _key) external; function deleteString(bytes32 _key) external; function deleteAddress(bytes32 _key) external; function deleteBytes(bytes32 _key) external; function deleteBool(bytes32 _key) external; function deleteInt(bytes32 _key) external; function deleteBytes32(bytes32 _key) external; } contract ITwoKeyCampaign { function getNumberOfUsersToContractor( address _user ) public view returns (uint); function getReceivedFrom( address _receiver ) public view returns (address); function balanceOf( address _owner ) public view returns (uint256); function getReferrerCut( address me ) public view returns (uint256); function getReferrerPlasmaBalance( address _influencer ) public view returns (uint); function updateReferrerPlasmaBalance( address _influencer, uint _balance ) public; function updateModeratorRewards( uint moderatorTokens ) public; address public logicHandler; address public conversionHandler; } contract ITwoKeyCampaignValidator { function isCampaignValidated(address campaign) public view returns (bool); function validateAcquisitionCampaign(address campaign, string nonSingletonHash) public; function validateDonationCampaign(address campaign, address donationConversionHandler, address donationLogicHandler, string nonSingletonHash) public; function validateCPCCampaign(address campaign, string nonSingletonHash) public; } contract ITwoKeyDeepFreezeTokenPool { function updateReceivedTokensForSuccessfulConversions( uint amount, address campaignAddress ) public; } contract ITwoKeyEventSource { function ethereumOf(address me) public view returns (address); function plasmaOf(address me) public view returns (address); function isAddressMaintainer(address _maintainer) public view returns (bool); function getTwoKeyDefaultIntegratorFeeFromAdmin() public view returns (uint); function joined(address _campaign, address _from, address _to) external; function rejected(address _campaign, address _converter) external; function convertedAcquisition( address _campaign, address _converterPlasma, uint256 _baseTokens, uint256 _bonusTokens, uint256 _conversionAmount, bool _isFiatConversion, uint _conversionId ) external; function getTwoKeyDefaultNetworkTaxPercent() public view returns (uint); function convertedDonation( address _campaign, address _converterPlasma, uint256 _conversionAmount, uint256 _conversionId ) external; function executed( address _campaignAddress, address _converterPlasmaAddress, uint _conversionId, uint tokens ) external; function tokensWithdrawnFromPurchasesHandler( address campaignAddress, uint _conversionID, uint _tokensAmountWithdrawn ) external; function emitDebtEvent( address _plasmaAddress, uint _amount, bool _isAddition, string _currency ) external; function emitReceivedTokensToDeepFreezeTokenPool( address _campaignAddress, uint _amountOfTokens ) public; function emitReceivedTokensAsModerator( address _campaignAddress, uint _amountOfTokens ) public; function emitDAIReleasedAsIncome( address _campaignContractAddress, uint _amountOfDAI ) public; function emitEndedBudgetCampaign( address campaignPlasmaAddress, uint contractorLeftover, uint moderatorEarningsDistributed ) public; function emitUserWithdrawnNetworkEarnings( address user, uint amountOfTokens ) public; function emitRebalancedRewards( uint cycleId, uint difference, string action ) public; } contract ITwoKeyFeeManager { function payDebtWhenConvertingOrWithdrawingProceeds(address _plasmaAddress, uint _debtPaying) public payable; function getDebtForUser(address _userPlasma) public view returns (uint); function payDebtWithDAI(address _plasmaAddress, uint _totalDebt, uint _debtPaid) public; function payDebtWith2Key(address _beneficiaryPublic, address _plasmaAddress, uint _amountOf2keyForRewards) public; function payDebtWith2KeyV2( address _beneficiaryPublic, address _plasmaAddress, uint _amountOf2keyForRewards, address _twoKeyEconomy, address _twoKeyAdmin ) public; function setRegistrationFeeForUser(address _plasmaAddress, uint _registrationFee) public; function addDebtForUser(address _plasmaAddress, uint _debtAmount, string _debtType) public; function withdrawEtherCollected() public returns (uint); function withdraw2KEYCollected() public returns (uint); function withdrawDAICollected(address _dai) public returns (uint); } contract ITwoKeyMaintainersRegistry { function checkIsAddressMaintainer(address _sender) public view returns (bool); function checkIsAddressCoreDev(address _sender) public view returns (bool); function addMaintainers(address [] _maintainers) public; function addCoreDevs(address [] _coreDevs) public; function removeMaintainers(address [] _maintainers) public; function removeCoreDevs(address [] _coreDevs) public; } contract ITwoKeyReg { function addTwoKeyEventSource(address _twoKeyEventSource) public; function changeTwoKeyEventSource(address _twoKeyEventSource) public; function addWhereContractor(address _userAddress, address _contractAddress) public; function addWhereModerator(address _userAddress, address _contractAddress) public; function addWhereReferrer(address _userAddress, address _contractAddress) public; function addWhereConverter(address _userAddress, address _contractAddress) public; function getContractsWhereUserIsContractor(address _userAddress) public view returns (address[]); function getContractsWhereUserIsModerator(address _userAddress) public view returns (address[]); function getContractsWhereUserIsRefferer(address _userAddress) public view returns (address[]); function getContractsWhereUserIsConverter(address _userAddress) public view returns (address[]); function getTwoKeyEventSourceAddress() public view returns (address); function addName(string _name, address _sender, string _fullName, string _email, bytes signature) public; function addNameByUser(string _name) public; function getName2Owner(string _name) public view returns (address); function getOwner2Name(address _sender) public view returns (string); function getPlasmaToEthereum(address plasma) public view returns (address); function getEthereumToPlasma(address ethereum) public view returns (address); function checkIfTwoKeyMaintainerExists(address _maintainer) public view returns (bool); function getUserData(address _user) external view returns (bytes); } contract ITwoKeySingletoneRegistryFetchAddress { function getContractProxyAddress(string _contractName) public view returns (address); function getNonUpgradableContractAddress(string contractName) public view returns (address); function getLatestCampaignApprovedVersion(string campaignType) public view returns (string); } interface ITwoKeySingletonesRegistry { /** * @dev This event will be emitted every time a new proxy is created * @param proxy representing the address of the proxy created */ event ProxyCreated(address proxy); /** * @dev This event will be emitted every time a new implementation is registered * @param version representing the version name of the registered implementation * @param implementation representing the address of the registered implementation * @param contractName is the name of the contract we added new version */ event VersionAdded(string version, address implementation, string contractName); /** * @dev Registers a new version with its implementation address * @param version representing the version name of the new implementation to be registered * @param implementation representing the address of the new implementation to be registered */ function addVersion(string _contractName, string version, address implementation) public; /** * @dev Tells the address of the implementation for a given version * @param _contractName is the name of the contract we're querying * @param version to query the implementation of * @return address of the implementation registered for the given version */ function getVersion(string _contractName, string version) public view returns (address); } contract IUpgradableExchange { function buyRate2key() public view returns (uint); function sellRate2key() public view returns (uint); function buyTokensWithERC20( uint amountOfTokens, address tokenAddress ) public returns (uint,uint); function buyTokens( address _beneficiary ) public payable returns (uint,uint); function buyStableCoinWith2key( uint _twoKeyUnits, address _beneficiary ) public payable; function report2KEYWithdrawnFromNetwork( uint amountOfTokensWithdrawn ) public; function getEth2DaiAverageExchangeRatePerContract( uint _contractID ) public view returns (uint); function getContractId( address _contractAddress ) public view returns (uint); function getEth2KeyAverageRatePerContract( uint _contractID ) public view returns (uint); function returnLeftoverAfterRebalancing( uint amountOf2key ) public; function getMore2KeyTokensForRebalancing( uint amountOf2KeyRequested ) public view returns (uint); function releaseAllDAIFromContractToReserve() public; function setKyberReserveInterfaceContractAddress( address kyberReserveContractAddress ) public; function setSpreadWei( uint newSpreadWei ) public; function withdrawDAIAvailableToFill2KEYReserve( uint amountOfDAI ) public returns (uint); function returnTokensBackToExchangeV1( uint amountOfTokensToReturn ) public; function getMore2KeyTokensForRebalancingV1( uint amountOfTokensRequested ) public; } contract ITwoKeyAdminStorage is IStructuredStorage { } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } c = _a * _b; require(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { require(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; require(c >= _a); return c; } } contract ITwoKeySingletonUtils { address public TWO_KEY_SINGLETON_REGISTRY; // Modifier to restrict method calls only to maintainers modifier onlyMaintainer { address twoKeyMaintainersRegistry = getAddressFromTwoKeySingletonRegistry("TwoKeyMaintainersRegistry"); require(ITwoKeyMaintainersRegistry(twoKeyMaintainersRegistry).checkIsAddressMaintainer(msg.sender)); _; } /** * @notice Function to get any singleton contract proxy address from TwoKeySingletonRegistry contract * @param contractName is the name of the contract we're looking for */ function getAddressFromTwoKeySingletonRegistry( string contractName ) internal view returns (address) { return ITwoKeySingletoneRegistryFetchAddress(TWO_KEY_SINGLETON_REGISTRY) .getContractProxyAddress(contractName); } function getNonUpgradableContractAddressFromTwoKeySingletonRegistry( string contractName ) internal view returns (address) { return ITwoKeySingletoneRegistryFetchAddress(TWO_KEY_SINGLETON_REGISTRY) .getNonUpgradableContractAddress(contractName); } } contract UpgradeabilityStorage { // Versions registry ITwoKeySingletonesRegistry internal registry; // Address of the current implementation address internal _implementation; /** * @dev Tells the address of the current implementation * @return address of the current implementation */ function implementation() public view returns (address) { return _implementation; } } contract Upgradeable is UpgradeabilityStorage { /** * @dev Validates the caller is the versions registry. * @param sender representing the address deploying the initial behavior of the contract */ function initialize(address sender) public payable { require(msg.sender == address(registry)); } } contract TwoKeyAdmin is Upgradeable, ITwoKeySingletonUtils { using SafeMath for *; /** * Storage keys are stored on the top. Here they are in order to avoid any typos */ string constant _twoKeyIntegratorDefaultFeePercent = "twoKeyIntegratorDefaultFeePercent"; string constant _twoKeyNetworkTaxPercent = "twoKeyNetworkTaxPercent"; string constant _twoKeyTokenRate = "twoKeyTokenRate"; string constant _rewardReleaseAfter = "rewardReleaseAfter"; /** * Accounting necessary stuff */ //Income to ADMIN string constant _rewardsReceivedAsModeratorTotal = "rewardsReceivedAsModeratorTotal"; string constant _moderatorEarningsPerCampaign = "moderatorEarningsPerCampaign"; string constant _feesFromFeeManagerCollectedInCurrency = "feesFromFeeManagerCollectedInCurrency"; string constant _feesCollectedFromKyber = "feesCollectedFromKyber"; string constant _daiCollectedFromUpgradableExchange = "daiCollectedFromUpgradableExchange"; string constant _feesCollectedFromDistributionRewards = "feesCollectedFromDistributionRewards"; // Withdrawals from ADMIN string constant _amountWithdrawnFromModeratorEarningsPool = "amountWithdrawnFromModeratorEarningsPool"; string constant _amountWithdrawnFromFeeManagerPoolInCurrency = "amountWithdrawnFromFeeManagerPoolInCurrency"; string constant _amountWithdrawnFromKyberFeesPool = "amountWithdrawnFromKyberFeesPool"; string constant _amountWithdrawnFromCollectedDaiFromUpgradableExchange = "amountWithdrawnFromCollectedDaiFromUpgradableExchange"; string constant _amountWithdrawnFromCollectedDistributionRewards = "amountWithdrawnFromCollectedDistributionRewards"; /** * Keys for the addresses we're accessing */ string constant _twoKeyCongress = "TwoKeyCongress"; string constant _twoKeyUpgradableExchange = "TwoKeyUpgradableExchange"; string constant _twoKeyRegistry = "TwoKeyRegistry"; string constant _twoKeyEconomy = "TwoKeyEconomy"; string constant _twoKeyCampaignValidator = "TwoKeyCampaignValidator"; string constant _twoKeyEventSource = "TwoKeyEventSource"; string constant _twoKeyFeeManager = "TwoKeyFeeManager"; string constant _twoKeyMaintainersRegistry = "TwoKeyMaintainersRegistry"; string constant _DAI_TOKEN = "DAI"; bool initialized = false; ITwoKeyAdminStorage public PROXY_STORAGE_CONTRACT; //Pointer to storage contract /** * @notice Modifier which throws if caller is not TwoKeyCongress */ modifier onlyTwoKeyCongress { require(msg.sender == getNonUpgradableContractAddressFromTwoKeySingletonRegistry(_twoKeyCongress)); _; } modifier onlyTwoKeyBudgetCampaignsPaymentsHandler { address twoKeyBudgetCampaignsPaymentsHandler = getAddressFromTwoKeySingletonRegistry("TwoKeyBudgetCampaignsPaymentsHandler"); require(msg.sender == twoKeyBudgetCampaignsPaymentsHandler); _; } /** * @notice Modifier which throws if the campaign contract sending request is not validated * by TwoKeyCampaignValidator contract */ modifier onlyAllowedContracts { address twoKeyCampaignValidator = getAddressFromTwoKeySingletonRegistry(_twoKeyCampaignValidator); require(ITwoKeyCampaignValidator(twoKeyCampaignValidator).isCampaignValidated(msg.sender) == true); _; } /** * @notice Modifier which throws if the contract sending request is not * TwoKeyFeeManager contract */ modifier onlyTwoKeyFeeManager { require(msg.sender == getAddressFromTwoKeySingletonRegistry(_twoKeyFeeManager)); _; } /** * @notice Function to set initial parameters in the contract including singletones * * @param _twoKeySingletonRegistry is the singletons registry contract address * @param _proxyStorageContract is the address of proxy for storage for this contract * * @dev This function can be called only once, which will be done immediately after deployment. */ function setInitialParams( address _twoKeySingletonRegistry, address _proxyStorageContract, uint _twoKeyTokenReleaseDate ) public { require(initialized == false); TWO_KEY_SINGLETON_REGISTRY = _twoKeySingletonRegistry; PROXY_STORAGE_CONTRACT = ITwoKeyAdminStorage(_proxyStorageContract); setUint(_twoKeyIntegratorDefaultFeePercent,2); setUint(_twoKeyNetworkTaxPercent,25); setUint(_rewardReleaseAfter, _twoKeyTokenReleaseDate); initialized = true; } /** * @notice Function where only TwoKeyCongress can transfer ether to an address * * @dev We're recurring to address different from address 0 and value is in WEI * * @param to is representing receiver's address * @param amount of ether to be transferred */ function transferEtherByAdmins( address to, uint256 amount ) external onlyTwoKeyCongress { require(to != address(0)); to.transfer(amount); } /** * @notice Function to forward call from congress to the Maintainers Registry and add core devs * * @param _coreDevs is the array of core devs to be added to the system */ function addCoreDevsToMaintainerRegistry( address [] _coreDevs ) external onlyTwoKeyCongress { address twoKeyMaintainersRegistry = getAddressFromTwoKeySingletonRegistry(_twoKeyMaintainersRegistry); ITwoKeyMaintainersRegistry(twoKeyMaintainersRegistry).addCoreDevs(_coreDevs); } /** * @notice Function to forward call from congress to the Maintainers Registry and add maintainers * * @param _maintainers is the array of core devs to be added to the system */ function addMaintainersToMaintainersRegistry( address [] _maintainers ) external onlyTwoKeyCongress { address twoKeyMaintainersRegistry = getAddressFromTwoKeySingletonRegistry(_twoKeyMaintainersRegistry); ITwoKeyMaintainersRegistry(twoKeyMaintainersRegistry).addMaintainers(_maintainers); } /** * @notice Function to forward call from congress to the Maintainers Registry and remove core devs * * @param _coreDevs is the array of core devs to be removed from the system */ function removeCoreDevsFromMaintainersRegistry( address [] _coreDevs ) external onlyTwoKeyCongress { address twoKeyMaintainersRegistry = getAddressFromTwoKeySingletonRegistry(_twoKeyMaintainersRegistry); ITwoKeyMaintainersRegistry(twoKeyMaintainersRegistry).removeCoreDevs(_coreDevs); } /** * @notice Function to forward call from congress to the Maintainers Registry and remove maintainers * * @param _maintainers is the array of maintainers to be removed from the system */ function removeMaintainersFromMaintainersRegistry( address [] _maintainers ) external onlyTwoKeyCongress { address twoKeyMaintainersRegistry = getAddressFromTwoKeySingletonRegistry(_twoKeyMaintainersRegistry); ITwoKeyMaintainersRegistry(twoKeyMaintainersRegistry).removeMaintainers(_maintainers); } /** * @notice Function to freeze all transfers for 2KEY token * Which means that no one transfer of ERC20 2KEY can be performed * @dev Restricted only to TwoKeyCongress contract */ function freezeTransfersInEconomy() external onlyTwoKeyCongress { address twoKeyEconomy = getNonUpgradableContractAddressFromTwoKeySingletonRegistry(_twoKeyEconomy); IERC20(twoKeyEconomy).freezeTransfers(); } /** * @notice Function to unfreeze all transfers for 2KEY token * * @dev Restricted only to TwoKeyCongress contract */ function unfreezeTransfersInEconomy() external onlyTwoKeyCongress { address twoKeyEconomy = getNonUpgradableContractAddressFromTwoKeySingletonRegistry(_twoKeyEconomy); IERC20(twoKeyEconomy).unfreezeTransfers(); } /** * @notice Function to transfer 2key tokens from the admin contract * @dev only TwoKeyCongress can call this function * @param _to is address representing tokens receiver * @param _amount is the amount of tokens to be transferred */ function transfer2KeyTokens( address _to, uint256 _amount ) external onlyTwoKeyCongress returns (bool) { address twoKeyEconomy = getNonUpgradableContractAddressFromTwoKeySingletonRegistry(_twoKeyEconomy); bool completed = IERC20(twoKeyEconomy).transfer(_to, _amount); return completed; } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ACCOUNTING (BOOKKEEPING) NECESSARY STUFF * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /** * @notice Function to update whenever some funds are arriving to TwoKeyAdmin * from TwoKeyFeeManager contract * * @param currency is in which currency contract received asset * @param amount is the amount which is received */ function addFeesCollectedInCurrency( string currency, uint amount ) public payable onlyTwoKeyFeeManager { bytes32 key = keccak256(_feesFromFeeManagerCollectedInCurrency, currency); uint feesCollectedFromFeeManagerInCurrency = PROXY_STORAGE_CONTRACT.getUint(key); PROXY_STORAGE_CONTRACT.setUint(key, feesCollectedFromFeeManagerInCurrency.add(amount)); } // /** // * @notice Function to handle and update state every time there's an // * income from Kyber network fees // * // * @param amount is the amount contract have received from there // */ // function addFeesCollectedFromKyber( // uint amount // ) // internal // { // bytes32 key = keccak256(_feesCollectedFromKyber); // uint feesCollectedFromKyber = PROXY_STORAGE_CONTRACT.getUint(key); // PROXY_STORAGE_CONTRACT.setUint(key, feesCollectedFromKyber.add(amount)); // } // /** // * @notice Function to withdraw fees collected on Kyber contract to Admin contract // * // * @param reserveContract is the address of kyber reserve contract for 2KEY token // * @param pricingContract is the address of kyber pricing contract for 2KEY token // */ // function withdrawFeesFromKyber( // address reserveContract, // address pricingContract // ) // external // onlyTwoKeyCongress // { // disableTradeInKyberInternal(reserveContract); // uint availableFees = getKyberAvailableFeesOnReserve(pricingContract); // withdrawTokensFromKyberReserveInternal( // reserveContract, // ERC20(getNonUpgradableContractAddressFromTwoKeySingletonRegistry(_twoKeyEconomy)), // availableFees, // address(this) // ); // resetFeesCounterOnKyberContract(pricingContract); // enableTradeInKyberInternal(reserveContract); // addFeesCollectedFromKyber(availableFees); // } /** * @notice Function to withdraw DAI we have on TwoKeyUpgradableExchange contract * * @param _amountOfTokens is the amount of the tokens we're willing to withdraw * * @dev Restricted only to TwoKeyCongress contract */ function withdrawDAIAvailableToFillReserveFromUpgradableExchange( uint _amountOfTokens ) external onlyTwoKeyCongress { address twoKeyUpgradableExchange = getAddressFromTwoKeySingletonRegistry(_twoKeyUpgradableExchange); uint collectedDAI = IUpgradableExchange(twoKeyUpgradableExchange).withdrawDAIAvailableToFill2KEYReserve(_amountOfTokens); bytes32 key = keccak256(_daiCollectedFromUpgradableExchange); uint _amountWithdrawnCurrently = PROXY_STORAGE_CONTRACT.getUint(key); PROXY_STORAGE_CONTRACT.setUint(key, _amountWithdrawnCurrently.add(collectedDAI)); } /** * @notice Function to withdraw moderator earnings from TwoKeyAdmin contract * If 0 is passed as amountToBeWithdrawn, everything available will * be withdrawn * * @param beneficiary is the address which is receiving tokens * @param amountToBeWithdrawn is the amount of tokens which will be withdrawn */ function withdrawModeratorEarningsFromAdmin( address beneficiary, uint amountToBeWithdrawn ) public onlyTwoKeyCongress { uint moderatorEarningsReceived = getAmountOfTokensReceivedAsModerator(); uint moderatorEarningsWithdrawn = getAmountOfTokensWithdrawnFromModeratorEarnings(); if(amountToBeWithdrawn == 0) { amountToBeWithdrawn = moderatorEarningsReceived.sub(moderatorEarningsWithdrawn); } else { require(amountToBeWithdrawn <= moderatorEarningsReceived.sub(moderatorEarningsWithdrawn)); } transferTokens(_twoKeyEconomy, beneficiary, amountToBeWithdrawn); bytes32 keyHash = keccak256(_amountWithdrawnFromModeratorEarningsPool); PROXY_STORAGE_CONTRACT.setUint(keyHash, moderatorEarningsWithdrawn.add(amountToBeWithdrawn)); } // function burnModeratorEarnings() //TODO: Add function to BURN moderator earnings from Admin (send to 0x0) //TODO: For all WITHDRAW funnels if amountToBeWithdrawn = 0 then withdraw/burn everything which is there function withdrawFeeManagerEarningsFromAdmin( address beneficiary, string currency, uint amountToBeWithdrawn ) public onlyTwoKeyCongress { uint feeManagerEarningsInCurrency = getAmountCollectedFromFeeManagerInCurrency(currency); uint feeManagerEarningsWithdrawn = getAmountWithdrawnFromFeeManagerEarningsInCurrency(currency); if(amountToBeWithdrawn == 0) { amountToBeWithdrawn = feeManagerEarningsInCurrency.sub(feeManagerEarningsWithdrawn); } else { require(feeManagerEarningsInCurrency.sub(feeManagerEarningsWithdrawn) >= amountToBeWithdrawn); } if(keccak256(currency) == keccak256("ETH")) { beneficiary.transfer(amountToBeWithdrawn); } else { transferTokens(currency, beneficiary, amountToBeWithdrawn); } PROXY_STORAGE_CONTRACT.setUint(keccak256(_amountWithdrawnFromFeeManagerPoolInCurrency,currency), feeManagerEarningsWithdrawn.add(amountToBeWithdrawn)); } /** * @notice Function to withdraw earnings collected from Kyber fees from Admin contract * * @param beneficiary is the address which is receiving tokens * @param amountToBeWithdrawn is the amount of tokens to be withdrawn */ function withdrawKyberFeesEarningsFromAdmin( address beneficiary, uint amountToBeWithdrawn ) public onlyTwoKeyCongress { uint kyberTotalReceived = getAmountCollectedFromKyber(); uint kyberTotalWithdrawn = getAmountWithdrawnFromKyberEarnings(); if(amountToBeWithdrawn == 0) { amountToBeWithdrawn = kyberTotalReceived.sub(kyberTotalWithdrawn); } else { require(amountToBeWithdrawn <= kyberTotalReceived.sub(kyberTotalWithdrawn)); } transferTokens(_twoKeyEconomy, beneficiary, amountToBeWithdrawn); PROXY_STORAGE_CONTRACT.setUint( keccak256(_amountWithdrawnFromKyberFeesPool), kyberTotalWithdrawn.add(amountToBeWithdrawn) ); } /** * @notice Function to withdraw DAI collected from UpgradableExchange from Admin * * @param beneficiary is the address which is receiving tokens * @param amountToBeWithdrawn is the amount of tokens to be withdrawns */ function withdrawUpgradableExchangeDaiCollectedFromAdmin( address beneficiary, uint amountToBeWithdrawn ) public onlyTwoKeyCongress { uint totalDAICollectedFromPool = getAmountCollectedInDAIFromUpgradableExchange(); uint totalDAIWithdrawnFromPool = getAmountWithdrawnFromCollectedDAIUpgradableExchangeEarnings(); if (amountToBeWithdrawn == 0) { amountToBeWithdrawn = totalDAICollectedFromPool.sub(totalDAIWithdrawnFromPool); } else { require(totalDAIWithdrawnFromPool.add(amountToBeWithdrawn) <= totalDAICollectedFromPool); } transferTokens(_DAI_TOKEN, beneficiary, amountToBeWithdrawn); PROXY_STORAGE_CONTRACT.setUint(keccak256(_amountWithdrawnFromCollectedDaiFromUpgradableExchange), totalDAIWithdrawnFromPool.add(amountToBeWithdrawn)); } function withdrawFeesCollectedFromDistributionRewards( address beneficiary, uint amountToWithdraw ) public onlyTwoKeyCongress { uint totalFeesCollected = getAmountOfTokensReceivedFromDistributionFees(); uint totalFeesWithdrawn = getAmountOfTokensWithdrawnFromDistributionFees(); if (amountToWithdraw == 0) { amountToWithdraw = totalFeesCollected.sub(totalFeesWithdrawn); } else { require(totalFeesWithdrawn.add(amountToWithdraw) <= totalFeesCollected); } transferTokens(_twoKeyEconomy, beneficiary, amountToWithdraw); PROXY_STORAGE_CONTRACT.setUint(keccak256(_amountWithdrawnFromCollectedDistributionRewards), totalFeesWithdrawn.add(amountToWithdraw)); } /** * @notice Function for PPC campaigns to update received tokens */ function updateReceivedTokensAsModeratorPPC( uint amountOfTokens, address campaignPlasma ) public onlyTwoKeyBudgetCampaignsPaymentsHandler { updateTokensReceivedAsModeratorInternal(amountOfTokens, campaignPlasma); } /** * @notice Function to update tokens received from distribution fees * @param amountOfTokens is the amount of tokens to be sent to admin */ function updateTokensReceivedFromDistributionFees( uint amountOfTokens ) public onlyTwoKeyBudgetCampaignsPaymentsHandler { uint amountCollected = getAmountOfTokensReceivedFromDistributionFees(); PROXY_STORAGE_CONTRACT.setUint( keccak256(_feesCollectedFromDistributionRewards), amountCollected.add(amountOfTokens) ); } /** * @notice Function which will be used take the tokens from the campaign and distribute * them between itself and TwoKeyDeepFreezeTokenPool * * @param amountOfTokens is the amount of the tokens which are for moderator rewards */ function updateReceivedTokensAsModerator( uint amountOfTokens ) public onlyAllowedContracts { uint moderatorTokens = updateTokensReceivedAsModeratorInternal(amountOfTokens, msg.sender); //Update moderator earnings to campaign ITwoKeyCampaign(msg.sender).updateModeratorRewards(moderatorTokens); } function updateTokensReceivedAsModeratorInternal( uint amountOfTokens, address campaignAddress ) internal returns (uint) { // Network fee which will be taken from moderator uint networkFee = getDefaultNetworkTaxPercent(); uint moderatorTokens = amountOfTokens.mul(100 - networkFee).div(100); bytes32 keyHashTotalRewards = keccak256(_rewardsReceivedAsModeratorTotal); PROXY_STORAGE_CONTRACT.setUint(keyHashTotalRewards, moderatorTokens.add((PROXY_STORAGE_CONTRACT.getUint(keyHashTotalRewards)))); //Emit event through TwoKeyEventSource for the campaign ITwoKeyEventSource(getAddressFromTwoKeySingletonRegistry(_twoKeyEventSource)).emitReceivedTokensAsModerator(campaignAddress, moderatorTokens); //Now update twoKeyDeepFreezeTokenPool address twoKeyEconomy = getNonUpgradableContractAddressFromTwoKeySingletonRegistry(_twoKeyEconomy); address deepFreezeTokenPool = getAddressFromTwoKeySingletonRegistry("TwoKeyDeepFreezeTokenPool"); uint tokensForDeepFreezeTokenPool = amountOfTokens.sub(moderatorTokens); //Transfer tokens to deep freeze token pool transferTokens(_twoKeyEconomy, deepFreezeTokenPool, tokensForDeepFreezeTokenPool); //Update contract on receiving tokens ITwoKeyDeepFreezeTokenPool(deepFreezeTokenPool).updateReceivedTokensForSuccessfulConversions(tokensForDeepFreezeTokenPool, campaignAddress); // Compute the hash for the storage for moderator earnings per campaign bytes32 keyHashEarningsPerCampaign = keccak256(_moderatorEarningsPerCampaign, campaignAddress); // Take the current earnings uint currentEarningsForThisCampaign = PROXY_STORAGE_CONTRACT.getUint(keyHashEarningsPerCampaign); // Increase them by earnings added now and store PROXY_STORAGE_CONTRACT.setUint(keyHashEarningsPerCampaign, currentEarningsForThisCampaign.add(moderatorTokens)); return moderatorTokens; } // /** // * @notice Function to call setLiquidityParams on LiquidityConversionRates.sol // * contract, it can be called only by TwoKeyAdmin.sol contract // * // * @param liquidityConversionRatesContractAddress is the address of liquidity conversion rates contract // the right address depending on environment can be found in configurationFiles/kyberAddresses.json // It's named "pricing" in the json object // */ // function setLiquidityParametersInKyber( // address liquidityConversionRatesContractAddress, // uint _rInFp, // uint _pMinInFp, // uint _numFpBits, // uint _maxCapBuyInWei, // uint _maxCapSellInWei, // uint _feeInBps, // uint _maxTokenToEthRateInPrecision, // uint _minTokenToEthRateInPrecision // ) // public // onlyTwoKeyCongress // { // // Call on the contract set liquidity params // IKyberReserveInterface(liquidityConversionRatesContractAddress).setLiquidityParams( // _rInFp, // _pMinInFp, // _numFpBits, // _maxCapBuyInWei, // _maxCapSellInWei, // _feeInBps, // _maxTokenToEthRateInPrecision, // _minTokenToEthRateInPrecision // ); // } // // // /** // * @notice Contract to disable trade through Kyber // * // * @param reserveContract is the address of reserve contract // */ // function disableTradeInKyber( // address reserveContract // ) // external // onlyTwoKeyCongress // { // disableTradeInKyberInternal(reserveContract); // } // // function disableTradeInKyberInternal( // address reserveContract // ) // internal // { // IKyberReserveInterface(reserveContract).disableTrade(); // } // // // /** // * @notice Contract to enable trade through Kyber // * // * @param reserveContract is the address of reserve contract // */ // function enableTradeInKyber( // address reserveContract // ) // external // onlyTwoKeyCongress // { // enableTradeInKyberInternal(reserveContract); // } // // function enableTradeInKyberInternal( // address reserveContract // ) // internal // { // IKyberReserveInterface(reserveContract).enableTrade(); // } // // function getKyberAvailableFeesOnReserve( // address pricingContract // ) // internal // view // returns (uint) // { // return IKyberReserveInterface(pricingContract).collectedFeesInTwei(); // } // // // function resetFeesCounterOnKyberContract( // address pricingContract // ) // internal // { // IKyberReserveInterface(pricingContract).resetCollectedFees(); // } // // // /** // * @notice Function to call withdraw on KyberReserve.sol contract // * It can be only called by TwoKeyAdmin.sol contract // * // * @param kyberReserveContractAddress is the address of kyber reserve contract // * right address depending on environment can be found in configurationFiles/kyberAddresses.json // It's named "reserve" in the json object. // */ // function withdrawTokensFromKyberReserve( // address kyberReserveContractAddress, // ERC20 tokenToWithdraw, // uint amountToBeWithdrawn, // address receiverAddress // ) // external // onlyTwoKeyCongress // { // withdrawTokensFromKyberReserveInternal( // kyberReserveContractAddress, // tokenToWithdraw, // amountToBeWithdrawn, // receiverAddress // ); // } // /** // * @notice Function to set contracts on Kyber, mostly used to swap from their // * staging and production environments // * // * @param kyberReserveContractAddress is our reserve contract address // * @param kyberNetworkAddress is the address of kyber network // * @param conversionRatesContractAddress is the address of conversion rates contract // * @param sanityRatesContractAddress is the address of sanity rates contract // */ // function setContractsKyber( // address kyberReserveContractAddress, // address kyberNetworkAddress, // address conversionRatesContractAddress, // address sanityRatesContractAddress // ) // external // onlyTwoKeyCongress // { // IKyberReserveInterface(kyberReserveContractAddress).setContracts( // kyberNetworkAddress, // conversionRatesContractAddress, // sanityRatesContractAddress // ); // } // // function withdrawTokensFromKyberReserveInternal( // address kyberReserveContractAddress, // ERC20 tokenToWithdraw, // uint amountToBeWithdrawn, // address receiverAddress // ) // internal // { // IKyberReserveInterface(kyberReserveContractAddress).withdrawToken( // tokenToWithdraw, // amountToBeWithdrawn, // receiverAddress // ); // } /** * @notice Function to get uint from the storage * * @param key is the name of the key in the storages */ function getUint( string key ) internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(key)); } /** * @notice Setter for all integers we'd like to store * * @param key is the key (var name) * @param value is the value of integer we'd like to store */ function setUint( string key, uint value ) internal { PROXY_STORAGE_CONTRACT.setUint(keccak256(key), value); } /** * @notice Getter for moderator earnings per campaign * * @param _campaignAddress is the address of the campaign we're searching for moderator earnings */ function getModeratorEarningsPerCampaign( address _campaignAddress ) public view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_moderatorEarningsPerCampaign, _campaignAddress)); } /** * @notice Function to return the release date when 2KEY token can be withdrawn from the * network */ function getTwoKeyRewardsReleaseDate() external view returns(uint) { return getUint(_rewardReleaseAfter); } /** * @notice Getter for default moderator percent he takes */ function getDefaultIntegratorFeePercent() public view returns (uint) { return getUint(_twoKeyIntegratorDefaultFeePercent); } /** * @notice Getter for network tax percent which is taken from moderator */ function getDefaultNetworkTaxPercent() public view returns (uint) { return getUint(_twoKeyNetworkTaxPercent); } /** * @notice Setter in case TwoKeyCongress decides to change integrator fee percent */ function setDefaultIntegratorFeePercent( uint newFeePercent ) external onlyTwoKeyCongress { PROXY_STORAGE_CONTRACT.setUint(keccak256(_twoKeyIntegratorDefaultFeePercent),newFeePercent); } /** * @notice Getter to check how many total tokens TwoKeyAdmin received as a moderator from * various campaign contracts running on 2key.network */ function getAmountOfTokensReceivedAsModerator() public view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_rewardsReceivedAsModeratorTotal)); } function getAmountOfTokensReceivedFromDistributionFees() public view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_feesCollectedFromDistributionRewards)); } function getAmountOfTokensWithdrawnFromDistributionFees() public view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_amountWithdrawnFromCollectedDistributionRewards)); } function getAmountCollectedFromFeeManagerInCurrency( string currency ) internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_feesFromFeeManagerCollectedInCurrency, currency)); } function getAmountCollectedFromKyber() internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_feesCollectedFromKyber)); } function getAmountCollectedInDAIFromUpgradableExchange() internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_daiCollectedFromUpgradableExchange)); } function getAmountOfTokensWithdrawnFromModeratorEarnings() internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_amountWithdrawnFromModeratorEarningsPool)); } function getAmountWithdrawnFromFeeManagerEarningsInCurrency( string currency ) internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_amountWithdrawnFromFeeManagerPoolInCurrency,currency)); } function getAmountWithdrawnFromKyberEarnings() internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_amountWithdrawnFromKyberFeesPool)); } function getAmountWithdrawnFromCollectedDAIUpgradableExchangeEarnings() internal view returns (uint) { return PROXY_STORAGE_CONTRACT.getUint(keccak256(_amountWithdrawnFromCollectedDaiFromUpgradableExchange)); } function transferTokens( string token, address beneficiary, uint amount ) internal { IERC20(getNonUpgradableContractAddressFromTwoKeySingletonRegistry(token)).transfer( beneficiary, amount ); } function getAccountingReport() public view returns (bytes) { return ( abi.encodePacked( getAmountOfTokensReceivedAsModerator(), getAmountCollectedFromFeeManagerInCurrency("DAI"), getAmountCollectedFromFeeManagerInCurrency("ETH"), getAmountCollectedFromFeeManagerInCurrency("2KEY"), getAmountCollectedFromKyber(), getAmountCollectedInDAIFromUpgradableExchange(), getAmountOfTokensReceivedFromDistributionFees(), getAmountOfTokensWithdrawnFromModeratorEarnings(), getAmountWithdrawnFromKyberEarnings(), getAmountWithdrawnFromCollectedDAIUpgradableExchangeEarnings(), getAmountWithdrawnFromFeeManagerEarningsInCurrency("DAI"), getAmountWithdrawnFromFeeManagerEarningsInCurrency("ETH"), getAmountWithdrawnFromFeeManagerEarningsInCurrency("2KEY"), getAmountOfTokensWithdrawnFromDistributionFees() ) ); } /** * @notice Free ether is always accepted :) */ function() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"freezeTransfersInEconomy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amountOfTokens","type":"uint256"},{"name":"campaignPlasma","type":"address"}],"name":"updateReceivedTokensAsModeratorPPC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PROXY_STORAGE_CONTRACT","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_coreDevs","type":"address[]"}],"name":"removeCoreDevsFromMaintainersRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_coreDevs","type":"address[]"}],"name":"addCoreDevsToMaintainerRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unfreezeTransfersInEconomy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDefaultIntegratorFeePercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAmountOfTokensWithdrawnFromDistributionFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAmountOfTokensReceivedAsModerator","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maintainers","type":"address[]"}],"name":"addMaintainersToMaintainersRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDefaultNetworkTaxPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amountOfTokens","type":"uint256"}],"name":"updateReceivedTokensAsModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_twoKeySingletonRegistry","type":"address"},{"name":"_proxyStorageContract","type":"address"},{"name":"_twoKeyTokenReleaseDate","type":"uint256"}],"name":"setInitialParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_campaignAddress","type":"address"}],"name":"getModeratorEarningsPerCampaign","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amountOfTokens","type":"uint256"}],"name":"updateTokensReceivedFromDistributionFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amountToBeWithdrawn","type":"uint256"}],"name":"withdrawKyberFeesEarningsFromAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"currency","type":"string"},{"name":"amountToBeWithdrawn","type":"uint256"}],"name":"withdrawFeeManagerEarningsFromAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TWO_KEY_SINGLETON_REGISTRY","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAmountOfTokensReceivedFromDistributionFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amountToBeWithdrawn","type":"uint256"}],"name":"withdrawModeratorEarningsFromAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"currency","type":"string"},{"name":"amount","type":"uint256"}],"name":"addFeesCollectedInCurrency","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer2KeyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferEtherByAdmins","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAccountingReport","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maintainers","type":"address[]"}],"name":"removeMaintainersFromMaintainersRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"}],"name":"initialize","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amountToBeWithdrawn","type":"uint256"}],"name":"withdrawUpgradableExchangeDaiCollectedFromAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTwoKeyRewardsReleaseDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amountToWithdraw","type":"uint256"}],"name":"withdrawFeesCollectedFromDistributionRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amountOfTokens","type":"uint256"}],"name":"withdrawDAIAvailableToFillReserveFromUpgradableExchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newFeePercent","type":"uint256"}],"name":"setDefaultIntegratorFeePercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"}]
Contract Creation Code
60806040526000600260146101000a81548160ff02191690831515021790555034801561002b57600080fd5b50615627806200003c6000396000f300608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630729d5e1146101985780630c644a1b146101af578063105005a1146101fc578063168480101461025357806322fdcc101461028e578063264198ad146102c957806327fe7641146102e057806343d884321461030b578063490e543e146103365780634c1c1a04146103615780635795aa561461039c5780635c60da1b146103c75780635fb6b16a1461041e578063627c98051461044b5780636975caee146104b85780636c4876921461050f57806375f64ebd1461053c5780637d434a89146105895780638830afa01461061c578063892d083b1461067357806391c7645a1461069e5780639ff07564146106eb5780639ffe94d914610751578063a3b688f2146107b6578063ba754f3914610803578063bfe41ddb14610893578063c4d66de8146108ce578063cbdde3d714610904578063f0cd4dce14610951578063f41ca86a1461097c578063f561cd83146109c9578063f87f9167146109f6575b005b3480156101a457600080fd5b506101ad610a23565b005b3480156101bb57600080fd5b506101fa60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5b565b005b34801561020857600080fd5b50610211610c0e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025f57600080fd5b5061028c600480360381019080803590602001908201803590602001919091929391929390505050610c34565b005b34801561029a57600080fd5b506102c7600480360381019080803590602001908201803590602001919091929391929390505050610d96565b005b3480156102d557600080fd5b506102de610ef8565b005b3480156102ec57600080fd5b506102f5611030565b6040518082815260200191505060405180910390f35b34801561031757600080fd5b5061032061109c565b6040518082815260200191505060405180910390f35b34801561034257600080fd5b5061034b611235565b6040518082815260200191505060405180910390f35b34801561036d57600080fd5b5061039a6004803603810190808035906020019082018035906020019190919293919293905050506113a7565b005b3480156103a857600080fd5b506103b1611509565b6040518082815260200191505060405180910390f35b3480156103d357600080fd5b506103dc61154e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042a57600080fd5b5061044960048036038101908080359060200190929190505050611578565b005b34801561045757600080fd5b506104b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061173b565b005b3480156104c457600080fd5b506104f9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e5565b6040518082815260200191505060405180910390f35b34801561051b57600080fd5b5061053a60048036038101908080359060200190929190505050611a9c565b005b34801561054857600080fd5b50610587600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cd8565b005b34801561059557600080fd5b5061061a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050611f53565b005b34801561062857600080fd5b5061063161230c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067f57600080fd5b50610688612332565b6040518082815260200191505060405180910390f35b3480156106aa57600080fd5b506106e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124cb565b005b61074f600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050612773565b005b34801561075d57600080fd5b5061079c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612aaa565b604051808215151515815260200191505060405180910390f35b3480156107c257600080fd5b50610801600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c51565b005b34801561080f57600080fd5b50610818612d4f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085857808201518184015260208101905061083d565b50505050905090810190601f1680156108855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561089f57600080fd5b506108cc600480360381019080803590602001908201803590602001919091929391929390505050612f84565b005b610902600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130e6565b005b34801561091057600080fd5b5061094f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613144565b005b34801561095d57600080fd5b506109666133e6565b6040518082815260200191505060405180910390f35b34801561098857600080fd5b506109c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061342b565b005b3480156109d557600080fd5b506109f4600480360381019080803590602001909291905050506136cd565b005b348015610a0257600080fd5b50610a2160048036038101908080359060200190929190505050613a9f565b005b6000610a636040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a9c57600080fd5b610ada6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b90508073ffffffffffffffffffffffffffffffffffffffff1663015024606040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015610b4057600080fd5b505af1158015610b54573d6000803e3d6000fd5b5050505050565b6000610bc2606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bfe57600080fd5b610c088383613f04565b50505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c746040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cad57600080fd5b610ceb6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff1663a7510dd784846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b158015610d7957600080fd5b505af1158015610d8d573d6000803e3d6000fd5b50505050505050565b6000610dd66040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e0f57600080fd5b610e4d6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff166327d8fa0984846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b50505050505050565b6000610f386040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f7157600080fd5b610faf6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b90508073ffffffffffffffffffffffffffffffffffffffff166331c420d46040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b5050505050565b6000611097606060405190810160405280602181526020017f74776f4b6579496e7465677261746f7244656661756c7446656550657263656e81526020017f7400000000000000000000000000000000000000000000000000000000000000815250614696565b905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602f81526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644469737481526020017f7269627574696f6e5265776172647300000000000000000000000000000000008152506040518082805190602001908083835b60208310151561116e5780518252602082019150602081019050602083039250611149565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156111f557600080fd5b505af1158015611209573d6000803e3d6000fd5b505050506040513d602081101561121f57600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280601f81526020017f72657761726473526563656976656441734d6f64657261746f72546f74616c008152506040518082805190602001908083835b6020831015156112e057805182526020820191506020810190506020830392506112bb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b8101908080519060200190929190505050905090565b60006113e76040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561142057600080fd5b61145e6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff16631d4bf2c984846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b1580156114ec57600080fd5b505af1158015611500573d6000803e3d6000fd5b50505050505050565b60006115496040805190810160405280601781526020017f74776f4b65794e6574776f726b54617850657263656e74000000000000000000815250614696565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806115b96040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613dca565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b505050506040513d602081101561168457600080fd5b810190808051906020019092919050505015151415156116a357600080fd5b6116ad8333613f04565b91503373ffffffffffffffffffffffffffffffffffffffff16639dd222b4836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561171e57600080fd5b505af1158015611732573d6000803e3d6000fd5b50505050505050565b60001515600260149054906101000a900460ff16151514151561175d57600080fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611846606060405190810160405280602181526020017f74776f4b6579496e7465677261746f7244656661756c7446656550657263656e81526020017f740000000000000000000000000000000000000000000000000000000000000081525060026147d5565b6118866040805190810160405280601781526020017f74776f4b65794e6574776f726b54617850657263656e7400000000000000000081525060196147d5565b6118c56040805190810160405280601281526020017f72657761726452656c6561736541667465720000000000000000000000000000815250826147d5565b6001600260146101000a81548160ff021916908315150217905550505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280601c81526020017f6d6f64657261746f724561726e696e677350657243616d706169676e00000000815250846040518083805190602001908083835b602083101515611991578051825260208201915060208101905060208303925061196c565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611a5a57600080fd5b505af1158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b81019080805190602001909291905050509050919050565b600080611b04606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b4057600080fd5b611b48612332565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602481526020017f66656573436f6c6c656374656446726f6d446973747269627574696f6e52657781526020017f61726473000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515611c1a5780518252602082019150602081019050602083039250611bf5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020611c5a86866148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015611cbb57600080fd5b505af1158015611ccf573d6000803e3d6000fd5b50505050505050565b600080611d196040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d5257600080fd5b611d5a614913565b9150611d64614a85565b90506000831415611d8957611d828183614bf790919063ffffffff16565b9250611dab565b611d9c8183614bf790919063ffffffff16565b8311151515611daa57600080fd5b5b611deb6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508585614c13565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a6040805190810160405280602081526020017f616d6f756e7457697468647261776e46726f6d4b7962657246656573506f6f6c8152506040518082805190602001908083835b602083101515611e945780518252602082019150602081019050602083039250611e6f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020611ed486856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b5050505050505050565b600080611f946040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fcd57600080fd5b611fd684614cff565b9150611fe184614eef565b9050600083141561200657611fff8183614bf790919063ffffffff16565b9250612028565b8261201a8284614bf790919063ffffffff16565b1015151561202757600080fd5b5b60405180807f45544800000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060001916846040518082805190602001908083835b6020831015156120985780518252602082019150602081019050602083039250612073565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916141561211b578473ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612115573d6000803e3d6000fd5b50612127565b612126848685614c13565b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602b81526020017f616d6f756e7457697468647261776e46726f6d4665654d616e61676572506f6f81526020017f6c496e43757272656e6379000000000000000000000000000000000000000000815250866040518083805190602001908083835b6020831015156121f857805182526020820191506020810190506020830392506121d3565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310151561224b5780518252602082019150602081019050602083039250612226565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051809103902061228c86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156122ed57600080fd5b505af1158015612301573d6000803e3d6000fd5b505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602481526020017f66656573436f6c6c656374656446726f6d446973747269627574696f6e52657781526020017f61726473000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561240457805182526020820191506020810190506020830392506123df565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561248b57600080fd5b505af115801561249f573d6000803e3d6000fd5b505050506040513d60208110156124b557600080fd5b8101908080519060200190929190505050905090565b600080600061250e6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561254757600080fd5b61254f611235565b92506125596150df565b9150600084141561257e576125778284614bf790919063ffffffff16565b93506125a0565b6125918284614bf790919063ffffffff16565b841115151561259f57600080fd5b5b6125e06040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508686614c13565b606060405190810160405280602881526020017f616d6f756e7457697468647261776e46726f6d4d6f64657261746f724561726e81526020017f696e6773506f6f6c0000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612672578051825260208201915060208101905060208303925061264d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a826126f387866148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050505050565b6000806127b46040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613dca565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127ed57600080fd5b606060405190810160405280602581526020017f6665657346726f6d4665654d616e61676572436f6c6c6563746564496e43757281526020017f72656e6379000000000000000000000000000000000000000000000000000000815250846040518083805190602001908083835b602083101515612880578051825260208201915060208101905060208303925061285b565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831015156128d357805182526020820191506020810190506020830392506128ae565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405180910390209150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b505050506040513d60208110156129c657600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a83612a2b86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b5050505050505050565b6000806000612aed6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b2657600080fd5b612b646040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b91508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b81019080805190602001909291905050509050809250505092915050565b612c8f6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cc857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612d0457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d4a573d6000803e3d6000fd5b505050565b6060612d59611235565b612d976040805190810160405280600381526020017f4441490000000000000000000000000000000000000000000000000000000000815250614cff565b612dd56040805190810160405280600381526020017f4554480000000000000000000000000000000000000000000000000000000000815250614cff565b612e136040805190810160405280600481526020017f324b455900000000000000000000000000000000000000000000000000000000815250614cff565b612e1b614913565b612e23615278565b612e2b612332565b612e336150df565b612e3b614a85565b612e43615411565b612e816040805190810160405280600381526020017f4441490000000000000000000000000000000000000000000000000000000000815250614eef565b612ebf6040805190810160405280600381526020017f4554480000000000000000000000000000000000000000000000000000000000815250614eef565b612efd6040805190810160405280600481526020017f324b455900000000000000000000000000000000000000000000000000000000815250614eef565b612f0561109c565b604051602001808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e505050505050505050505050505050604051602081830303815290604052905090565b6000612fc46040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ffd57600080fd5b61303b6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff1663705a483b84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b1580156130c957600080fd5b505af11580156130dd573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561314157600080fd5b50565b6000806131856040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131be57600080fd5b6131c6615278565b91506131d0615411565b905060008314156131f5576131ee8183614bf790919063ffffffff16565b9250613217565b8161320984836148f490919063ffffffff16565b1115151561321657600080fd5b5b6132576040805190810160405280600381526020017f44414900000000000000000000000000000000000000000000000000000000008152508585614c13565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280603581526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644461694681526020017f726f6d55706772616461626c6545786368616e676500000000000000000000008152506040518082805190602001908083835b6020831015156133275780518252602082019150602081019050602083039250613302565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902061336786856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156133c857600080fd5b505af11580156133dc573d6000803e3d6000fd5b5050505050505050565b60006134266040805190810160405280601281526020017f72657761726452656c6561736541667465720000000000000000000000000000815250614696565b905090565b60008061346c6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134a557600080fd5b6134ad612332565b91506134b761109c565b905060008314156134dc576134d58183614bf790919063ffffffff16565b92506134fe565b816134f084836148f490919063ffffffff16565b111515156134fd57600080fd5b5b61353e6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508585614c13565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602f81526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644469737481526020017f7269627574696f6e5265776172647300000000000000000000000000000000008152506040518082805190602001908083835b60208310151561360e57805182526020820191506020810190506020830392506135e9565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902061364e86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156136af57600080fd5b505af11580156136c3573d6000803e3d6000fd5b5050505050505050565b6000806000806137116040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561374a57600080fd5b6137886040805190810160405280601881526020017f54776f4b657955706772616461626c6545786368616e67650000000000000000815250613dca565b93508373ffffffffffffffffffffffffffffffffffffffff1663edacdbee866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156137f957600080fd5b505af115801561380d573d6000803e3d6000fd5b505050506040513d602081101561382357600080fd5b81019080805190602001909291905050509250606060405190810160405280602281526020017f646169436f6c6c656374656446726f6d55706772616461626c6545786368616e81526020017f67650000000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156138c857805182526020820191506020810190506020830392506138a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561399057600080fd5b505af11580156139a4573d6000803e3d6000fd5b505050506040513d60208110156139ba57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a83613a1f86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015613a8057600080fd5b505af1158015613a94573d6000803e3d6000fd5b505050505050505050565b613add6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613b1657600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602181526020017f74776f4b6579496e7465677261746f7244656661756c7446656550657263656e81526020017f74000000000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515613be65780518252602082019150602081019050602083039250613bc1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015613c7557600080fd5b505af1158015613c89573d6000803e3d6000fd5b5050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f716c79a836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d3c578082015181840152602081019050613d21565b50505050905090810190601f168015613d695780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015613d8857600080fd5b505af1158015613d9c573d6000803e3d6000fd5b505050506040513d6020811015613db257600080fd5b81019080805190602001909291905050509050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db7a6d90836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e76578082015181840152602081019050613e5b565b50505050905090810190601f168015613ea35780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015613ec257600080fd5b505af1158015613ed6573d6000803e3d6000fd5b505050506040513d6020811015613eec57600080fd5b81019080805190602001909291905050509050919050565b6000806000806000806000806000613f1a611509565b9750613f456064613f378a6064038e6155aa90919063ffffffff16565b6155e590919063ffffffff16565b96506040805190810160405280601f81526020017f72657761726473526563656976656441734d6f64657261746f72546f74616c008152506040518082805190602001908083835b602083101515613fb25780518252602082019150602081019050602083039250613f8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a87614106600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f58b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156140bc57600080fd5b505af11580156140d0573d6000803e3d6000fd5b505050506040513d60208110156140e657600080fd5b81019080805190602001909291905050508b6148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561416757600080fd5b505af115801561417b573d6000803e3d6000fd5b505050506141bd6040805190810160405280601181526020017f54776f4b65794576656e74536f75726365000000000000000000000000000000815250613dca565b73ffffffffffffffffffffffffffffffffffffffff16630ab6839a8b896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561425f57600080fd5b505af1158015614273573d6000803e3d6000fd5b505050506142b56040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b94506142f56040805190810160405280601981526020017f54776f4b657944656570467265657a65546f6b656e506f6f6c00000000000000815250613dca565b935061430a878c614bf790919063ffffffff16565b925061434c6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508585614c13565b8373ffffffffffffffffffffffffffffffffffffffff16639da1d2c1848c6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156143ef57600080fd5b505af1158015614403573d6000803e3d6000fd5b505050506040805190810160405280601c81526020017f6d6f64657261746f724561726e696e677350657243616d706169676e000000008152508a6040518083805190602001908083835b602083101515614473578051825260208201915060208101905060208303925061444e565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405180910390209150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561457d57600080fd5b505af1158015614591573d6000803e3d6000fd5b505050506040513d60208110156145a757600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a8361460c8a856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561466d57600080fd5b505af1158015614681573d6000803e3d6000fd5b50505050869850505050505050505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518082805190602001908083835b60208310151561470c57805182526020820191506020810190506020830392506146e7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561479357600080fd5b505af11580156147a7573d6000803e3d6000fd5b505050506040513d60208110156147bd57600080fd5b81019080805190602001909291905050509050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a836040518082805190602001908083835b6020831015156148495780518252602082019150602081019050602083039250614824565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156148d857600080fd5b505af11580156148ec573d6000803e3d6000fd5b505050505050565b6000818301905082811015151561490a57600080fd5b80905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280601681526020017f66656573436f6c6c656374656446726f6d4b79626572000000000000000000008152506040518082805190602001908083835b6020831015156149be5780518252602082019150602081019050602083039250614999565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614a4557600080fd5b505af1158015614a59573d6000803e3d6000fd5b505050506040513d6020811015614a6f57600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280602081526020017f616d6f756e7457697468647261776e46726f6d4b7962657246656573506f6f6c8152506040518082805190602001908083835b602083101515614b305780518252602082019150602081019050602083039250614b0b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614bb757600080fd5b505af1158015614bcb573d6000803e3d6000fd5b505050506040513d6020811015614be157600080fd5b8101908080519060200190929190505050905090565b6000828211151515614c0857600080fd5b818303905092915050565b614c1c83613c90565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614cbe57600080fd5b505af1158015614cd2573d6000803e3d6000fd5b505050506040513d6020811015614ce857600080fd5b810190808051906020019092919050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602581526020017f6665657346726f6d4665654d616e61676572436f6c6c6563746564496e43757281526020017f72656e6379000000000000000000000000000000000000000000000000000000815250846040518083805190602001908083835b602083101515614dd25780518252602082019150602081019050602083039250614dad565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b602083101515614e255780518252602082019150602081019050602083039250614e00565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614ead57600080fd5b505af1158015614ec1573d6000803e3d6000fd5b505050506040513d6020811015614ed757600080fd5b81019080805190602001909291905050509050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602b81526020017f616d6f756e7457697468647261776e46726f6d4665654d616e61676572506f6f81526020017f6c496e43757272656e6379000000000000000000000000000000000000000000815250846040518083805190602001908083835b602083101515614fc25780518252602082019150602081019050602083039250614f9d565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831015156150155780518252602082019150602081019050602083039250614ff0565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561509d57600080fd5b505af11580156150b1573d6000803e3d6000fd5b505050506040513d60208110156150c757600080fd5b81019080805190602001909291905050509050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602881526020017f616d6f756e7457697468647261776e46726f6d4d6f64657261746f724561726e81526020017f696e6773506f6f6c0000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156151b1578051825260208201915060208101905060208303925061518c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561523857600080fd5b505af115801561524c573d6000803e3d6000fd5b505050506040513d602081101561526257600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602281526020017f646169436f6c6c656374656446726f6d55706772616461626c6545786368616e81526020017f67650000000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561534a5780518252602082019150602081019050602083039250615325565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156153d157600080fd5b505af11580156153e5573d6000803e3d6000fd5b505050506040513d60208110156153fb57600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280603581526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644461694681526020017f726f6d55706772616461626c6545786368616e676500000000000000000000008152506040518082805190602001908083835b6020831015156154e357805182526020820191506020810190506020830392506154be565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561556a57600080fd5b505af115801561557e573d6000803e3d6000fd5b505050506040513d602081101561559457600080fd5b8101908080519060200190929190505050905090565b6000808314156155bd57600090506155df565b81830290508183828115156155ce57fe5b041415156155db57600080fd5b8090505b92915050565b600081838115156155f257fe5b049050929150505600a165627a7a7230582066acba4aa8959070dc1c29c4a65f9a6c7b5c80c42b0b36cbca35d186cb97f6980029
Deployed Bytecode
0x608060405260043610610196576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630729d5e1146101985780630c644a1b146101af578063105005a1146101fc578063168480101461025357806322fdcc101461028e578063264198ad146102c957806327fe7641146102e057806343d884321461030b578063490e543e146103365780634c1c1a04146103615780635795aa561461039c5780635c60da1b146103c75780635fb6b16a1461041e578063627c98051461044b5780636975caee146104b85780636c4876921461050f57806375f64ebd1461053c5780637d434a89146105895780638830afa01461061c578063892d083b1461067357806391c7645a1461069e5780639ff07564146106eb5780639ffe94d914610751578063a3b688f2146107b6578063ba754f3914610803578063bfe41ddb14610893578063c4d66de8146108ce578063cbdde3d714610904578063f0cd4dce14610951578063f41ca86a1461097c578063f561cd83146109c9578063f87f9167146109f6575b005b3480156101a457600080fd5b506101ad610a23565b005b3480156101bb57600080fd5b506101fa60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b5b565b005b34801561020857600080fd5b50610211610c0e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025f57600080fd5b5061028c600480360381019080803590602001908201803590602001919091929391929390505050610c34565b005b34801561029a57600080fd5b506102c7600480360381019080803590602001908201803590602001919091929391929390505050610d96565b005b3480156102d557600080fd5b506102de610ef8565b005b3480156102ec57600080fd5b506102f5611030565b6040518082815260200191505060405180910390f35b34801561031757600080fd5b5061032061109c565b6040518082815260200191505060405180910390f35b34801561034257600080fd5b5061034b611235565b6040518082815260200191505060405180910390f35b34801561036d57600080fd5b5061039a6004803603810190808035906020019082018035906020019190919293919293905050506113a7565b005b3480156103a857600080fd5b506103b1611509565b6040518082815260200191505060405180910390f35b3480156103d357600080fd5b506103dc61154e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042a57600080fd5b5061044960048036038101908080359060200190929190505050611578565b005b34801561045757600080fd5b506104b6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061173b565b005b3480156104c457600080fd5b506104f9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e5565b6040518082815260200191505060405180910390f35b34801561051b57600080fd5b5061053a60048036038101908080359060200190929190505050611a9c565b005b34801561054857600080fd5b50610587600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cd8565b005b34801561059557600080fd5b5061061a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050611f53565b005b34801561062857600080fd5b5061063161230c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067f57600080fd5b50610688612332565b6040518082815260200191505060405180910390f35b3480156106aa57600080fd5b506106e9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124cb565b005b61074f600480360381019080803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060200190929190505050612773565b005b34801561075d57600080fd5b5061079c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612aaa565b604051808215151515815260200191505060405180910390f35b3480156107c257600080fd5b50610801600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c51565b005b34801561080f57600080fd5b50610818612d4f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561085857808201518184015260208101905061083d565b50505050905090810190601f1680156108855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561089f57600080fd5b506108cc600480360381019080803590602001908201803590602001919091929391929390505050612f84565b005b610902600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130e6565b005b34801561091057600080fd5b5061094f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613144565b005b34801561095d57600080fd5b506109666133e6565b6040518082815260200191505060405180910390f35b34801561098857600080fd5b506109c7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061342b565b005b3480156109d557600080fd5b506109f4600480360381019080803590602001909291905050506136cd565b005b348015610a0257600080fd5b50610a2160048036038101908080359060200190929190505050613a9f565b005b6000610a636040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a9c57600080fd5b610ada6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b90508073ffffffffffffffffffffffffffffffffffffffff1663015024606040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015610b4057600080fd5b505af1158015610b54573d6000803e3d6000fd5b5050505050565b6000610bc2606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610bfe57600080fd5b610c088383613f04565b50505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c746040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cad57600080fd5b610ceb6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff1663a7510dd784846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b158015610d7957600080fd5b505af1158015610d8d573d6000803e3d6000fd5b50505050505050565b6000610dd66040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e0f57600080fd5b610e4d6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff166327d8fa0984846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b158015610edb57600080fd5b505af1158015610eef573d6000803e3d6000fd5b50505050505050565b6000610f386040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f7157600080fd5b610faf6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b90508073ffffffffffffffffffffffffffffffffffffffff166331c420d46040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561101557600080fd5b505af1158015611029573d6000803e3d6000fd5b5050505050565b6000611097606060405190810160405280602181526020017f74776f4b6579496e7465677261746f7244656661756c7446656550657263656e81526020017f7400000000000000000000000000000000000000000000000000000000000000815250614696565b905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602f81526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644469737481526020017f7269627574696f6e5265776172647300000000000000000000000000000000008152506040518082805190602001908083835b60208310151561116e5780518252602082019150602081019050602083039250611149565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156111f557600080fd5b505af1158015611209573d6000803e3d6000fd5b505050506040513d602081101561121f57600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280601f81526020017f72657761726473526563656976656441734d6f64657261746f72546f74616c008152506040518082805190602001908083835b6020831015156112e057805182526020820191506020810190506020830392506112bb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561136757600080fd5b505af115801561137b573d6000803e3d6000fd5b505050506040513d602081101561139157600080fd5b8101908080519060200190929190505050905090565b60006113e76040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561142057600080fd5b61145e6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff16631d4bf2c984846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b1580156114ec57600080fd5b505af1158015611500573d6000803e3d6000fd5b50505050505050565b60006115496040805190810160405280601781526020017f74776f4b65794e6574776f726b54617850657263656e74000000000000000000815250614696565b905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806115b96040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613dca565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b505050506040513d602081101561168457600080fd5b810190808051906020019092919050505015151415156116a357600080fd5b6116ad8333613f04565b91503373ffffffffffffffffffffffffffffffffffffffff16639dd222b4836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561171e57600080fd5b505af1158015611732573d6000803e3d6000fd5b50505050505050565b60001515600260149054906101000a900460ff16151514151561175d57600080fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611846606060405190810160405280602181526020017f74776f4b6579496e7465677261746f7244656661756c7446656550657263656e81526020017f740000000000000000000000000000000000000000000000000000000000000081525060026147d5565b6118866040805190810160405280601781526020017f74776f4b65794e6574776f726b54617850657263656e7400000000000000000081525060196147d5565b6118c56040805190810160405280601281526020017f72657761726452656c6561736541667465720000000000000000000000000000815250826147d5565b6001600260146101000a81548160ff021916908315150217905550505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280601c81526020017f6d6f64657261746f724561726e696e677350657243616d706169676e00000000815250846040518083805190602001908083835b602083101515611991578051825260208201915060208101905060208303925061196c565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015611a5a57600080fd5b505af1158015611a6e573d6000803e3d6000fd5b505050506040513d6020811015611a8457600080fd5b81019080805190602001909291905050509050919050565b600080611b04606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b4057600080fd5b611b48612332565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602481526020017f66656573436f6c6c656374656446726f6d446973747269627574696f6e52657781526020017f61726473000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515611c1a5780518252602082019150602081019050602083039250611bf5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020611c5a86866148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015611cbb57600080fd5b505af1158015611ccf573d6000803e3d6000fd5b50505050505050565b600080611d196040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d5257600080fd5b611d5a614913565b9150611d64614a85565b90506000831415611d8957611d828183614bf790919063ffffffff16565b9250611dab565b611d9c8183614bf790919063ffffffff16565b8311151515611daa57600080fd5b5b611deb6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508585614c13565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a6040805190810160405280602081526020017f616d6f756e7457697468647261776e46726f6d4b7962657246656573506f6f6c8152506040518082805190602001908083835b602083101515611e945780518252602082019150602081019050602083039250611e6f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020611ed486856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b5050505050505050565b600080611f946040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fcd57600080fd5b611fd684614cff565b9150611fe184614eef565b9050600083141561200657611fff8183614bf790919063ffffffff16565b9250612028565b8261201a8284614bf790919063ffffffff16565b1015151561202757600080fd5b5b60405180807f45544800000000000000000000000000000000000000000000000000000000008152506003019050604051809103902060001916846040518082805190602001908083835b6020831015156120985780518252602082019150602081019050602083039250612073565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902060001916141561211b578473ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612115573d6000803e3d6000fd5b50612127565b612126848685614c13565b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602b81526020017f616d6f756e7457697468647261776e46726f6d4665654d616e61676572506f6f81526020017f6c496e43757272656e6379000000000000000000000000000000000000000000815250866040518083805190602001908083835b6020831015156121f857805182526020820191506020810190506020830392506121d3565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b60208310151561224b5780518252602082019150602081019050602083039250612226565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051809103902061228c86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156122ed57600080fd5b505af1158015612301573d6000803e3d6000fd5b505050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602481526020017f66656573436f6c6c656374656446726f6d446973747269627574696f6e52657781526020017f61726473000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561240457805182526020820191506020810190506020830392506123df565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561248b57600080fd5b505af115801561249f573d6000803e3d6000fd5b505050506040513d60208110156124b557600080fd5b8101908080519060200190929190505050905090565b600080600061250e6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561254757600080fd5b61254f611235565b92506125596150df565b9150600084141561257e576125778284614bf790919063ffffffff16565b93506125a0565b6125918284614bf790919063ffffffff16565b841115151561259f57600080fd5b5b6125e06040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508686614c13565b606060405190810160405280602881526020017f616d6f756e7457697468647261776e46726f6d4d6f64657261746f724561726e81526020017f696e6773506f6f6c0000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515612672578051825260208201915060208101905060208303925061264d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a826126f387866148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561275457600080fd5b505af1158015612768573d6000803e3d6000fd5b505050505050505050565b6000806127b46040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613dca565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127ed57600080fd5b606060405190810160405280602581526020017f6665657346726f6d4665654d616e61676572436f6c6c6563746564496e43757281526020017f72656e6379000000000000000000000000000000000000000000000000000000815250846040518083805190602001908083835b602083101515612880578051825260208201915060208101905060208303925061285b565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831015156128d357805182526020820191506020810190506020830392506128ae565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405180910390209150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b505050506040513d60208110156129c657600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a83612a2b86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015612a8c57600080fd5b505af1158015612aa0573d6000803e3d6000fd5b5050505050505050565b6000806000612aed6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612b2657600080fd5b612b646040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b91508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612c0957600080fd5b505af1158015612c1d573d6000803e3d6000fd5b505050506040513d6020811015612c3357600080fd5b81019080805190602001909291905050509050809250505092915050565b612c8f6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612cc857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612d0457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d4a573d6000803e3d6000fd5b505050565b6060612d59611235565b612d976040805190810160405280600381526020017f4441490000000000000000000000000000000000000000000000000000000000815250614cff565b612dd56040805190810160405280600381526020017f4554480000000000000000000000000000000000000000000000000000000000815250614cff565b612e136040805190810160405280600481526020017f324b455900000000000000000000000000000000000000000000000000000000815250614cff565b612e1b614913565b612e23615278565b612e2b612332565b612e336150df565b612e3b614a85565b612e43615411565b612e816040805190810160405280600381526020017f4441490000000000000000000000000000000000000000000000000000000000815250614eef565b612ebf6040805190810160405280600381526020017f4554480000000000000000000000000000000000000000000000000000000000815250614eef565b612efd6040805190810160405280600481526020017f324b455900000000000000000000000000000000000000000000000000000000815250614eef565b612f0561109c565b604051602001808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e505050505050505050505050505050604051602081830303815290604052905090565b6000612fc46040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ffd57600080fd5b61303b6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613dca565b90508073ffffffffffffffffffffffffffffffffffffffff1663705a483b84846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825284848281815260200192506020028082843782019150509350505050600060405180830381600087803b1580156130c957600080fd5b505af11580156130dd573d6000803e3d6000fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561314157600080fd5b50565b6000806131856040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156131be57600080fd5b6131c6615278565b91506131d0615411565b905060008314156131f5576131ee8183614bf790919063ffffffff16565b9250613217565b8161320984836148f490919063ffffffff16565b1115151561321657600080fd5b5b6132576040805190810160405280600381526020017f44414900000000000000000000000000000000000000000000000000000000008152508585614c13565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280603581526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644461694681526020017f726f6d55706772616461626c6545786368616e676500000000000000000000008152506040518082805190602001908083835b6020831015156133275780518252602082019150602081019050602083039250613302565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902061336786856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156133c857600080fd5b505af11580156133dc573d6000803e3d6000fd5b5050505050505050565b60006134266040805190810160405280601281526020017f72657761726452656c6561736541667465720000000000000000000000000000815250614696565b905090565b60008061346c6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156134a557600080fd5b6134ad612332565b91506134b761109c565b905060008314156134dc576134d58183614bf790919063ffffffff16565b92506134fe565b816134f084836148f490919063ffffffff16565b111515156134fd57600080fd5b5b61353e6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508585614c13565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602f81526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644469737481526020017f7269627574696f6e5265776172647300000000000000000000000000000000008152506040518082805190602001908083835b60208310151561360e57805182526020820191506020810190506020830392506135e9565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902061364e86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156136af57600080fd5b505af11580156136c3573d6000803e3d6000fd5b5050505050505050565b6000806000806137116040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561374a57600080fd5b6137886040805190810160405280601881526020017f54776f4b657955706772616461626c6545786368616e67650000000000000000815250613dca565b93508373ffffffffffffffffffffffffffffffffffffffff1663edacdbee866040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156137f957600080fd5b505af115801561380d573d6000803e3d6000fd5b505050506040513d602081101561382357600080fd5b81019080805190602001909291905050509250606060405190810160405280602281526020017f646169436f6c6c656374656446726f6d55706772616461626c6545786368616e81526020017f67650000000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156138c857805182526020820191506020810190506020830392506138a3565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561399057600080fd5b505af11580156139a4573d6000803e3d6000fd5b505050506040513d60208110156139ba57600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a83613a1f86856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015613a8057600080fd5b505af1158015613a94573d6000803e3d6000fd5b505050505050505050565b613add6040805190810160405280600e81526020017f54776f4b6579436f6e6772657373000000000000000000000000000000000000815250613c90565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613b1657600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a606060405190810160405280602181526020017f74776f4b6579496e7465677261746f7244656661756c7446656550657263656e81526020017f74000000000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b602083101515613be65780518252602082019150602081019050602083039250613bc1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b158015613c7557600080fd5b505af1158015613c89573d6000803e3d6000fd5b5050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f716c79a836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d3c578082015181840152602081019050613d21565b50505050905090810190601f168015613d695780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015613d8857600080fd5b505af1158015613d9c573d6000803e3d6000fd5b505050506040513d6020811015613db257600080fd5b81019080805190602001909291905050509050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db7a6d90836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e76578082015181840152602081019050613e5b565b50505050905090810190601f168015613ea35780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015613ec257600080fd5b505af1158015613ed6573d6000803e3d6000fd5b505050506040513d6020811015613eec57600080fd5b81019080805190602001909291905050509050919050565b6000806000806000806000806000613f1a611509565b9750613f456064613f378a6064038e6155aa90919063ffffffff16565b6155e590919063ffffffff16565b96506040805190810160405280601f81526020017f72657761726473526563656976656441734d6f64657261746f72546f74616c008152506040518082805190602001908083835b602083101515613fb25780518252602082019150602081019050602083039250613f8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390209550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a87614106600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f58b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156140bc57600080fd5b505af11580156140d0573d6000803e3d6000fd5b505050506040513d60208110156140e657600080fd5b81019080805190602001909291905050508b6148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561416757600080fd5b505af115801561417b573d6000803e3d6000fd5b505050506141bd6040805190810160405280601181526020017f54776f4b65794576656e74536f75726365000000000000000000000000000000815250613dca565b73ffffffffffffffffffffffffffffffffffffffff16630ab6839a8b896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561425f57600080fd5b505af1158015614273573d6000803e3d6000fd5b505050506142b56040805190810160405280600d81526020017f54776f4b657945636f6e6f6d7900000000000000000000000000000000000000815250613c90565b94506142f56040805190810160405280601981526020017f54776f4b657944656570467265657a65546f6b656e506f6f6c00000000000000815250613dca565b935061430a878c614bf790919063ffffffff16565b925061434c6040805190810160405280600d81526020017f54776f4b657945636f6e6f6d79000000000000000000000000000000000000008152508585614c13565b8373ffffffffffffffffffffffffffffffffffffffff16639da1d2c1848c6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156143ef57600080fd5b505af1158015614403573d6000803e3d6000fd5b505050506040805190810160405280601c81526020017f6d6f64657261746f724561726e696e677350657243616d706169676e000000008152508a6040518083805190602001908083835b602083101515614473578051825260208201915060208101905060208303925061444e565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405180910390209150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561457d57600080fd5b505af1158015614591573d6000803e3d6000fd5b505050506040513d60208110156145a757600080fd5b81019080805190602001909291905050509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a8361460c8a856148f490919063ffffffff16565b6040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b15801561466d57600080fd5b505af1158015614681573d6000803e3d6000fd5b50505050869850505050505050505092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5836040518082805190602001908083835b60208310151561470c57805182526020820191506020810190506020830392506146e7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561479357600080fd5b505af11580156147a7573d6000803e3d6000fd5b505050506040513d60208110156147bd57600080fd5b81019080805190602001909291905050509050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a4853a836040518082805190602001908083835b6020831015156148495780518252602082019150602081019050602083039250614824565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020836040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200182815260200192505050600060405180830381600087803b1580156148d857600080fd5b505af11580156148ec573d6000803e3d6000fd5b505050505050565b6000818301905082811015151561490a57600080fd5b80905092915050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280601681526020017f66656573436f6c6c656374656446726f6d4b79626572000000000000000000008152506040518082805190602001908083835b6020831015156149be5780518252602082019150602081019050602083039250614999565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614a4557600080fd5b505af1158015614a59573d6000803e3d6000fd5b505050506040513d6020811015614a6f57600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f56040805190810160405280602081526020017f616d6f756e7457697468647261776e46726f6d4b7962657246656573506f6f6c8152506040518082805190602001908083835b602083101515614b305780518252602082019150602081019050602083039250614b0b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614bb757600080fd5b505af1158015614bcb573d6000803e3d6000fd5b505050506040513d6020811015614be157600080fd5b8101908080519060200190929190505050905090565b6000828211151515614c0857600080fd5b818303905092915050565b614c1c83613c90565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015614cbe57600080fd5b505af1158015614cd2573d6000803e3d6000fd5b505050506040513d6020811015614ce857600080fd5b810190808051906020019092919050505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602581526020017f6665657346726f6d4665654d616e61676572436f6c6c6563746564496e43757281526020017f72656e6379000000000000000000000000000000000000000000000000000000815250846040518083805190602001908083835b602083101515614dd25780518252602082019150602081019050602083039250614dad565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b602083101515614e255780518252602082019150602081019050602083039250614e00565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b158015614ead57600080fd5b505af1158015614ec1573d6000803e3d6000fd5b505050506040513d6020811015614ed757600080fd5b81019080805190602001909291905050509050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602b81526020017f616d6f756e7457697468647261776e46726f6d4665654d616e61676572506f6f81526020017f6c496e43757272656e6379000000000000000000000000000000000000000000815250846040518083805190602001908083835b602083101515614fc25780518252602082019150602081019050602083039250614f9d565b6001836020036101000a03801982511681845116808217855250505050505090500182805190602001908083835b6020831015156150155780518252602082019150602081019050602083039250614ff0565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561509d57600080fd5b505af11580156150b1573d6000803e3d6000fd5b505050506040513d60208110156150c757600080fd5b81019080805190602001909291905050509050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602881526020017f616d6f756e7457697468647261776e46726f6d4d6f64657261746f724561726e81526020017f696e6773506f6f6c0000000000000000000000000000000000000000000000008152506040518082805190602001908083835b6020831015156151b1578051825260208201915060208101905060208303925061518c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561523857600080fd5b505af115801561524c573d6000803e3d6000fd5b505050506040513d602081101561526257600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280602281526020017f646169436f6c6c656374656446726f6d55706772616461626c6545786368616e81526020017f67650000000000000000000000000000000000000000000000000000000000008152506040518082805190602001908083835b60208310151561534a5780518252602082019150602081019050602083039250615325565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b1580156153d157600080fd5b505af11580156153e5573d6000803e3d6000fd5b505050506040513d60208110156153fb57600080fd5b8101908080519060200190929190505050905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd02d0f5606060405190810160405280603581526020017f616d6f756e7457697468647261776e46726f6d436f6c6c65637465644461694681526020017f726f6d55706772616461626c6545786368616e676500000000000000000000008152506040518082805190602001908083835b6020831015156154e357805182526020820191506020810190506020830392506154be565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15801561556a57600080fd5b505af115801561557e573d6000803e3d6000fd5b505050506040513d602081101561559457600080fd5b8101908080519060200190929190505050905090565b6000808314156155bd57600090506155df565b81830290508183828115156155ce57fe5b041415156155db57600080fd5b8090505b92915050565b600081838115156155f257fe5b049050929150505600a165627a7a7230582066acba4aa8959070dc1c29c4a65f9a6c7b5c80c42b0b36cbca35d186cb97f6980029
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.