0 txs
259 calls
constructor
constructor()
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
events
viewfunction events(address) view returns (string name, address paymentToken, address tokenAddress, address vestingAddress, uint8 eventType)
eventsList
viewfunction eventsList(uint256) view returns (address)
feeData
viewfunction feeData() view returns (uint32 platformFee, uint32 decubateFee, address platformFeeReceiver, address decubateFeeReceiver)
getInvestmentInfo
viewfunction getInvestmentInfo(address _account, address _event) view returns (tuple, uint256 amount, tuple v, tuple w, uint256 claimable)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getUserInvestments
viewfunction getUserInvestments(address _address) view returns (address[])
getVestingInfo
viewfunction getVestingInfo(address _account, address _event) view returns (tuple info, tuple whitelist, uint256 claimable)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAX_FEE
viewfunction MAX_FEE() view returns (uint32)
numUserInvestments
viewfunction numUserInvestments(address) view returns (uint256)
referenceContract
viewfunction referenceContract() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
userAmount
viewfunction userAmount(address, address) view returns (uint256)
changeIDOParams
nonpayablefunction changeIDOParams(address _event, tuple _c)
changeL2EParams
nonpayablefunction changeL2EParams(address _event, tuple _t)
changeToken
nonpayablefunction changeToken(address _event, address _newToken)
changeVestingParams
nonpayablefunction changeVestingParams(address _event, uint256 _cliff, uint256 _start, uint256 _duration, uint256 _initialUnlockPercent)
claimDistribution
nonpayablefunction claimDistribution(address _event) returns (bool)
deployIDO
nonpayablefunction deployIDO(string _name, tuple _c, tuple _v)
deployL2E
nonpayablefunction deployL2E(string _name, tuple _t, tuple _v)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _referenceContract)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
rescueTokensFromContract
nonpayablefunction rescueTokensFromContract(address _event, address _receiver, uint256 _amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setFeeValues
nonpayablefunction setFeeValues(tuple _feeData)
setManagerRole
nonpayablefunction setManagerRole(address _user, bool _status)
setUserInvestment
nonpayablefunction setUserInvestment(address _address, address _event, uint256 _amount) returns (bool)
events
DistributionClaimed
event DistributionClaimed(address _user, address _event)
IDODeployed
event IDODeployed(string _name, (uint32 startDate, uint32 gracePeriod, address innovator, address paymentToken, address saleTokenAddr, uint256 hardcap, uint256 totalTokenOnSale, uint32[3] durations) _c, (uint256 _startTime, uint256 _cliff, uint256 _duration, uint256 _initialUnlockPercent) _v)
ImplementationsChanged
event ImplementationsChanged(address _newVesting, address _newL2E, address _newIDO)
Initialized
event Initialized(uint8 version)
L2EDeployed
event L2EDeployed(string _name, (uint32 endDate, address rewardTokenAddr, address vestingAddr, uint256 distAmount) _t, (uint256 _startTime, uint256 _cliff, uint256 _duration, uint256 _initialUnlockPercent) _v)
ManagerRoleSet
event ManagerRoleSet(address _user, bool _status)
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)
UserInvestmentSet
event UserInvestmentSet(address _address, address _event, uint256 _amount)
errors
InvalidFee
error InvalidFee()
InvalidStartTime
error InvalidStartTime()
NotActive
error NotActive()
NotAuthorized
error NotAuthorized()
OnlyManager
error OnlyManager()
ZeroAddress
error ZeroAddress()
creation bytecode
0x6080604052348015600f57600080fd5b506016601a565b60d8565b600054610100900460ff161560855760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101560d6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61403e806100e76000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806391c4e6b511610104578063c9431f92116100a2578063eda5d30f11610071578063eda5d30f146104ac578063edd58f2f146104d7578063f087c8eb146104fb578063ffc7b0951461050e57600080fd5b8063c9431f9214610401578063d547741f14610414578063e753e60014610427578063eb9e70d11461049957600080fd5b8063bc063e1a116100de578063bc063e1a1461039d578063be0c439c146103bb578063c4d66de8146103ce578063c52c5c88146103e157600080fd5b806391c4e6b51461033157806391d148541461035c578063a217fddf1461039557600080fd5b80633c06462611610171578063544a65051161014b578063544a6505146102e557806362015bdc146102f857806373d5692f1461030b5780637aed2b001461031e57600080fd5b80633c0646261461029f5780634db80fb7146102bf5780635406a113146102d257600080fd5b8063248a9ca3116101ad578063248a9ca3146102245780632f2ff15d146102555780633194bfe11461026857806336568abe1461028c57600080fd5b806301ffc9a7146101d45780630bb85cb8146101fc57806320cc7b4e14610211575b600080fd5b6101e76101e2366004612f1c565b610530565b60405190151581526020015b60405180910390f35b61020f61020a366004613083565b6105c9565b005b61020f61021f366004613147565b6108c3565b610247610232366004613180565b60009081526065602052604090206001015490565b6040519081526020016101f3565b61020f610263366004613199565b610b4c565b61027b6102763660046131be565b610b76565b6040516101f3959493929190613295565b61020f61029a366004613199565b610c53565b6102476102ad3660046131be565b60976020526000908152604090205481565b6101e76102cd3660046132e0565b610cfe565b61020f6102e0366004613380565b610f0a565b61020f6102f3366004613417565b611045565b6101e76103063660046131be565b6114b2565b61020f6103193660046132e0565b6115e8565b61020f61032c36600461348d565b61173d565b61024761033f366004613147565b609860209081526000928352604080842090915290825290205481565b6101e761036a366004613199565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610247600081565b6103a661138881565b60405163ffffffff90911681526020016101f3565b61020f6103c93660046134bb565b6117ef565b61020f6103dc3660046131be565b611995565b6103f46103ef3660046131be565b611bcf565b6040516101f3919061351e565b61020f61040f36600461356b565b611d09565b61020f610422366004613199565b611de4565b609c54609d546104629163ffffffff808216926401000000008304909116916001600160a01b03680100000000000000009091048116911684565b6040805163ffffffff95861681529490931660208501526001600160a01b03918216928401929092521660608201526080016101f3565b61020f6104a73660046135af565b611e09565b609a546104bf906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b6104ea6104e5366004613147565b61249c565b6040516101f3959493929190613618565b6104bf610509366004613180565b6126b2565b61052161051c366004613147565b6126dc565b6040516101f393929190613717565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105c357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16610631576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408101516001600160a01b03161580610656575060608101516001600160a01b0316155b8061066c575060808101516001600160a01b0316155b156106a3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808316600090815260996020908152604080832060030154815160a081018352848152928301849052908201839052606082018390526080820192909252849291909116906106f8612eb3565b6040808601516001600160a01b0390811684526080808801805183166020808801919091526060808b01805186168988015260c0808d018051848c0152848e015163ffffffff908116888d0152905160a0808c01919091528e0151918a01919091528c511688528051861691880191909152825185169387019390935260e0808b01519087015291518a841660009081526099909352918490206001810180549385167fffffffffffffffffffffffff00000000000000000000000000000000000000009485161790559051600290910180549184169190921617905590517ffe94fb550000000000000000000000000000000000000000000000000000000081529085169063fe94fb55906108129084906004016137d3565b600060405180830381600087803b15801561082c57600080fd5b505af1158015610840573d6000803e3d6000fd5b50506040517fab29b2f90000000000000000000000000000000000000000000000000000000081526001600160a01b038616925063ab29b2f9915061088990859060040161384e565b600060405180830381600087803b1580156108a357600080fd5b505af11580156108b7573d6000803e3d6000fd5b50505050505050505050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff1661092b576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038281166000908152609960205260409020600301541661097f576040517f80cb55e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166109bf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382811660009081526099602052604081206002810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169385169390931790925560039091015474010000000000000000000000000000000000000000900460ff166001811115610a3c57610a3c61322b565b03610aba576040517f144fa6d70000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015283919082169063144fa6d790602401600060405180830381600087803b158015610aa057600080fd5b505af1158015610ab4573d6000803e3d6000fd5b50505050505b6001600160a01b03828116600090815260996020526040908190206003015490517f144fa6d70000000000000000000000000000000000000000000000000000000081528383166004820152911690819063144fa6d7906024015b600060405180830381600087803b158015610b2f57600080fd5b505af1158015610b43573d6000803e3d6000fd5b50505050505050565b600082815260656020526040902060010154610b6781612903565b610b718383612910565b505050565b609960205260009081526040902080548190610b9190613896565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90613896565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b505050506001830154600284015460039094015492936001600160a01b039182169390821692509081169074010000000000000000000000000000000000000000900460ff1685565b6001600160a01b0381163314610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610cfa82826129d0565b5050565b6001600160a01b03828116600090815260996020526040812060030154909116610d54576040517f80cb55e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336001600160a01b03841614610d96576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0380841660009081526098602090815260408083209388168352929052908120549003610dee576001600160a01b0384166000908152609760205260408120805491610de883613912565b91905055505b81158015610e1357506001600160a01b03841660009081526097602052604090205415155b8015610e67575060016001600160a01b03841660009081526099602052604090206003015474010000000000000000000000000000000000000000900460ff166001811115610e6457610e6461322b565b14155b15610e96576001600160a01b0384166000908152609760205260408120805491610e908361394a565b91905055505b6001600160a01b03838116600081815260986020908152604080832094891680845294825291829020869055815193845283019190915281018390527f88b0ff6070d5534a52a2c337fae5e16039fdf801b632d9150c3c7c09b24d2d589060600160405180910390a15060015b9392505050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16610f72576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516001600160a01b0316610fb6576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020818101516001600160a01b038481166000818152609990945260409384902060020180547fffffffffffffffffffffffff000000000000000000000000000000000000000016929093169190911790915590517f9f03a510000000000000000000000000000000000000000000000000000000008152839190639f03a51090610b1590859060040161397f565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff166110ad576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208201516001600160a01b03166110f1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815163ffffffff1681351015611133576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111b4609a60009054906101000a90046001600160a01b03166001600160a01b0316639f8fbf076040518163ffffffff1660e01b8152600401602060405180830381865afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af91906139c3565b612a71565b9050600061120e609a60009054906101000a90046001600160a01b03166001600160a01b03166387df55746040518163ffffffff1660e01b8152600401602060405180830381865afa15801561118b573d6000803e3d6000fd5b6001600160a01b0380821660408088019190915290841660009081526099602052209091508290829080611243898b83613a30565b506003810180547fffffffffffffffffffffff000000000000000000000000000000000000000000166001600160a01b0386811691909117740100000000000000000000000000000000000000001790915560208801516002830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116928416929092179055609b80546001810182556000919091527fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc3490180549091168783161790556040517f5040ed0700000000000000000000000000000000000000000000000000000000815290841690635040ed0790611348908a9060040161397f565b600060405180830381600087803b15801561136257600080fd5b505af1158015611376573d6000803e3d6000fd5b50505060208801516040517faee6023a0000000000000000000000000000000000000000000000000000000081526001600160a01b038516925063aee6023a916113c4918a90600401613b2d565b600060405180830381600087803b1580156113de57600080fd5b505af11580156113f2573d6000803e3d6000fd5b50506040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301528516925063f2fde38b9150602401600060405180830381600087803b15801561145257600080fd5b505af1158015611466573d6000803e3d6000fd5b505050507fb20920cbc00d91a5286a1f82c7ae4e8b283ef71f5f7a7429b7d95c442c9e430a8989898960405161149f9493929190613b96565b60405180910390a1505050505050505050565b6001600160a01b03818116600090815260996020526040812060030154909116611508576040517f80cb55e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038281166000818152609960209081526040918290206003015482513381529182019390935291909216917fa7da82a0253d08a8beb54da7b1b6a79346b048788d9e6ba26cc5b57fd9da15ef910160405180910390a16040517f62015bdc0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038216906362015bdc906024016020604051808303816000875af11580156115c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f039190613c21565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16611650576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260996020526040902060030154166116a4576040517f80cb55e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03838116600090815260996020526040908190206003015490517f573761980000000000000000000000000000000000000000000000000000000081528483166004820152602481018490529116908190635737619890604401600060405180830381600087803b15801561171f57600080fd5b505af1158015611733573d6000803e3d6000fd5b5050505050505050565b600061174881612903565b811561177d576117787f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0884610b4c565b6117a7565b6117a77f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0884611de4565b604080516001600160a01b038516815283151560208201527f4e0821e9e83e6ed2861d90c07a96114379e9c5b5e6ea2afec5ac6e49d745314c910160405180910390a1505050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16611857576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118646002611388613c3e565b63ffffffff16816000015163ffffffff16118061189c57506118896002611388613c3e565b63ffffffff16816020015163ffffffff16115b156118d3576040517f58d620b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051609c80546020840151604085015163ffffffff9485167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316929092176401000000009490911693909302929092177fffffffff0000000000000000000000000000000000000000ffffffffffffffff16680100000000000000006001600160a01b0393841602179055606090910151609d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b600054610100900460ff16158080156119b55750600054600160ff909116105b806119cf5750303b1580156119cf575060005460ff166001145b611a5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ce7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ab957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b038216611af9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b01612b2c565b611b0c600033612bc5565b611b367f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0833612bc5565b609a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384161790558015610cfa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6001600160a01b0381166000908152609760205260408120546060919067ffffffffffffffff811115611c0457611c04612f7e565b604051908082528060200260200182016040528015611c2d578160200160208202803683370190505b5090506000805b609b54811015611d005760986000609b8381548110611c5557611c55613c88565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822093891682529290925290205415611cf857609b8181548110611ca257611ca2613c88565b9060005260206000200160009054906101000a90046001600160a01b0316838381518110611cd257611cd2613c88565b6001600160a01b039092166020928302919091019091015281611cf481613912565b9250505b600101611c34565b50909392505050565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16611d71576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03858116600090815260996020526040908190206003015490517f8dfd6a89000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606481018490529116908190638dfd6a8990608401610889565b600082815260656020526040902060010154611dff81612903565b610b7183836129d0565b3360009081527fcee91eb23e767f0f440dd9fce5554f355614443931e9ac5ce78c67b9e06e6f70602052604090205460ff16611e71576040517fc0b2335a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e8360608401604085016131be565b6001600160a01b03161480611eb057506000611ea560808401606085016131be565b6001600160a01b0316145b80611ed357506000611ec860a08401608085016131be565b6001600160a01b0316145b15611f0a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f1e61014084016101208501613cb7565b611f3061012085016101008601613cb7565b611f41610100860160e08701613cb7565b611f4b9190613cd2565b611f559190613cd2565b63ffffffff16905080611f6b6020850185613cb7565b63ffffffff16611f7b9190613cef565b82351015611fb5576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061200d609a60009054906101000a90046001600160a01b03166001600160a01b0316634f47c9426040518163ffffffff1660e01b8152600401602060405180830381865afa15801561118b573d6000803e3d6000fd5b90506000612067609a60009054906101000a90046001600160a01b03166001600160a01b03166387df55746040518163ffffffff1660e01b8152600401602060405180830381865afa15801561118b573d6000803e3d6000fd5b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152909150829082906120a1612eb3565b6120b160608a0160408b016131be565b6001600160a01b031682526120cc60a08a0160808b016131be565b6001600160a01b031660208301526120ea60808a0160608b016131be565b6001600160a01b031660408084019190915260c08a01356060840152612115908a0160208b01613cb7565b63ffffffff166080830152306020808301919091526001600160a01b038616604083015260c0808b013560a0808501919091528b01359083015261215b908a018a613cb7565b63ffffffff16815261217360808a0160608b016131be565b6001600160a01b0316606082015261219160a08a0160808b016131be565b6001600160a01b031660808201526040805160608181019092529060e08b01906003908390839080828437600092018290525060e085019390935250506001600160a01b0387168152609960205260409020806121ef8c8e83613a30565b506003810180547fffffffffffffffffffffff000000000000000000000000000000000000000000166001600160a01b03881617905561223560a08b0160808c016131be565b6002820180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905561227f60808b0160608c016131be565b600182810180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0394851617909155609b805492830181556000527fbba9db4cdbea0a37c207bbb83e20f828cd4441c49891101dc94fd20dc8efc34990910180549091168983161790556040517fdb2a4c290000000000000000000000000000000000000000000000000000000081529086169063db2a4c29906123329085906004016137d3565b600060405180830381600087803b15801561234c57600080fd5b505af1158015612360573d6000803e3d6000fd5b50506040517fed6dc4060000000000000000000000000000000000000000000000000000000081526001600160a01b038716925063ed6dc40691506123ab9086908d90600401613d02565b600060405180830381600087803b1580156123c557600080fd5b505af11580156123d9573d6000803e3d6000fd5b50506040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b038a811660048301528716925063f2fde38b9150602401600060405180830381600087803b15801561243957600080fd5b505af115801561244d573d6000803e3d6000fd5b505050507f993202c1097d48ff4047ade98c46c82c5bd4f808be20c79669fff0b7b6c7d2a28c8c8c8c6040516124869493929190613da7565b60405180910390a1505050505050505050505050565b6124cb6040805160a0810182526060808252600060208301819052928201839052810182905290608082015290565b60006124f86040518060800160405280600081526020016000815260200160008152602001600081525090565b6125436040518060e0016040528060001515815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b600061254f87876126dc565b6001600160a01b03808a16600090815260996020908152604080832060988352818420948f168452939091529081902054815160a08101909252825495985093965091945092869186918691908690829082906125ab90613896565b80601f01602080910402602001604051908101604052809291908181526020018280546125d790613896565b80156126245780601f106125f957610100808354040283529160200191612624565b820191906000526020600020905b81548152906001019060200180831161260757829003601f168201915b50505091835250506001828101546001600160a01b0390811660208401526002840154811660408401526003840154908116606084015260809092019174010000000000000000000000000000000000000000900460ff169081111561268c5761268c61322b565b600181111561269d5761269d61322b565b9052509c939b50919950975095509350505050565b609b81815481106126c257600080fd5b6000918252602090912001546001600160a01b0316905081565b6127076040518060800160405280600081526020016000815260200160008152602001600081525090565b6127526040518060e0016040528060001515815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038084166000908152609960205260408082206003015481517fdc25a300000000000000000000000000000000000000000000000000000000008152915192931691829163dc25a3009160048083019260809291908290030181865afa1580156127c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127eb9190613e91565b6040517f30edc0f50000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152919550908216906330edc0f59060240160e060405180830381865afa15801561284e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128729190613ed7565b6040517f2afd1a7d0000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015291945090821690632afd1a7d90602401602060405180830381865afa1580156128d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f99190613f6d565b9150509250925092565b61290d8133612bcf565b50565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610cfa5760008281526065602090815260408083206001600160a01b0385168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561298c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610cfa5760008281526065602090815260408083206001600160a01b038516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116612b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610ce7565b919050565b600054610100900460ff16612bc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ce7565b565b610cfa8282612910565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610cfa57612c0281612c5e565b612c0d836020612c70565b604051602001612c1e929190613f86565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610ce791600401614007565b60606105c36001600160a01b03831660145b60606000612c7f83600261401a565b612c8a906002613cef565b67ffffffffffffffff811115612ca257612ca2612f7e565b6040519080825280601f01601f191660200182016040528015612ccc576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612d0357612d03613c88565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612d6657612d66613c88565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612da284600261401a565b612dad906001613cef565b90505b6001811115612e4a577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612dee57612dee613c88565b1a60f81b828281518110612e0457612e04613c88565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93612e438161394a565b9050612db0565b508315610f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce7565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260e08101612ef9612efe565b905290565b60405180606001604052806003906020820280368337509192915050565b600060208284031215612f2e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f0357600080fd5b6001600160a01b038116811461290d57600080fd5b8035612b2781612f5e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715612fd157612fd1612f7e565b60405290565b6040516080810167ffffffffffffffff81118282101715612fd157612fd1612f7e565b803563ffffffff81168114612b2757600080fd5b600082601f83011261301f57600080fd5b6040516060810181811067ffffffffffffffff8211171561304257613042612f7e565b60405280606084018581111561305757600080fd5b845b818110156130785761306a81612ffa565b835260209283019201613059565b509195945050505050565b60008082840361016081121561309857600080fd5b83356130a381612f5e565b9250610140601f19820112156130b857600080fd5b506130c1612fad565b6130cd60208501612ffa565b81526130db60408501612ffa565b602082015260608401356130ee81612f5e565b60408201526130ff60808501612f73565b606082015261311060a08501612f73565b608082015260c084013560a082015260e084013560c082015261313785610100860161300e565b60e0820152809150509250929050565b6000806040838503121561315a57600080fd5b823561316581612f5e565b9150602083013561317581612f5e565b809150509250929050565b60006020828403121561319257600080fd5b5035919050565b600080604083850312156131ac57600080fd5b82359150602083013561317581612f5e565b6000602082840312156131d057600080fd5b8135610f0381612f5e565b60005b838110156131f65781810151838201526020016131de565b50506000910152565b600081518084526132178160208601602086016131db565b601f01601f19169290920160200192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613291577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60a0815260006132a860a08301886131ff565b6001600160a01b03878116602085015286811660408501528516606084015290506132d6608083018461325a565b9695505050505050565b6000806000606084860312156132f557600080fd5b833561330081612f5e565b9250602084013561331081612f5e565b929592945050506040919091013590565b60006080828403121561333357600080fd5b61333b612fd7565b905061334682612ffa565b8152602082013561335681612f5e565b6020820152604082013561336981612f5e565b806040830152506060820135606082015292915050565b60008060a0838503121561339357600080fd5b823561339e81612f5e565b91506133ad8460208501613321565b90509250929050565b60008083601f8401126133c857600080fd5b50813567ffffffffffffffff8111156133e057600080fd5b6020830191508360208285010111156133f857600080fd5b9250929050565b60006080828403121561341157600080fd5b50919050565b600080600080610120858703121561342e57600080fd5b843567ffffffffffffffff81111561344557600080fd5b613451878288016133b6565b909550935061346590508660208701613321565b91506134748660a087016133ff565b905092959194509250565b801515811461290d57600080fd5b600080604083850312156134a057600080fd5b82356134ab81612f5e565b915060208301356131758161347f565b6000608082840312156134cd57600080fd5b6134d5612fd7565b6134de83612ffa565b81526134ec60208401612ffa565b602082015260408301356134ff81612f5e565b6040820152606083013561351281612f5e565b60608201529392505050565b6020808252825182820181905260009190848201906040850190845b8181101561355f5783516001600160a01b03168352928401929184019160010161353a565b50909695505050505050565b600080600080600060a0868803121561358357600080fd5b853561358e81612f5e565b97602087013597506040870135966060810135965060800135945092505050565b6000806000808486036101e08112156135c757600080fd5b853567ffffffffffffffff8111156135de57600080fd5b6135ea888289016133b6565b909650945050610140601f198201121561360357600080fd5b506020850191506134748661016087016133ff565b60006101c0808352875160a0828501526136366102608501826131ff565b60208a01516001600160a01b039081166101e087015260408b0151811661020087015260608b01511661022086015260808a0151909250905061367d61024085018261325a565b506020830187905290506136b56040830186805182526020810151602083015260408101516040830152606081015160608301525050565b8351151560c08381019190915260208501516001600160a01b031660e084015260408501516101008401526060850151610120840152608085015161014084015260a0850151610160840152909301516101808201526101a001529392505050565b83518152602080850151908201526040808501519082015260608085015190820152610180810161379560808301858051151582526001600160a01b03602082015116602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c08301525050565b82610160830152949350505050565b8060005b60038110156137cd57815163ffffffff168452602093840193909101906001016137a8565b50505050565b60006101408201905063ffffffff835116825260208301516001600160a01b038082166020850152806040860151166040850152806060860151166060850152806080860151166080850152505060a083015160a083015260c083015160c083015260e083015161384760e08401826137a4565b5092915050565b60a081016105c382846001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516060830152608081015160808301525050565b600181811c908216806138aa57607f821691505b602082108103613411577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613943576139436138e3565b5060010190565b600081613959576139596138e3565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b608081016105c3828463ffffffff815116825260208101516001600160a01b0380821660208501528060408401511660408501525050606081015160608301525050565b6000602082840312156139d557600080fd5b8151610f0381612f5e565b601f821115610b71576000816000526020600020601f850160051c81016020861015613a095750805b601f850160051c820191505b81811015613a2857828155600101613a15565b505050505050565b67ffffffffffffffff831115613a4857613a48612f7e565b613a5c83613a568354613896565b836139e0565b6000601f841160018114613aae5760008515613a785750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355613b26565b600083815260209020601f19861690835b82811015613adf5786850135825560209485019460019092019101613abf565b5086821015613b1a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6001600160a01b038316815260a08101610f036020830184803582526020810135602083015260408101356040830152606081013560608301525050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6000610120808352613bab8184018789613b6b565b915050613bf1602083018563ffffffff815116825260208101516001600160a01b0380821660208501528060408401511660408501525050606081015160608301525050565b823560a0830152602083013560c0830152604083013560e083015260608301356101008301525b95945050505050565b600060208284031215613c3357600080fd5b8151610f038161347f565b600063ffffffff80841680613c7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613cc957600080fd5b610f0382612ffa565b63ffffffff818116838216019080821115613847576138476138e3565b808201808211156105c3576105c36138e3565b6101208101613d4b82856001600160a01b038082511683528060208301511660208401528060408301511660408401525060608101516060830152608081015160808301525050565b823560a0830152602083013560c0830152604083013560e08301526060830135610100830152610f03565b8060005b60038110156137cd5763ffffffff613d9183612ffa565b1684526020938401939190910190600101613d7a565b60006101e0808352613dbc8184018789613b6b565b91505063ffffffff80613dce86612ffa565b16602084015280613de160208701612ffa565b166040840152506040840135613df681612f5e565b6001600160a01b038116606084015250613e1260608501612f73565b6001600160a01b038116608084015250613e2e60808501612f73565b6001600160a01b03811660a08401525060a084013560c083015260c084013560e0830152613e63610100830160e08601613d76565b8235610160830152602083013561018083015260408301356101a083015260608301356101c0830152613c18565b600060808284031215613ea357600080fd5b613eab612fd7565b825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600060e08284031215613ee957600080fd5b60405160e0810181811067ffffffffffffffff82111715613f0c57613f0c612f7e565b6040528251613f1a8161347f565b81526020830151613f2a81612f5e565b8060208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c08201528091505092915050565b600060208284031215613f7f57600080fd5b5051919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613fbe8160178501602088016131db565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351613ffb8160288401602088016131db565b01602801949350505050565b602081526000610f0360208301846131ff565b80820281158282048414176105c3576105c36138e356fea164736f6c6343000819000a