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 | 11392549 | 1024 days 8 hrs ago | IN | Create: TwoKeyEventSource | 0 ETH | 0.08745337 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TwoKeyEventSource
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 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 ITwoKeyAdmin { function getDefaultIntegratorFeePercent() public view returns (uint); function getDefaultNetworkTaxPercent() public view returns (uint); function getTwoKeyRewardsReleaseDate() external view returns(uint); function updateReceivedTokensAsModerator(uint amountOfTokens) public; function updateReceivedTokensAsModeratorPPC(uint amountOfTokens, address campaignPlasma) public; function addFeesCollectedInCurrency(string currency, uint amount) public payable; function updateTokensReceivedFromDistributionFees(uint amountOfTokens) public; } 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 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 ITwoKeyEventSourceStorage is IStructuredStorage { } 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 TwoKeyEventSource is Upgradeable, ITwoKeySingletonUtils { bool initialized; ITwoKeyEventSourceStorage public PROXY_STORAGE_CONTRACT; string constant _twoKeyCampaignValidator = "TwoKeyCampaignValidator"; string constant _twoKeyFactory = "TwoKeyFactory"; string constant _twoKeyRegistry = "TwoKeyRegistry"; string constant _twoKeyAdmin = "TwoKeyAdmin"; string constant _twoKeyExchangeRateContract = "TwoKeyExchangeRateContract"; string constant _twoKeyMaintainersRegistry = "TwoKeyMaintainersRegistry"; string constant _deepFreezeTokenPool = "TwoKeyDeepFreezeTokenPool"; /** * Modifier which will allow only completely verified and validated contracts to call some functions */ modifier onlyAllowedContracts { address twoKeyCampaignValidator = getAddressFromTwoKeySingletonRegistry(_twoKeyCampaignValidator); require(ITwoKeyCampaignValidator(twoKeyCampaignValidator).isCampaignValidated(msg.sender) == true); _; } /** * Modifier which will allow only TwoKeyCampaignValidator to make some calls */ modifier onlyTwoKeyCampaignValidator { address twoKeyCampaignValidator = getAddressFromTwoKeySingletonRegistry(_twoKeyCampaignValidator); require(msg.sender == twoKeyCampaignValidator); _; } /** * @notice Function to set initial params in the contract * @param _twoKeySingletonesRegistry is the address of TWO_KEY_SINGLETON_REGISTRY contract * @param _proxyStorage is the address of proxy of storage contract */ function setInitialParams( address _twoKeySingletonesRegistry, address _proxyStorage ) external { require(initialized == false); TWO_KEY_SINGLETON_REGISTRY = _twoKeySingletonesRegistry; PROXY_STORAGE_CONTRACT = ITwoKeyEventSourceStorage(_proxyStorage); initialized = true; } /** * Events which will be emitted during use of system * All events are emitted from this contract * Every event is monitored in GraphQL */ event Created( address _campaign, address _owner, address _moderator ); event Joined( address _campaign, address _from, address _to ); event Converted( address _campaign, address _converter, uint256 _amount ); event ConvertedAcquisition( address _campaign, address _converterPlasma, uint256 _baseTokens, uint256 _bonusTokens, uint256 _conversionAmount, bool _isFiatConversion, uint _conversionId ); event ConvertedDonation( address _campaign, address _converterPlasma, uint _conversionAmount, uint _conversionId ); event Rewarded( address _campaign, address _to, uint256 _amount ); event Cancelled( address _campaign, address _converter, uint256 _indexOrAmount ); event Rejected( address _campaign, address _converter ); event UpdatedPublicMetaHash( uint timestamp, string value ); event UpdatedData( uint timestamp, uint value, string action ); event ReceivedEther( address _sender, uint value ); event AcquisitionCampaignCreated( address proxyLogicHandler, address proxyConversionHandler, address proxyAcquisitionCampaign, address proxyPurchasesHandler, address contractor ); event DonationCampaignCreated( address proxyDonationCampaign, address proxyDonationConversionHandler, address proxyDonationLogicHandler, address contractor ); event CPCCampaignCreated( address proxyCPCCampaign, address contractor //Contractor public address ); event PriceUpdated( bytes32 _currency, uint newRate, uint _timestamp, address _updater ); event UserRegistered( string _handle, address _address ); event Executed( address campaignAddress, address converterPlasmaAddress, uint conversionId, uint tokens ); event TokenWithdrawnFromPurchasesHandler( address campaignAddress, uint conversionID, uint tokensAmountWithdrawn ); event Debt ( address plasmaAddress, uint weiAmount, bool addition, //If true means debt increasing otherwise it means that event emitted when user paid part of the debt string currency ); event ReceivedTokensAsModerator( address campaignAddress, uint amountOfTokens ); event ReceivedTokensDeepFreezeTokenPool( address campaignAddress, uint amountOfTokens ); event HandleChanged( address userPlasmaAddress, string newHandle ); event DaiReleased( address contractSenderAddress, uint amountOfDAI ); event RebalancedRatesEvent ( uint priceAtBeginning, uint priceAtRebalancingTime, uint ratio, uint amountOfTokensTransferedInAction, string actionPerformedWithUpgradableExchange ); event EndedBudgetCampaign ( address campaignPlasmaAddress, uint contractorLeftover, uint moderatorEarningsDistributed ); event RebalancedRewards( uint cycleId, uint amountOfTokens, string action ); event UserWithdrawnNetworkEarnings( address user, uint amountOfTokens ); /** * @notice Function to emit created event every time campaign is created * @param _campaign is the address of the deployed campaign * @param _owner is the contractor address of the campaign * @param _moderator is the address of the moderator in campaign * @dev this function updates values in TwoKeyRegistry contract */ function created( address _campaign, address _owner, address _moderator ) external onlyTwoKeyCampaignValidator { emit Created(_campaign, _owner, _moderator); } /** * @notice Function to emit created event every time someone has joined to campaign * @param _campaign is the address of the deployed campaign * @param _from is the address of the referrer * @param _to is the address of person who has joined * @dev this function updates values in TwoKeyRegistry contract */ function joined( address _campaign, address _from, address _to ) external onlyAllowedContracts { emit Joined(_campaign, _from, _to); } /** * @notice Function to emit converted event * @param _campaign is the address of main campaign contract * @param _converter is the address of converter during the conversion * @param _conversionAmount is conversion amount */ function converted( address _campaign, address _converter, uint256 _conversionAmount ) external onlyAllowedContracts { emit Converted(_campaign, _converter, _conversionAmount); } function rejected( address _campaign, address _converter ) external onlyAllowedContracts { emit Rejected(_campaign, _converter); } /** * @notice Function to emit event every time conversion gets executed * @param _campaignAddress is the main campaign contract address * @param _converterPlasmaAddress is the address of converter plasma * @param _conversionId is the ID of conversion, unique per campaign */ function executed( address _campaignAddress, address _converterPlasmaAddress, uint _conversionId, uint tokens ) external onlyAllowedContracts { emit Executed(_campaignAddress, _converterPlasmaAddress, _conversionId, tokens); } /** * @notice Function to emit created event every time conversion happened under AcquisitionCampaign * @param _campaign is the address of the deployed campaign * @param _converterPlasma is the converter address * @param _baseTokens is the amount of tokens bought * @param _bonusTokens is the amount of bonus tokens received * @param _conversionAmount is the amount of conversion * @param _isFiatConversion is flag representing if conversion is either FIAT or ETHER * @param _conversionId is the id of conversion * @dev this function updates values in TwoKeyRegistry contract */ function convertedAcquisition( address _campaign, address _converterPlasma, uint256 _baseTokens, uint256 _bonusTokens, uint256 _conversionAmount, bool _isFiatConversion, uint _conversionId ) external onlyAllowedContracts { emit ConvertedAcquisition( _campaign, _converterPlasma, _baseTokens, _bonusTokens, _conversionAmount, _isFiatConversion, _conversionId ); } /** * @notice Function to emit created event every time conversion happened under DonationCampaign * @param _campaign is the address of main campaign contract * @param _converterPlasma is the address of the converter * @param _conversionAmount is the amount of conversion * @param _conversionId is the id of conversion */ function convertedDonation( address _campaign, address _converterPlasma, uint256 _conversionAmount, uint256 _conversionId ) external onlyAllowedContracts { emit ConvertedDonation( _campaign, _converterPlasma, _conversionAmount, _conversionId ); } /** * @notice Function to emit created event every time bounty is distributed between influencers * @param _campaign is the address of the deployed campaign * @param _to is the reward receiver * @param _amount is the reward amount */ function rewarded( address _campaign, address _to, uint256 _amount ) external onlyAllowedContracts { emit Rewarded(_campaign, _to, _amount); } /** * @notice Function to emit created event every time campaign is cancelled * @param _campaign is the address of the cancelled campaign * @param _converter is the address of the converter * @param _indexOrAmount is the amount of campaign */ function cancelled( address _campaign, address _converter, uint256 _indexOrAmount ) external onlyAllowedContracts { emit Cancelled(_campaign, _converter, _indexOrAmount); } /** * @notice Function to emit event every time someone starts new Acquisition campaign * @param proxyLogicHandler is the address of TwoKeyAcquisitionLogicHandler proxy deployed by TwoKeyFactory * @param proxyConversionHandler is the address of TwoKeyConversionHandler proxy deployed by TwoKeyFactory * @param proxyAcquisitionCampaign is the address of TwoKeyAcquisitionCampaign proxy deployed by TwoKeyFactory * @param proxyPurchasesHandler is the address of TwoKeyPurchasesHandler proxy deployed by TwoKeyFactory */ function acquisitionCampaignCreated( address proxyLogicHandler, address proxyConversionHandler, address proxyAcquisitionCampaign, address proxyPurchasesHandler, address contractor ) external { require(msg.sender == getAddressFromTwoKeySingletonRegistry(_twoKeyFactory)); emit AcquisitionCampaignCreated( proxyLogicHandler, proxyConversionHandler, proxyAcquisitionCampaign, proxyPurchasesHandler, contractor ); } /** * @notice Function to emit event every time someone starts new Donation campaign * @param proxyDonationCampaign is the address of TwoKeyDonationCampaign proxy deployed by TwoKeyFactory * @param proxyDonationConversionHandler is the address of TwoKeyDonationConversionHandler proxy deployed by TwoKeyFactory * @param proxyDonationLogicHandler is the address of TwoKeyDonationLogicHandler proxy deployed by TwoKeyFactory */ function donationCampaignCreated( address proxyDonationCampaign, address proxyDonationConversionHandler, address proxyDonationLogicHandler, address contractor ) external { require(msg.sender == getAddressFromTwoKeySingletonRegistry(_twoKeyFactory)); emit DonationCampaignCreated( proxyDonationCampaign, proxyDonationConversionHandler, proxyDonationLogicHandler, contractor ); } /** * @notice Function to emit event every time someone starts new CPC campaign * @param proxyCPC is the proxy address of CPC campaign * @param contractor is the PUBLIC address of campaign contractor */ function cpcCampaignCreated( address proxyCPC, address contractor ) external { require(msg.sender == getAddressFromTwoKeySingletonRegistry(_twoKeyFactory)); emit CPCCampaignCreated( proxyCPC, contractor ); } /** * @notice Function which will emit event PriceUpdated every time that happens under TwoKeyExchangeRateContract * @param _currency is the hexed string of currency name * @param _newRate is the new rate * @param _timestamp is the time of updating * @param _updater is the maintainer address which performed this call */ function priceUpdated( bytes32 _currency, uint _newRate, uint _timestamp, address _updater ) external { require(msg.sender == getAddressFromTwoKeySingletonRegistry(_twoKeyExchangeRateContract)); emit PriceUpdated(_currency, _newRate, _timestamp, _updater); } /** * @notice Function to emit event every time user is registered * @param _handle is the handle of the user * @param _address is the address of the user */ function userRegistered( string _handle, address _address, uint _registrationFee ) external { require(isAddressMaintainer(msg.sender) == true); ITwoKeyFeeManager(getAddressFromTwoKeySingletonRegistry("TwoKeyFeeManager")).setRegistrationFeeForUser(_address, _registrationFee); emit UserRegistered(_handle, _address); emit Debt(_address, _registrationFee, true, "ETH"); } function addAdditionalDebtForUser( address _plasmaAddress, uint _debtAmount, string _debtType ) public { require(isAddressMaintainer(msg.sender) == true); ITwoKeyFeeManager(getAddressFromTwoKeySingletonRegistry("TwoKeyFeeManager")).addDebtForUser(_plasmaAddress, _debtAmount, _debtType); emit Debt(_plasmaAddress, _debtAmount, true, "ETH"); } /** * @notice Function which will emit every time some debt is increased or paid * @param _plasmaAddress is the address of the user we are increasing/decreasing debt for * @param _amount is the amount of ETH he paid/increased * @param _isAddition is stating either debt increased or paid */ function emitDebtEvent( address _plasmaAddress, uint _amount, bool _isAddition, string _currency ) external { require(msg.sender == getAddressFromTwoKeySingletonRegistry("TwoKeyFeeManager")); emit Debt( _plasmaAddress, _amount, _isAddition, _currency ); } /** * @notice Function which will be called by TwoKeyAdmin every time it receives 2KEY tokens * as a moderator on TwoKeyCampaigns * @param _campaignAddress is the address of the campaign sending tokens * @param _amountOfTokens is the amount of tokens sent */ function emitReceivedTokensAsModerator( address _campaignAddress, uint _amountOfTokens ) public { require(msg.sender == getAddressFromTwoKeySingletonRegistry(_twoKeyAdmin)); emit ReceivedTokensAsModerator( _campaignAddress, _amountOfTokens ); } /** * @notice Function which will be called by TwoKeyDeepFreezeTokenPool every time it receives 2KEY tokens * from moderator rewards on the conversion event * @param _campaignAddress is the address of the campaign sending tokens * @param _amountOfTokens is the amount of tokens sent */ function emitReceivedTokensToDeepFreezeTokenPool( address _campaignAddress, uint _amountOfTokens ) public { require(msg.sender == getAddressFromTwoKeySingletonRegistry(_deepFreezeTokenPool)); emit ReceivedTokensDeepFreezeTokenPool( _campaignAddress, _amountOfTokens ); } /** * @notice Function which will emit an event every time somebody performs * withdraw of bought tokens in AcquisitionCampaign contracts * @param _campaignAddress is the address of main campaign contract * @param _conversionID is the unique ID of conversion inside one campaign * @param _tokensAmountWithdrawn is the amount of tokens user withdrawn */ function tokensWithdrawnFromPurchasesHandler( address _campaignAddress, uint _conversionID, uint _tokensAmountWithdrawn ) external onlyAllowedContracts { emit TokenWithdrawnFromPurchasesHandler(_campaignAddress, _conversionID, _tokensAmountWithdrawn); } function emitRebalancedRatesEvent( uint priceAtBeginning, uint priceAtRebalancingTime, uint ratio, uint amountOfTokensTransferedInAction, string actionPerformedWithUpgradableExchange ) external onlyAllowedContracts { emit RebalancedRatesEvent( priceAtBeginning, priceAtRebalancingTime, ratio, amountOfTokensTransferedInAction, actionPerformedWithUpgradableExchange ); } function emitHandleChangedEvent( address _userPlasmaAddress, string _newHandle ) public { require(msg.sender == getAddressFromTwoKeySingletonRegistry("TwoKeyRegistry")); emit HandleChanged( _userPlasmaAddress, _newHandle ); } /** * @notice Function to emit an event whenever DAI is released as an income * * @param _campaignContractAddress is campaign contract address * @param _amountOfDAI is the amount of DAI being released */ function emitDAIReleasedAsIncome( address _campaignContractAddress, uint _amountOfDAI ) public { require(msg.sender == getAddressFromTwoKeySingletonRegistry("TwoKeyUpgradableExchange")); emit DaiReleased( _campaignContractAddress, _amountOfDAI ); } function emitEndedBudgetCampaign( address campaignPlasmaAddress, uint contractorLeftover, uint moderatorEarningsDistributed ) public { require (msg.sender == getAddressFromTwoKeySingletonRegistry("TwoKeyBudgetCampaignsPaymentsHandler")); emit EndedBudgetCampaign( campaignPlasmaAddress, contractorLeftover, moderatorEarningsDistributed ); } function emitRebalancedRewards( uint cycleId, uint difference, string action ) public { require (msg.sender == getAddressFromTwoKeySingletonRegistry("TwoKeyBudgetCampaignsPaymentsHandler")); emit RebalancedRewards( cycleId, difference, action ); } /** * @notice Function which will emit event that user have withdrawn network earnings * @param user is the address of the user * @param amountOfTokens is the amount of tokens user withdrawn as network earnings */ function emitUserWithdrawnNetworkEarnings( address user, uint amountOfTokens ) public { require(msg.sender == getAddressFromTwoKeySingletonRegistry("TwoKeyParticipationMiningPool")); emit UserWithdrawnNetworkEarnings( user, amountOfTokens ); } /** * @notice Function to check adequate plasma address for submitted eth address * @param me is the ethereum address we request corresponding plasma address for */ function plasmaOf( address me ) public view returns (address) { address twoKeyRegistry = getAddressFromTwoKeySingletonRegistry(_twoKeyRegistry); address plasma = ITwoKeyReg(twoKeyRegistry).getEthereumToPlasma(me); if (plasma != address(0)) { return plasma; } return me; } /** * @notice Function to determine ethereum address of plasma address * @param me is the plasma address of the user * @return ethereum address */ function ethereumOf( address me ) public view returns (address) { address twoKeyRegistry = getAddressFromTwoKeySingletonRegistry(_twoKeyRegistry); address ethereum = ITwoKeyReg(twoKeyRegistry).getPlasmaToEthereum(me); if (ethereum != address(0)) { return ethereum; } return me; } /** * @notice Address to check if an address is maintainer in TwoKeyMaintainersRegistry * @param _maintainer is the address we're checking this for */ function isAddressMaintainer( address _maintainer ) public view returns (bool) { address twoKeyMaintainersRegistry = getAddressFromTwoKeySingletonRegistry(_twoKeyMaintainersRegistry); bool _isMaintainer = ITwoKeyMaintainersRegistry(twoKeyMaintainersRegistry).checkIsAddressMaintainer(_maintainer); return _isMaintainer; } /** * @notice In default TwoKeyAdmin will be moderator and his fee percentage per conversion is predefined */ function getTwoKeyDefaultIntegratorFeeFromAdmin() public view returns (uint) { address twoKeyAdmin = getAddressFromTwoKeySingletonRegistry(_twoKeyAdmin); uint integratorFeePercentage = ITwoKeyAdmin(twoKeyAdmin).getDefaultIntegratorFeePercent(); return integratorFeePercentage; } /** * @notice Function to get default network tax percentage */ function getTwoKeyDefaultNetworkTaxPercent() public view returns (uint) { address twoKeyAdmin = getAddressFromTwoKeySingletonRegistry(_twoKeyAdmin); uint networkTaxPercent = ITwoKeyAdmin(twoKeyAdmin).getDefaultNetworkTaxPercent(); return networkTaxPercent; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_twoKeySingletonesRegistry","type":"address"},{"name":"_proxyStorage","type":"address"}],"name":"setInitialParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaignAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"emitReceivedTokensAsModerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"amountOfTokens","type":"uint256"}],"name":"emitUserWithdrawnNetworkEarnings","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"me","type":"address"}],"name":"ethereumOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PROXY_STORAGE_CONTRACT","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_converter","type":"address"},{"name":"_conversionAmount","type":"uint256"}],"name":"converted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"me","type":"address"}],"name":"plasmaOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_owner","type":"address"},{"name":"_moderator","type":"address"}],"name":"created","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"proxyDonationCampaign","type":"address"},{"name":"proxyDonationConversionHandler","type":"address"},{"name":"proxyDonationLogicHandler","type":"address"},{"name":"contractor","type":"address"}],"name":"donationCampaignCreated","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"proxyLogicHandler","type":"address"},{"name":"proxyConversionHandler","type":"address"},{"name":"proxyAcquisitionCampaign","type":"address"},{"name":"proxyPurchasesHandler","type":"address"},{"name":"contractor","type":"address"}],"name":"acquisitionCampaignCreated","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaignContractAddress","type":"address"},{"name":"_amountOfDAI","type":"uint256"}],"name":"emitDAIReleasedAsIncome","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maintainer","type":"address"}],"name":"isAddressMaintainer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTwoKeyDefaultIntegratorFeeFromAdmin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_plasmaAddress","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_isAddition","type":"bool"},{"name":"_currency","type":"string"}],"name":"emitDebtEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_converterPlasma","type":"address"},{"name":"_conversionAmount","type":"uint256"},{"name":"_conversionId","type":"uint256"}],"name":"convertedDonation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTwoKeyDefaultNetworkTaxPercent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proxyCPC","type":"address"},{"name":"contractor","type":"address"}],"name":"cpcCampaignCreated","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"campaignPlasmaAddress","type":"address"},{"name":"contractorLeftover","type":"uint256"},{"name":"moderatorEarningsDistributed","type":"uint256"}],"name":"emitEndedBudgetCampaign","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaignAddress","type":"address"},{"name":"_amountOfTokens","type":"uint256"}],"name":"emitReceivedTokensToDeepFreezeTokenPool","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":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"joined","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_plasmaAddress","type":"address"},{"name":"_debtAmount","type":"uint256"},{"name":"_debtType","type":"string"}],"name":"addAdditionalDebtForUser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaignAddress","type":"address"},{"name":"_conversionID","type":"uint256"},{"name":"_tokensAmountWithdrawn","type":"uint256"}],"name":"tokensWithdrawnFromPurchasesHandler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_userPlasmaAddress","type":"address"},{"name":"_newHandle","type":"string"}],"name":"emitHandleChangedEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaignAddress","type":"address"},{"name":"_converterPlasmaAddress","type":"address"},{"name":"_conversionId","type":"uint256"},{"name":"tokens","type":"uint256"}],"name":"executed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"rewarded","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":"priceAtBeginning","type":"uint256"},{"name":"priceAtRebalancingTime","type":"uint256"},{"name":"ratio","type":"uint256"},{"name":"amountOfTokensTransferedInAction","type":"uint256"},{"name":"actionPerformedWithUpgradableExchange","type":"string"}],"name":"emitRebalancedRatesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_converter","type":"address"},{"name":"_indexOrAmount","type":"uint256"}],"name":"cancelled","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_converter","type":"address"}],"name":"rejected","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cycleId","type":"uint256"},{"name":"difference","type":"uint256"},{"name":"action","type":"string"}],"name":"emitRebalancedRewards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_campaign","type":"address"},{"name":"_converterPlasma","type":"address"},{"name":"_baseTokens","type":"uint256"},{"name":"_bonusTokens","type":"uint256"},{"name":"_conversionAmount","type":"uint256"},{"name":"_isFiatConversion","type":"bool"},{"name":"_conversionId","type":"uint256"}],"name":"convertedAcquisition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_handle","type":"string"},{"name":"_address","type":"address"},{"name":"_registrationFee","type":"uint256"}],"name":"userRegistered","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_currency","type":"bytes32"},{"name":"_newRate","type":"uint256"},{"name":"_timestamp","type":"uint256"},{"name":"_updater","type":"address"}],"name":"priceUpdated","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_owner","type":"address"},{"indexed":false,"name":"_moderator","type":"address"}],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_from","type":"address"},{"indexed":false,"name":"_to","type":"address"}],"name":"Joined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Converted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_converterPlasma","type":"address"},{"indexed":false,"name":"_baseTokens","type":"uint256"},{"indexed":false,"name":"_bonusTokens","type":"uint256"},{"indexed":false,"name":"_conversionAmount","type":"uint256"},{"indexed":false,"name":"_isFiatConversion","type":"bool"},{"indexed":false,"name":"_conversionId","type":"uint256"}],"name":"ConvertedAcquisition","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_converterPlasma","type":"address"},{"indexed":false,"name":"_conversionAmount","type":"uint256"},{"indexed":false,"name":"_conversionId","type":"uint256"}],"name":"ConvertedDonation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Rewarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_converter","type":"address"},{"indexed":false,"name":"_indexOrAmount","type":"uint256"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_campaign","type":"address"},{"indexed":false,"name":"_converter","type":"address"}],"name":"Rejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"value","type":"string"}],"name":"UpdatedPublicMetaHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"action","type":"string"}],"name":"UpdatedData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_sender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"ReceivedEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proxyLogicHandler","type":"address"},{"indexed":false,"name":"proxyConversionHandler","type":"address"},{"indexed":false,"name":"proxyAcquisitionCampaign","type":"address"},{"indexed":false,"name":"proxyPurchasesHandler","type":"address"},{"indexed":false,"name":"contractor","type":"address"}],"name":"AcquisitionCampaignCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proxyDonationCampaign","type":"address"},{"indexed":false,"name":"proxyDonationConversionHandler","type":"address"},{"indexed":false,"name":"proxyDonationLogicHandler","type":"address"},{"indexed":false,"name":"contractor","type":"address"}],"name":"DonationCampaignCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proxyCPCCampaign","type":"address"},{"indexed":false,"name":"contractor","type":"address"}],"name":"CPCCampaignCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_currency","type":"bytes32"},{"indexed":false,"name":"newRate","type":"uint256"},{"indexed":false,"name":"_timestamp","type":"uint256"},{"indexed":false,"name":"_updater","type":"address"}],"name":"PriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_handle","type":"string"},{"indexed":false,"name":"_address","type":"address"}],"name":"UserRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"campaignAddress","type":"address"},{"indexed":false,"name":"converterPlasmaAddress","type":"address"},{"indexed":false,"name":"conversionId","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Executed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"campaignAddress","type":"address"},{"indexed":false,"name":"conversionID","type":"uint256"},{"indexed":false,"name":"tokensAmountWithdrawn","type":"uint256"}],"name":"TokenWithdrawnFromPurchasesHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"plasmaAddress","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"},{"indexed":false,"name":"addition","type":"bool"},{"indexed":false,"name":"currency","type":"string"}],"name":"Debt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"campaignAddress","type":"address"},{"indexed":false,"name":"amountOfTokens","type":"uint256"}],"name":"ReceivedTokensAsModerator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"campaignAddress","type":"address"},{"indexed":false,"name":"amountOfTokens","type":"uint256"}],"name":"ReceivedTokensDeepFreezeTokenPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"userPlasmaAddress","type":"address"},{"indexed":false,"name":"newHandle","type":"string"}],"name":"HandleChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contractSenderAddress","type":"address"},{"indexed":false,"name":"amountOfDAI","type":"uint256"}],"name":"DaiReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"priceAtBeginning","type":"uint256"},{"indexed":false,"name":"priceAtRebalancingTime","type":"uint256"},{"indexed":false,"name":"ratio","type":"uint256"},{"indexed":false,"name":"amountOfTokensTransferedInAction","type":"uint256"},{"indexed":false,"name":"actionPerformedWithUpgradableExchange","type":"string"}],"name":"RebalancedRatesEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"campaignPlasmaAddress","type":"address"},{"indexed":false,"name":"contractorLeftover","type":"uint256"},{"indexed":false,"name":"moderatorEarningsDistributed","type":"uint256"}],"name":"EndedBudgetCampaign","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cycleId","type":"uint256"},{"indexed":false,"name":"amountOfTokens","type":"uint256"},{"indexed":false,"name":"action","type":"string"}],"name":"RebalancedRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"user","type":"address"},{"indexed":false,"name":"amountOfTokens","type":"uint256"}],"name":"UserWithdrawnNetworkEarnings","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50613e80806100206000396000f3006080604052600436106101b7576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305dbe412146101bc5780630ab6839a1461021f5780630d80ceb71461026c578063102a8e70146102b9578063105005a11461033c57806315ff0b97146103935780631a025f25146104005780632254a1b71461048357806328bb4730146105065780633092eb2f146105a9578063405b30531461066c57806340f59c21146106b95780635211fb0014610714578063567b7af71461073f578063585efc1c146107b05780635c60da1b146108275780635d680c9c1461087e5780636a14341f146108a95780636bfa36f41461090c5780636de83b71146109635780638830afa0146109b05780638af1cbb914610a075780638fd2385214610a8a5780639aff2a7e14610b1d5780639eda107414610b74578063a4cae2eb14610bfd578063bd6cd0d114610c74578063c4d66de814610ce1578063c553cdde14610d17578063c9404dd914610d7a578063d209703714610de7578063e202e57214610e4a578063ec19989c14610ec7578063f78a3a2d14610f5e578063f8809a9514610fc3575b600080fd5b3480156101c857600080fd5b5061021d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611028565b005b34801561022b57600080fd5b5061026a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110eb565b005b34801561027857600080fd5b506102b7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111d1565b005b3480156102c557600080fd5b506102fa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034857600080fd5b5061035161141d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039f57600080fd5b506103fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611443565b005b34801561040c57600080fd5b50610441600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611612565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561048f57600080fd5b50610504600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611778565b005b34801561051257600080fd5b506105a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118c5565b005b3480156105b557600080fd5b5061066a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a41565b005b34801561067857600080fd5b506106b7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf2565b005b3480156106c557600080fd5b506106fa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd8565b604051808215151515815260200191505060405180910390f35b34801561072057600080fd5b50610729611dff565b6040518082815260200191505060405180910390f35b34801561074b57600080fd5b506107ae600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050611eed565b005b3480156107bc57600080fd5b50610825600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612004565b005b34801561083357600080fd5b5061083c6121dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088a57600080fd5b50610893612206565b6040518082815260200191505060405180910390f35b3480156108b557600080fd5b5061090a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122f4565b005b34801561091857600080fd5b50610961600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612406565b005b34801561096f57600080fd5b506109ae600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061251c565b005b3480156109bc57600080fd5b506109c5612602565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a1357600080fd5b50610a88600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612628565b005b348015610a9657600080fd5b50610b1b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612823565b005b348015610b2957600080fd5b50610b72600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a59565b005b348015610b8057600080fd5b50610bfb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612bfc565b005b348015610c0957600080fd5b50610c72600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612d47565b005b348015610c8057600080fd5b50610cdf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f1f565b005b610d15600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130ee565b005b348015610d2357600080fd5b50610d786004803603810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190820180359060200191909192939192939050505061314c565b005b348015610d8657600080fd5b50610de5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132f0565b005b348015610df357600080fd5b50610e48600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134bf565b005b348015610e5657600080fd5b50610ec56004803603810190808035906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613685565b005b348015610ed357600080fd5b50610f5c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190803590602001909291905050506137d4565b005b348015610f6a57600080fd5b50610fc1600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506139cb565b005b348015610fcf57600080fd5b5061102660048036038101908080356000191690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b60001515600260149054906101000a900460ff16151514151561104a57600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260146101000a81548160ff0219169083151502179055505050565b6111296040805190810160405280600b81526020017f54776f4b657941646d696e000000000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561116257600080fd5b7f5c8e2b629af968089714cc9b0ed80107f8cc224e5036d7e12f22b33a998942e28282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b61120f6040805190810160405280601d81526020017f54776f4b657950617274696369706174696f6e4d696e696e67506f6f6c000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561124857600080fd5b7f9e008d1fe92d92989ec7c946474e1b443b7b18fad2f3ce450e24dc7d26c242a98282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60008060006112fa6040805190810160405280600e81526020017f54776f4b65795265676973747279000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff1663b8397065856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b505050506040513d60208110156113c157600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561141257809250611416565b8392505b5050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114836040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b505050506040513d602081101561154e57600080fd5b8101908080519060200190929190505050151514151561156d57600080fd5b7f906a93b9c694feed29962dd45c9b10da5a1f52440a51de2f55ef70d0710c2642848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60008060006116556040805190810160405280600e81526020017f54776f4b65795265676973747279000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff1663edab0437856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156116f257600080fd5b505af1158015611706573d6000803e3d6000fd5b505050506040513d602081101561171c57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561176d57809250611771565b8392505b5050919050565b60006117b86040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f457600080fd5b7f454b0172f64812df0cd504c2bd7df7aab8ff328a54d946b4bd0fa7c527adf9cc848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150505050565b6119036040805190810160405280600d81526020017f54776f4b6579466163746f727900000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561193c57600080fd5b7fb03e09dad78d8c951d9f02adfb36839cebbb3e4ca980b738e0eff605768bfa4c84848484604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a150505050565b611a7f6040805190810160405280600d81526020017f54776f4b6579466163746f727900000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ab857600080fd5b7f7a29fc557a80b2254dad2cd7b0558bebb0a2a1d2ad4a319f97ea76a5891d32638585858585604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15050505050565b611c306040805190810160405280601881526020017f54776f4b657955706772616461626c6545786368616e67650000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c6957600080fd5b7f02556fed6731dfe07962ca7a7e155af1de3f26ba243f37a66034c0df3461d15b8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000806000611d1b6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff16635cc7815c856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611db857600080fd5b505af1158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b810190808051906020019092919050505090508092505050919050565b6000806000611e426040805190810160405280600b81526020017f54776f4b657941646d696e000000000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff166327fe76416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611ea857600080fd5b505af1158015611ebc573d6000803e3d6000fd5b505050506040513d6020811015611ed257600080fd5b81019080805190602001909291905050509050809250505090565b611f2b6040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6457600080fd5b7f8621bf05dee425dbf45355adf1d7281893f5411aa67ad2e9cd3107d8f0014f478585858585604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001841515151581526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a15050505050565b60006120446040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b505050506040513d602081101561210f57600080fd5b8101908080519060200190929190505050151514151561212e57600080fd5b7fd99a5f85ec9ee4a7f08d1ec5f4c47230c87b223726c9321988f6841709d0c58585858585604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060006122496040805190810160405280600b81526020017f54776f4b657941646d696e000000000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff16635795aa566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156122af57600080fd5b505af11580156122c3573d6000803e3d6000fd5b505050506040513d60208110156122d957600080fd5b81019080805190602001909291905050509050809250505090565b6123326040805190810160405280600d81526020017f54776f4b6579466163746f727900000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561236b57600080fd5b7f9e05b95a1dc731d824d1d8fbbaf9848c03cdc446957f9b1eb18e78c60e8350788282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b61246b606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124a457600080fd5b7f8ef920ebf58a23e45470d57373be1bcec1bd99e895d03fa4865d59348883fa2d838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b61255a6040805190810160405280601981526020017f54776f4b657944656570467265657a65546f6b656e506f6f6c00000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561259357600080fd5b7fb4fac382e9efeab437e61dda562a293b56dd331cdbddd323402a025aae2914ce8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126686040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561270957600080fd5b505af115801561271d573d6000803e3d6000fd5b505050506040513d602081101561273357600080fd5b8101908080519060200190929190505050151514151561275257600080fd5b7f2bd729a8054724da0df9fdf02b37398fb43652780a2590cef6fa6e8abcf43678848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150505050565b6001151561283033611cd8565b151514151561283e57600080fd5b61287c6040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff1663b97c39058484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561293d578082015181840152602081019050612922565b50505050905090810190601f16801561296a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561298b57600080fd5b505af115801561299f573d6000803e3d6000fd5b505050507f8621bf05dee425dbf45355adf1d7281893f5411aa67ad2e9cd3107d8f0014f4783836001604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018215151515815260200180602001828103825260038152602001807f455448000000000000000000000000000000000000000000000000000000000081525060200194505050505060405180910390a1505050565b6000612a996040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612b3a57600080fd5b505af1158015612b4e573d6000803e3d6000fd5b505050506040513d6020811015612b6457600080fd5b81019080805190602001909291905050501515141515612b8357600080fd5b7f595b8fc8e8b1acbfb8694b03a08fac4cfb668b916edf8a214b9430531e4203f9848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a150505050565b612c3a6040805190810160405280600e81526020017f54776f4b65795265676973747279000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c7357600080fd5b7f3150321c20bb22ea506f41320e9cfbdddedba4e89aed138cfc32ada4b60b83268282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d08578082015181840152602081019050612ced565b50505050905090810190601f168015612d355780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6000612d876040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612e2857600080fd5b505af1158015612e3c573d6000803e3d6000fd5b505050506040513d6020811015612e5257600080fd5b81019080805190602001909291905050501515141515612e7157600080fd5b7fe953ae62f4f69be1c6d943cb68d93d288f23ffae7332b84196d46e9e778b23b285858585604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050505050565b6000612f5f6040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561300057600080fd5b505af1158015613014573d6000803e3d6000fd5b505050506040513d602081101561302a57600080fd5b8101908080519060200190929190505050151514151561304957600080fd5b7f6876a213a761d9b4f8d7ba3609528ef85da671684271f75fdacb41be8db29f45848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561314957600080fd5b50565b600061318c6040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561322d57600080fd5b505af1158015613241573d6000803e3d6000fd5b505050506040513d602081101561325757600080fd5b8101908080519060200190929190505050151514151561327657600080fd5b7fb6a38159f315194e98abd249dec5f61e27f1d00d03debc4d3ac8e640e6094fbc87878787878760405180878152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a150505050505050565b60006133306040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156133d157600080fd5b505af11580156133e5573d6000803e3d6000fd5b505050506040513d60208110156133fb57600080fd5b8101908080519060200190929190505050151514151561341a57600080fd5b7f915fb8c652d6245752cc491b71bd8e87ab6761417f8d2ca353c8055103294c03848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60006134ff6040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156135a057600080fd5b505af11580156135b4573d6000803e3d6000fd5b505050506040513d60208110156135ca57600080fd5b810190808051906020019092919050505015151415156135e957600080fd5b7f1fd08c43ff018b384f5037a68179f90e0808a91887eeb0c991bc72dbc96a53fd8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050565b6136ea606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561372357600080fd5b7f6a94b887f5d928d43664c98ed441c63f14a7e7e01435ff18102af74adb199c9a8383836040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613793578082015181840152602081019050613778565b50505050905090810190601f1680156137c05780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050565b60006138146040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156138b557600080fd5b505af11580156138c9573d6000803e3d6000fd5b505050506040513d60208110156138df57600080fd5b810190808051906020019092919050505015151415156138fe57600080fd5b7fbc2cef928730c5d2f4c5be6e4b866d71726e12b53127bff102e98bd373816c7388888888888888604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018315151515815260200182815260200197505050505050505060405180910390a15050505050505050565b600115156139d833611cd8565b15151415156139e657600080fd5b613a246040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff1663c5d2c43e83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613ac657600080fd5b505af1158015613ada573d6000803e3d6000fd5b505050507f7f605d0ff47d2a070e456b69ce2a36041788910b64443c7f4c6d307993cade2c84848460405180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252858582818152602001925080828437820191505094505050505060405180910390a17f8621bf05dee425dbf45355adf1d7281893f5411aa67ad2e9cd3107d8f0014f4782826001604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018215151515815260200180602001828103825260038152602001807f455448000000000000000000000000000000000000000000000000000000000081525060200194505050505060405180910390a150505050565b613c586040805190810160405280601a81526020017f54776f4b657945786368616e676552617465436f6e7472616374000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c9157600080fd5b7fb9f26901b015ee01cabc2af9042d52bc821b1aaedcb7b0e97199a99ac3277fdd848484846040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a150505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db7a6d90836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dc6578082015181840152602081019050613dab565b50505050905090810190601f168015613df35780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015613e1257600080fd5b505af1158015613e26573d6000803e3d6000fd5b505050506040513d6020811015613e3c57600080fd5b810190808051906020019092919050505090509190505600a165627a7a723058205fc682d063098bbff0a706e9d0b8daa7563f0e502a5c968dfa1bc8fb8fbfe2a00029
Deployed Bytecode
0x6080604052600436106101b7576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305dbe412146101bc5780630ab6839a1461021f5780630d80ceb71461026c578063102a8e70146102b9578063105005a11461033c57806315ff0b97146103935780631a025f25146104005780632254a1b71461048357806328bb4730146105065780633092eb2f146105a9578063405b30531461066c57806340f59c21146106b95780635211fb0014610714578063567b7af71461073f578063585efc1c146107b05780635c60da1b146108275780635d680c9c1461087e5780636a14341f146108a95780636bfa36f41461090c5780636de83b71146109635780638830afa0146109b05780638af1cbb914610a075780638fd2385214610a8a5780639aff2a7e14610b1d5780639eda107414610b74578063a4cae2eb14610bfd578063bd6cd0d114610c74578063c4d66de814610ce1578063c553cdde14610d17578063c9404dd914610d7a578063d209703714610de7578063e202e57214610e4a578063ec19989c14610ec7578063f78a3a2d14610f5e578063f8809a9514610fc3575b600080fd5b3480156101c857600080fd5b5061021d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611028565b005b34801561022b57600080fd5b5061026a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110eb565b005b34801561027857600080fd5b506102b7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111d1565b005b3480156102c557600080fd5b506102fa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112b7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561034857600080fd5b5061035161141d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039f57600080fd5b506103fe600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611443565b005b34801561040c57600080fd5b50610441600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611612565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561048f57600080fd5b50610504600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611778565b005b34801561051257600080fd5b506105a7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118c5565b005b3480156105b557600080fd5b5061066a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a41565b005b34801561067857600080fd5b506106b7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611bf2565b005b3480156106c557600080fd5b506106fa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd8565b604051808215151515815260200191505060405180910390f35b34801561072057600080fd5b50610729611dff565b6040518082815260200191505060405180910390f35b34801561074b57600080fd5b506107ae600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803590602001908201803590602001919091929391929390505050611eed565b005b3480156107bc57600080fd5b50610825600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612004565b005b34801561083357600080fd5b5061083c6121dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561088a57600080fd5b50610893612206565b6040518082815260200191505060405180910390f35b3480156108b557600080fd5b5061090a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122f4565b005b34801561091857600080fd5b50610961600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612406565b005b34801561096f57600080fd5b506109ae600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061251c565b005b3480156109bc57600080fd5b506109c5612602565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a1357600080fd5b50610a88600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612628565b005b348015610a9657600080fd5b50610b1b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612823565b005b348015610b2957600080fd5b50610b72600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612a59565b005b348015610b8057600080fd5b50610bfb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050612bfc565b005b348015610c0957600080fd5b50610c72600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612d47565b005b348015610c8057600080fd5b50610cdf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f1f565b005b610d15600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130ee565b005b348015610d2357600080fd5b50610d786004803603810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190820180359060200191909192939192939050505061314c565b005b348015610d8657600080fd5b50610de5600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132f0565b005b348015610df357600080fd5b50610e48600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134bf565b005b348015610e5657600080fd5b50610ec56004803603810190808035906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050613685565b005b348015610ed357600080fd5b50610f5c600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803515159060200190929190803590602001909291905050506137d4565b005b348015610f6a57600080fd5b50610fc1600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506139cb565b005b348015610fcf57600080fd5b5061102660048036038101908080356000191690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b60001515600260149054906101000a900460ff16151514151561104a57600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260146101000a81548160ff0219169083151502179055505050565b6111296040805190810160405280600b81526020017f54776f4b657941646d696e000000000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561116257600080fd5b7f5c8e2b629af968089714cc9b0ed80107f8cc224e5036d7e12f22b33a998942e28282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b61120f6040805190810160405280601d81526020017f54776f4b657950617274696369706174696f6e4d696e696e67506f6f6c000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561124857600080fd5b7f9e008d1fe92d92989ec7c946474e1b443b7b18fad2f3ce450e24dc7d26c242a98282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b60008060006112fa6040805190810160405280600e81526020017f54776f4b65795265676973747279000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff1663b8397065856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b505050506040513d60208110156113c157600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561141257809250611416565b8392505b5050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006114836040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b505050506040513d602081101561154e57600080fd5b8101908080519060200190929190505050151514151561156d57600080fd5b7f906a93b9c694feed29962dd45c9b10da5a1f52440a51de2f55ef70d0710c2642848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60008060006116556040805190810160405280600e81526020017f54776f4b65795265676973747279000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff1663edab0437856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156116f257600080fd5b505af1158015611706573d6000803e3d6000fd5b505050506040513d602081101561171c57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561176d57809250611771565b8392505b5050919050565b60006117b86040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f457600080fd5b7f454b0172f64812df0cd504c2bd7df7aab8ff328a54d946b4bd0fa7c527adf9cc848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150505050565b6119036040805190810160405280600d81526020017f54776f4b6579466163746f727900000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561193c57600080fd5b7fb03e09dad78d8c951d9f02adfb36839cebbb3e4ca980b738e0eff605768bfa4c84848484604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a150505050565b611a7f6040805190810160405280600d81526020017f54776f4b6579466163746f727900000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ab857600080fd5b7f7a29fc557a80b2254dad2cd7b0558bebb0a2a1d2ad4a319f97ea76a5891d32638585858585604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15050505050565b611c306040805190810160405280601881526020017f54776f4b657955706772616461626c6545786368616e67650000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c6957600080fd5b7f02556fed6731dfe07962ca7a7e155af1de3f26ba243f37a66034c0df3461d15b8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b6000806000611d1b6040805190810160405280601981526020017f54776f4b65794d61696e7461696e657273526567697374727900000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff16635cc7815c856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015611db857600080fd5b505af1158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b810190808051906020019092919050505090508092505050919050565b6000806000611e426040805190810160405280600b81526020017f54776f4b657941646d696e000000000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff166327fe76416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015611ea857600080fd5b505af1158015611ebc573d6000803e3d6000fd5b505050506040513d6020811015611ed257600080fd5b81019080805190602001909291905050509050809250505090565b611f2b6040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6457600080fd5b7f8621bf05dee425dbf45355adf1d7281893f5411aa67ad2e9cd3107d8f0014f478585858585604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001841515151581526020018060200182810382528484828181526020019250808284378201915050965050505050505060405180910390a15050505050565b60006120446040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156120e557600080fd5b505af11580156120f9573d6000803e3d6000fd5b505050506040513d602081101561210f57600080fd5b8101908080519060200190929190505050151514151561212e57600080fd5b7fd99a5f85ec9ee4a7f08d1ec5f4c47230c87b223726c9321988f6841709d0c58585858585604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060006122496040805190810160405280600b81526020017f54776f4b657941646d696e000000000000000000000000000000000000000000815250613d1a565b91508173ffffffffffffffffffffffffffffffffffffffff16635795aa566040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156122af57600080fd5b505af11580156122c3573d6000803e3d6000fd5b505050506040513d60208110156122d957600080fd5b81019080805190602001909291905050509050809250505090565b6123326040805190810160405280600d81526020017f54776f4b6579466163746f727900000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561236b57600080fd5b7f9e05b95a1dc731d824d1d8fbbaf9848c03cdc446957f9b1eb18e78c60e8350788282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a15050565b61246b606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124a457600080fd5b7f8ef920ebf58a23e45470d57373be1bcec1bd99e895d03fa4865d59348883fa2d838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1505050565b61255a6040805190810160405280601981526020017f54776f4b657944656570467265657a65546f6b656e506f6f6c00000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561259357600080fd5b7fb4fac382e9efeab437e61dda562a293b56dd331cdbddd323402a025aae2914ce8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006126686040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561270957600080fd5b505af115801561271d573d6000803e3d6000fd5b505050506040513d602081101561273357600080fd5b8101908080519060200190929190505050151514151561275257600080fd5b7f2bd729a8054724da0df9fdf02b37398fb43652780a2590cef6fa6e8abcf43678848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a150505050565b6001151561283033611cd8565b151514151561283e57600080fd5b61287c6040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff1663b97c39058484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561293d578082015181840152602081019050612922565b50505050905090810190601f16801561296a5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561298b57600080fd5b505af115801561299f573d6000803e3d6000fd5b505050507f8621bf05dee425dbf45355adf1d7281893f5411aa67ad2e9cd3107d8f0014f4783836001604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018215151515815260200180602001828103825260038152602001807f455448000000000000000000000000000000000000000000000000000000000081525060200194505050505060405180910390a1505050565b6000612a996040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612b3a57600080fd5b505af1158015612b4e573d6000803e3d6000fd5b505050506040513d6020811015612b6457600080fd5b81019080805190602001909291905050501515141515612b8357600080fd5b7f595b8fc8e8b1acbfb8694b03a08fac4cfb668b916edf8a214b9430531e4203f9848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a150505050565b612c3a6040805190810160405280600e81526020017f54776f4b65795265676973747279000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c7357600080fd5b7f3150321c20bb22ea506f41320e9cfbdddedba4e89aed138cfc32ada4b60b83268282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d08578082015181840152602081019050612ced565b50505050905090810190601f168015612d355780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6000612d876040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015612e2857600080fd5b505af1158015612e3c573d6000803e3d6000fd5b505050506040513d6020811015612e5257600080fd5b81019080805190602001909291905050501515141515612e7157600080fd5b7fe953ae62f4f69be1c6d943cb68d93d288f23ffae7332b84196d46e9e778b23b285858585604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050505050565b6000612f5f6040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561300057600080fd5b505af1158015613014573d6000803e3d6000fd5b505050506040513d602081101561302a57600080fd5b8101908080519060200190929190505050151514151561304957600080fd5b7f6876a213a761d9b4f8d7ba3609528ef85da671684271f75fdacb41be8db29f45848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561314957600080fd5b50565b600061318c6040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561322d57600080fd5b505af1158015613241573d6000803e3d6000fd5b505050506040513d602081101561325757600080fd5b8101908080519060200190929190505050151514151561327657600080fd5b7fb6a38159f315194e98abd249dec5f61e27f1d00d03debc4d3ac8e640e6094fbc87878787878760405180878152602001868152602001858152602001848152602001806020018281038252848482818152602001925080828437820191505097505050505050505060405180910390a150505050505050565b60006133306040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156133d157600080fd5b505af11580156133e5573d6000803e3d6000fd5b505050506040513d60208110156133fb57600080fd5b8101908080519060200190929190505050151514151561341a57600080fd5b7f915fb8c652d6245752cc491b71bd8e87ab6761417f8d2ca353c8055103294c03848484604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150505050565b60006134ff6040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156135a057600080fd5b505af11580156135b4573d6000803e3d6000fd5b505050506040513d60208110156135ca57600080fd5b810190808051906020019092919050505015151415156135e957600080fd5b7f1fd08c43ff018b384f5037a68179f90e0808a91887eeb0c991bc72dbc96a53fd8383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050565b6136ea606060405190810160405280602481526020017f54776f4b657942756467657443616d706169676e735061796d656e747348616e81526020017f646c657200000000000000000000000000000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561372357600080fd5b7f6a94b887f5d928d43664c98ed441c63f14a7e7e01435ff18102af74adb199c9a8383836040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613793578082015181840152602081019050613778565b50505050905090810190601f1680156137c05780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1505050565b60006138146040805190810160405280601781526020017f54776f4b657943616d706169676e56616c696461746f72000000000000000000815250613d1a565b9050600115158173ffffffffffffffffffffffffffffffffffffffff166371c6a34f336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156138b557600080fd5b505af11580156138c9573d6000803e3d6000fd5b505050506040513d60208110156138df57600080fd5b810190808051906020019092919050505015151415156138fe57600080fd5b7fbc2cef928730c5d2f4c5be6e4b866d71726e12b53127bff102e98bd373816c7388888888888888604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018315151515815260200182815260200197505050505050505060405180910390a15050505050505050565b600115156139d833611cd8565b15151415156139e657600080fd5b613a246040805190810160405280601081526020017f54776f4b65794665654d616e6167657200000000000000000000000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff1663c5d2c43e83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613ac657600080fd5b505af1158015613ada573d6000803e3d6000fd5b505050507f7f605d0ff47d2a070e456b69ce2a36041788910b64443c7f4c6d307993cade2c84848460405180806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281038252858582818152602001925080828437820191505094505050505060405180910390a17f8621bf05dee425dbf45355adf1d7281893f5411aa67ad2e9cd3107d8f0014f4782826001604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018215151515815260200180602001828103825260038152602001807f455448000000000000000000000000000000000000000000000000000000000081525060200194505050505060405180910390a150505050565b613c586040805190810160405280601a81526020017f54776f4b657945786368616e676552617465436f6e7472616374000000000000815250613d1a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613c9157600080fd5b7fb9f26901b015ee01cabc2af9042d52bc821b1aaedcb7b0e97199a99ac3277fdd848484846040518085600019166000191681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a150505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db7a6d90836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613dc6578082015181840152602081019050613dab565b50505050905090810190601f168015613df35780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b158015613e1257600080fd5b505af1158015613e26573d6000803e3d6000fd5b505050506040513d6020811015613e3c57600080fd5b810190808051906020019092919050505090509190505600a165627a7a723058205fc682d063098bbff0a706e9d0b8daa7563f0e502a5c968dfa1bc8fb8fbfe2a00029
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.