0 txs
70 calls
constructor
No constructor.
functions
cash
viewfunction cash() view returns (address)
CFO_ROLE
viewfunction CFO_ROLE() view returns (bytes32)
cfo
viewfunction cfo() view returns (address)
claimable
viewfunction claimable(address buyer) view returns (uint256 amount)
computeRefKey
purefunction computeRefKey(string ref) pure returns (bytes32 key)
decimals
viewfunction decimals() view returns (uint8 soldDecimals, uint8 cashDecimals, uint8 delta)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
discountGroups
viewfunction discountGroups() view returns (uint256)
discounts
viewfunction discounts(uint256) view returns (uint256 min, uint256 max, uint256 price)
estimate
viewfunction estimate(uint256 pay) view returns (uint256)
getRefOwner
viewfunction getRefOwner(string ref) view returns (address owner)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
INTERVAL
viewfunction INTERVAL() view returns (uint256)
LOCK_PERIOD
viewfunction LOCK_PERIOD() view returns (uint256)
locked
viewfunction locked() view returns (uint256)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
manager
viewfunction manager() view returns (address)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
references
viewfunction references(bytes32 ref) view returns (address owner)
RELEASE
viewfunction RELEASE() view returns (uint256)
rewards1
viewfunction rewards1() view returns (uint256)
rewards2
viewfunction rewards2() view returns (uint256)
sold
viewfunction sold() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
users
viewfunction users(address user) view returns (bytes32 ref)
vesting
viewfunction vesting(address user) view returns (uint256 start, uint256 locked, uint256 claimed)
vestingStart
viewfunction vestingStart() view returns (uint256)
_admin_init
nonpayablefunction _admin_init(address cfo_, address manager_)
addPriceRange
nonpayablefunction addPriceRange(uint256 min, uint256 max, uint256 price)
buy
nonpayablefunction buy(uint256 pay, string ref)
claim
nonpayablefunction claim()
coinWithdraw
nonpayablefunction coinWithdraw()
createReference
nonpayablefunction createReference(string ref)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address cfo_, address manager_, address soldToken, address payToken, uint8 soldDecimals, uint8 cashDecimals, uint256 endsInDays)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
unpause
nonpayablefunction unpause()
updateCFO
nonpayablefunction updateCFO(address candidate)
updateDecimals
nonpayablefunction updateDecimals(uint8 soldDecimals, uint8 cashDecimals)
updateManager
nonpayablefunction updateManager(address candidate)
updatePriceRange
nonpayablefunction updatePriceRange(uint256 min, uint256 max, uint256 price, uint256 index)
updateRewards
nonpayablefunction updateRewards(uint256 _rewards1, uint256 _rewards2)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawCash
nonpayablefunction withdrawCash()
withdrawToken
nonpayablefunction withdrawToken()
events
CashWithdrawn
event CashWithdrawn(uint256 amount)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
ReferenceCreated
event ReferenceCreated(address owner, string ref)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
RoleUdated
event RoleUdated(address old, address updated, string role)
TokensClaimed
event TokensClaimed(address indexed buyer, uint256 amount)
TokensPurchased
event TokensPurchased(address indexed buyer, uint256 released, uint256 locked)
TokensWithdrawn
event TokensWithdrawn(uint256 amount)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
Withdraw
event Withdraw(string symbol, address recepient)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a06040523060805234801561001457600080fd5b50608051613c4461003e6000396000818161265a0152818161268301526128360152613c446000f3fe60806040526004361061032d5760003560e01c806375d96718116101a5578063a217fddf116100ec578063ca628c7811610095578063dda920441161006f578063dda92044146109d1578063e388c423146109f1578063ec87621c14610a2d578063edfd36cd14610a6157600080fd5b8063ca628c7814610986578063cf3090121461099b578063d547741f146109b157600080fd5b8063b7dc3b18116100c6578063b7dc3b181461090b578063bae6a6901461092b578063c11312c01461096657600080fd5b8063a217fddf14610873578063a87430ba14610888578063ad3cb1cc146108b557600080fd5b806391d148541161014e57806399bf8fa11161012857806399bf8fa1146107ff5780639c7929381461081f5780639f6f50ed1461083f57600080fd5b806391d148541461075a578063961be391146107bf57806397e50818146107df57600080fd5b80638456cb591161017f5780638456cb5914610719578063884fa9a51461072e57806389facb201461074357600080fd5b806375d96718146106ce5780637a8fdf8a146106e35780637e51ddf41461070357600080fd5b80633f4ba83a116102745780634e71d92d1161021d57806352d1902d116101f757806352d1902d1461064c57806358aba00f146106615780635ad6650f146106815780635c975abb1461069757600080fd5b80634e71d92d1461060e5780634f1ef2861461062357806352490a8f1461063657600080fd5b8063481c6a751161024e578063481c6a75146105985780634bd8588b146105b85780634e68d297146105ee57600080fd5b80633f4ba83a14610543578063402914f51461055857806347f7e7621461057857600080fd5b8063248a9ca3116102d65780632f94602a116102b05780632f94602a146104b2578063313ce567146104d257806336568abe1461052357600080fd5b8063248a9ca31461042d578063254800d41461047c5780632f2ff15d1461049257600080fd5b80631216526c116103075780631216526c146103c85780631820cabb146103f65780631ed203471461040d57600080fd5b806301ffc9a71461033957806302c7e7af1461036e5780630ddb6feb146103a657600080fd5b3661033457005b600080fd5b34801561034557600080fd5b506103596103543660046135d7565b610a76565b60405190151581526020015b60405180910390f35b34801561037a57600080fd5b5060035461038e906001600160a01b031681565b6040516001600160a01b039091168152602001610365565b3480156103b257600080fd5b506103c66103c1366004613646565b610b0f565b005b3480156103d457600080fd5b506103e86103e3366004613771565b610cec565b604051908152602001610365565b34801561040257600080fd5b506103e862ed4e0081565b34801561041957600080fd5b5060005461038e906001600160a01b031681565b34801561043957600080fd5b506103e86104483660046137ae565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561048857600080fd5b506103e860095481565b34801561049e57600080fd5b506103c66104ad3660046137c7565b610d1c565b3480156104be57600080fd5b506103c66104cd3660046137f3565b610d66565b3480156104de57600080fd5b506005546104ff9060ff808216916101008104821691620100009091041683565b6040805160ff94851681529284166020840152921691810191909152606001610365565b34801561052f57600080fd5b506103c661053e3660046137c7565b61100b565b34801561054f57600080fd5b506103c661105c565b34801561056457600080fd5b506103e8610573366004613825565b611099565b34801561058457600080fd5b5061038e610593366004613771565b6110a4565b3480156105a457600080fd5b5060015461038e906001600160a01b031681565b3480156105c457600080fd5b5061038e6105d33660046137ae565b600b602052600090815260409020546001600160a01b031681565b3480156105fa57600080fd5b506103c6610609366004613771565b6110f0565b34801561061a57600080fd5b506103c661121a565b6103c6610631366004613840565b61132a565b34801561064257600080fd5b506103e860075481565b34801561065857600080fd5b506103e8611349565b34801561066d57600080fd5b506103c661067c366004613825565b611378565b34801561068d57600080fd5b506103e860065481565b3480156106a357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610359565b3480156106da57600080fd5b506103e861152d565b3480156106ef57600080fd5b506103c66106fe366004613825565b611540565b34801561070f57600080fd5b506103e860085481565b34801561072557600080fd5b506103c66116f5565b34801561073a57600080fd5b506103c661172f565b34801561074f57600080fd5b506103e862278d0081565b34801561076657600080fd5b506103596107753660046137c7565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156107cb57600080fd5b5060045461038e906001600160a01b031681565b3480156107eb57600080fd5b506103c66107fa3660046138a2565b611856565b34801561080b57600080fd5b506103c661081a3660046138c4565b61198d565b34801561082b57600080fd5b506103e861083a3660046137ae565b611ac4565b34801561084b57600080fd5b506103e87fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c3281565b34801561087f57600080fd5b506103e8600081565b34801561089457600080fd5b506103e86108a3366004613825565b600c6020526000908152604090205481565b3480156108c157600080fd5b506108fe6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516103659190613940565b34801561091757600080fd5b506103c6610926366004613953565b611acf565b34801561093757600080fd5b5061094b6109463660046137ae565b611c82565b60408051938452602084019290925290820152606001610365565b34801561097257600080fd5b506103c6610981366004613990565b611cb5565b34801561099257600080fd5b506103c6611d79565b3480156109a757600080fd5b506103e8600a5481565b3480156109bd57600080fd5b506103c66109cc3660046137c7565b611e66565b3480156109dd57600080fd5b506103c66109ec3660046139ba565b611eaa565b3480156109fd57600080fd5b5061094b610a0c366004613825565b600d6020526000908152604090208054600182015460029092015490919083565b348015610a3957600080fd5b506103e87f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610a6d57600080fd5b506103c66120b0565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610b0957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610b5a5750825b905060008267ffffffffffffffff166001148015610b775750303b155b905081158015610b85575080155b15610bbc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bf057845468ff00000000000000001916680100000000000000001785555b610bfa8c8c611eaa565b600380546001600160a01b03808d1673ffffffffffffffffffffffffffffffffffffffff199283161790925560048054928c16929091169190911790556005805460ff8981166101000261ffff19909216908b1617179055610c5c87896139fa565b6005805460ff92909216620100000262ff000019909216919091179055610c868662015180613a13565b610c909042613a2a565b6009558315610cde57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b600081604051602001610cff9190613a3d565b604051602081830303815290604052805190602001209050919050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d5681612209565b610d608383612213565b50505050565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff16610de95760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c60448201526064015b60405180910390fd5b60008211610e395760405162461bcd60e51b815260206004820152601560248201527f546f6b656e73616c653a205a65726f20707269636500000000000000000000006044820152606401610de0565b8060085411610eb05760405162461bcd60e51b815260206004820152603360248201527f546f6b656e73616c653a20696e64657820657863656564732074686520746f7460448201527f616c206e756d626572206f662072616e676573000000000000000000000000006064820152608401610de0565b838311610f255760405162461bcd60e51b815260206004820152602960248201527f546f6b656e73616c653a206d61782073686f756c64206265206772656174657260448201527f207468616e206d696e00000000000000000000000000000000000000000000006064820152608401610de0565b8015610fa8576002610f38600183613a59565b81548110610f4857610f48613a6c565b9060005260206000209060030201600101548411610fa85760405162461bcd60e51b815260206004820152601860248201527f546f6b656e73616c653a2052616e6765206f7665726c617000000000000000006044820152606401610de0565b60405180606001604052808581526020018481526020018381525060028281548110610fd657610fd6613a6c565b906000526020600020906003020160008201518160000155602082015181600101556040820151816002015590505050505050565b6001600160a01b038116331461104d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105782826122e2565b505050565b611064612388565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861108e81612209565b6110966123e3565b50565b6000610b098261244f565b6000600b6000836040516020016110bb9190613a3d565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031692915050565b6110f8612535565b60008160405160200161110b9190613a3d565b60408051601f1981840301815291815281516020928301206000818152600b9093529120549091506001600160a01b0316156111af5760405162461bcd60e51b815260206004820152602260248201527f546f6b656e73616c653a2072656620697320616c7265616479206f636375706960448201527f65640000000000000000000000000000000000000000000000000000000000006064820152608401610de0565b6000818152600b602052604090819020805473ffffffffffffffffffffffffffffffffffffffff19163390811790915590517f28c2042d47dae842c891381da79d653bd93fde6b1a3db536dfd0506d360237f89161120e918590613a82565b60405180910390a15050565b611222612591565b336000818152600d602052604081209161123b9061244f565b90506000811161128d5760405162461bcd60e51b815260206004820152601e60248201527f546f6b656e73616c653a204e6f7468696e6720746f20776974686472617700006044820152606401610de0565b808260020160008282546112a19190613a2a565b909155506112b190503382612612565b80600a60008282546112c39190613a59565b909155505060405181815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309060200160405180910390a2505061132860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b61133261264f565b61133b8261271f565b611345828261272a565b5050565b600061135361282b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b3360009081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff1661141b5760405162461bcd60e51b8152602060048201526024808201527f4261736541646d696e3a20556e617574686f72697a6564204d616e616765722060448201527f63616c6c000000000000000000000000000000000000000000000000000000006064820152608401610de0565b6114248161288d565b600154604080516001600160a01b039283168152918316602083015260608282018190526007908301527f4d616e61676572000000000000000000000000000000000000000000000000006080830152517f0cedc2dfe436c9a0d7a26b8dad9e3235bf5a46ea0626be5a0453553850f5ac1e9181900360a00190a16001546114d6907f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08906001600160a01b03166122e2565b506001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155611345907f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0890612213565b61153d62278d0062ed4e00613aa4565b81565b3360009081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff166115e35760405162461bcd60e51b8152602060048201526024808201527f4261736541646d696e3a20556e617574686f72697a6564204d616e616765722060448201527f63616c6c000000000000000000000000000000000000000000000000000000006064820152608401610de0565b6115ec8161288d565b600054604080516001600160a01b039283168152918316602083015260608282018190526003908301527f43464f00000000000000000000000000000000000000000000000000000000006080830152517f0cedc2dfe436c9a0d7a26b8dad9e3235bf5a46ea0626be5a0453553850f5ac1e9181900360a00190a160005461169e907fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c32906001600160a01b03166122e2565b506000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117909155611345907fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c3290612213565b6116fd612535565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0861172781612209565b6110966128e3565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff166117ad5760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610de0565b60006117b761293e565b9050600081116118095760405162461bcd60e51b815260206004820152601f60248201527f546f6b656e73616c653a20204e6f7468696e6720746f207769746864726177006044820152606401610de0565b60005461181f906001600160a01b0316826129b6565b6040518181527f2327493b995ecbc69b2aa9b54d45db7b4300628102130523175c46bfb30a0a39906020015b60405180910390a150565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff166118d45760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610de0565b6127108211156119265760405162461bcd60e51b815260206004820152601e60248201527f52656620747970652031207265776172647320657863656564203130302500006044820152606401610de0565b612710611934826002613a13565b11156119825760405162461bcd60e51b815260206004820152601e60248201527f52656620747970652032207265776172647320657863656564203130302500006044820152606401610de0565b600691909155600755565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff16611a0b5760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610de0565b604080516060810182528481526020810184815291810183815260028054600181018255600091825292517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60039094029384015592517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf830155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0909101556008805491611aba83613ac6565b9190505550505050565b6000610b09826129cd565b611ad7612535565b611adf612591565b60008211611b555760405162461bcd60e51b815260206004820152602160248201527f546f6b656e73616c653a207061796d656e7420616d6f756e74206973207a657260448201527f6f000000000000000000000000000000000000000000000000000000000000006064820152608401610de0565b611b5e81612b4d565b611b6782612bd2565b600080611b7b611b76856129cd565b612dc8565b91509150600082118015611b8f5750600081115b611c015760405162461bcd60e51b815260206004820152602560248201527f546f6b656e73616c653a2057726f6e672070726963652072616e67652073657460448201527f74696e67730000000000000000000000000000000000000000000000000000006064820152608401610de0565b611c0a81612df5565b611c1382612e49565b611c1c84612f4e565b604080518381526020810183905233917f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f33910160405180910390a2505061134560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60028181548110611c9257600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff16611d335760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610de0565b6005805460ff8381166101000261ffff1990921690851617179055611d5881836139fa565b6005805460ff92909216620100000262ff0000199092169190911790555050565b3360009081527fc33c705e25bc2220b8b7bc5991fc7eb9fd02e7f6db432cb76b4f1d5b507ab9a9602052604090205460ff16611df75760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a20556e617574686f72697a65642043464f2063616c6c6044820152606401610de0565b6000611e01613014565b9050600a54811115611096576000600a5482611e1d9190613a59565b600054909150611e36906001600160a01b031682612612565b6040518181527f9c6393f251205f9e03559951cab4c9ae71767b6174f77944a5b0c2fa51fbda9f9060200161120e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611ea081612209565b610d6083836122e2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015611ef55750825b905060008267ffffffffffffffff166001148015611f125750303b155b905081158015611f20575080155b15611f57576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611f8b57845468ff00000000000000001916680100000000000000001785555b611f948761288d565b611f9d8661288d565b611fa5613045565b611fad61304d565b611fb5613045565b611fbd61305d565b611fc8600033612213565b50611ff37fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c3288612213565b5061201e7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0887612213565b50600080546001600160a01b03808a1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600180549289169290911691909117905583156120a757845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b7fa3096443b30f1eec162a8cf66862cf662a85fd0e4fd35a824b183bfeac968c326120da81612209565b6040517f436f696e205769746864726177000000000000000000000000000000000000008152479060009033908390600d0160006040518083038185875af1925050503d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b505090508061219f5760405162461bcd60e51b815260206004820152601460248201527f436f696e207769746864726177206661696c65640000000000000000000000006044820152606401610de0565b60408051818152600b818301527f4e617469766520436f696e000000000000000000000000000000000000000000606082015233602082015290517f8703deb082bbe9dd18bf858af977f1d7ced58bd7803c949a6e1011ae2d79f1ac9181900360800190a1505050565b611096813361306d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166122d8576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561228e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610b09565b6000915050610b09565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156122d8576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610b09565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611328576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123eb612388565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200161184b565b6001600160a01b0381166000908152600d6020908152604080832081516060810183528154815260018201549381018490526002909101549181019190915290158061249b5750805142105b156124a95750600092915050565b80516000906124b89042613a59565b905060006124c962278d0083613aa4565b905060006124dd62278d0062ed4e00613aa4565b821015612513576124f462278d0062ed4e00613aa4565b8285602001516125049190613a13565b61250e9190613aa4565b612519565b83602001515b905083604001518161252b9190613a59565b9695505050505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611328576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161260c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b600354611345906001600160a01b031683836130fa565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806126e857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126dc7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611328576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134581612209565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612784575060408051601f3d908101601f1916820190925261278191810190613ae0565b60015b6127c5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610de0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612821576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401610de0565b611057838361316e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611328576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166110965760405162461bcd60e51b815260206004820181905260248201527f4261736541646d696e3a2061646472657373207a65726f2070726f76696465646044820152606401610de0565b6128eb612535565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612437565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a08231906024015b602060405180830381865afa15801561298d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b19190613ae0565b905090565b600454611345906001600160a01b031683836130fa565b600060026000815481106129e3576129e3613a6c565b906000526020600020906003020160000154821015612a6a5760405162461bcd60e51b815260206004820152603160248201527f546f6b656e73616c653a2063617368416d6f756e742069732062656c6f77207460448201527f6865206d696e696d756d20616d6f756e740000000000000000000000000000006064820152608401610de0565b60005b600854811015612b445760028181548110612a8a57612a8a613a6c565b9060005260206000209060030201600001548310158015612acf575060028181548110612ab957612ab9613a6c565b9060005260206000209060030201600101548311155b15612b3c576005546305f5e10090612af19062010000900460ff16600a613bdd565b60028381548110612b0457612b04613a6c565b90600052602060002090600302016002015485612b219190613a13565b612b2b9190613a13565b612b359190613aa4565b9392505050565b600101612a6d565b50600092915050565b600081604051602001612b609190613a3d565b60408051601f198184030181529181528151602092830120336000908152600c909352912054909150158015612b97575060008251115b8015612bba57506000818152600b60205260409020546001600160a01b03163314155b1561134557336000908152600c602052604090205550565b600480546040516370a0823160e01b815233928101929092526001600160a01b031690829082906370a0823190602401602060405180830381865afa158015612c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c439190613ae0565b1015612cb65760405162461bcd60e51b8152602060048201526024808201527f546f6b656e73616c653a20496e73756666696369656e7420636173682062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610de0565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815233600482015230602482015282906001600160a01b0383169063dd62ed3e90604401602060405180830381865afa158015612d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3f9190613ae0565b1015612db35760405162461bcd60e51b815260206004820152602660248201527f546f6b656e73616c653a20496e73756666696369656e74206361736820616c6c60448201527f6f77616e636500000000000000000000000000000000000000000000000000006064820152608401610de0565b6113456001600160a01b0382163330856131c4565b6000806064612dd8846028613a13565b612de29190613aa4565b9150612dee8284613a59565b9050915091565b336000908152600d602052604081208054909103612e135760095481555b81816001016000828254612e279190613a2a565b9250508190555081600a6000828254612e409190613a2a565b90915550505050565b600354600a546040516370a0823160e01b81523060048201526001600160a01b039092169183919083906370a0823190602401602060405180830381865afa158015612e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ebd9190613ae0565b612ec79190613a59565b1015612f3a5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e73616c653a204e6f7420656e6f75676820746f6b656e7320746f2060448201527f73656c6c000000000000000000000000000000000000000000000000000000006064820152608401610de0565b6113456001600160a01b03821633846130fa565b336000908152600c6020908152604080832054808452600b909252909120546001600160a01b03168015801590612f8e57506001600160a01b0381163314155b15611057576001600160a01b038082166000908152600c60209081526040808320548352600b909152902054168015612fff57612fe58161271060075487612fd69190613a13565b612fe09190613aa4565b6129b6565b612ffa8261271060065487612fd69190613a13565b610d60565b610d608261271060065487612fd69190613a13565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401612970565b6113286131fd565b6130556131fd565b611328613264565b6130656131fd565b611328613297565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611345576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610de0565b6040516001600160a01b0383811660248301526044820183905261105791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061329f565b6131778261331b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156131bc5761105782826133b8565b61134561342e565b6040516001600160a01b038481166024830152838116604483015260648201839052610d609186918216906323b872dd90608401613127565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611328576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61326c6131fd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6126296131fd565b60006132b46001600160a01b03841683613466565b905080516000141580156132d95750808060200190518101906132d79190613bec565b155b15611057576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610de0565b806001600160a01b03163b60000361336a576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610de0565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516133d59190613a3d565b600060405180830381855af49150503d8060008114613410576040519150601f19603f3d011682016040523d82523d6000602084013e613415565b606091505b5091509150613425858383613474565b95945050505050565b3415611328576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060612b35838360006134e9565b6060826134895761348482613595565b612b35565b81511580156134a057506001600160a01b0384163b155b156134e2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610de0565b5092915050565b606081471015613527576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610de0565b600080856001600160a01b031684866040516135439190613a3d565b60006040518083038185875af1925050503d8060008114613580576040519150601f19603f3d011682016040523d82523d6000602084013e613585565b606091505b509150915061252b868383613474565b8051156135a55780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156135e957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612b3557600080fd5b80356001600160a01b038116811461363057600080fd5b919050565b803560ff8116811461363057600080fd5b600080600080600080600060e0888a03121561366157600080fd5b61366a88613619565b965061367860208901613619565b955061368660408901613619565b945061369460608901613619565b93506136a260808901613635565b92506136b060a08901613635565b915060c0880135905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156136f6576136f66136c5565b604051601f8501601f19908116603f0116810190828211818310171561371e5761371e6136c5565b8160405280935085815286868601111561373757600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261376257600080fd5b612b35838335602085016136db565b60006020828403121561378357600080fd5b813567ffffffffffffffff81111561379a57600080fd5b6137a684828501613751565b949350505050565b6000602082840312156137c057600080fd5b5035919050565b600080604083850312156137da57600080fd5b823591506137ea60208401613619565b90509250929050565b6000806000806080858703121561380957600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561383757600080fd5b612b3582613619565b6000806040838503121561385357600080fd5b61385c83613619565b9150602083013567ffffffffffffffff81111561387857600080fd5b8301601f8101851361388957600080fd5b613898858235602084016136db565b9150509250929050565b600080604083850312156138b557600080fd5b50508035926020909101359150565b6000806000606084860312156138d957600080fd5b505081359360208301359350604090920135919050565b60005b8381101561390b5781810151838201526020016138f3565b50506000910152565b6000815180845261392c8160208601602086016138f0565b601f01601f19169290920160200192915050565b602081526000612b356020830184613914565b6000806040838503121561396657600080fd5b82359150602083013567ffffffffffffffff81111561398457600080fd5b61389885828601613751565b600080604083850312156139a357600080fd5b6139ac83613635565b91506137ea60208401613635565b600080604083850312156139cd57600080fd5b6139d683613619565b91506137ea60208401613619565b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115610b0957610b096139e4565b8082028115828204841417610b0957610b096139e4565b80820180821115610b0957610b096139e4565b60008251613a4f8184602087016138f0565b9190910192915050565b81810381811115610b0957610b096139e4565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03831681526040602082015260006137a66040830184613914565b600082613ac157634e487b7160e01b600052601260045260246000fd5b500490565b60006000198203613ad957613ad96139e4565b5060010190565b600060208284031215613af257600080fd5b5051919050565b600181815b80851115613b34578160001904821115613b1a57613b1a6139e4565b80851615613b2757918102915b93841c9390800290613afe565b509250929050565b600082613b4b57506001610b09565b81613b5857506000610b09565b8160018114613b6e5760028114613b7857613b94565b6001915050610b09565b60ff841115613b8957613b896139e4565b50506001821b610b09565b5060208310610133831016604e8410600b8410161715613bb7575081810a610b09565b613bc18383613af9565b8060001904821115613bd557613bd56139e4565b029392505050565b6000612b3560ff841683613b3c565b600060208284031215613bfe57600080fd5b81518015158114612b3557600080fdfea2646970667358221220db94bde104ca309c7dc3a8a70bfd95654adfb1568f3fc27b5c43642ca076130864736f6c63430008180033