9 txs
10 calls
constructor
constructor()
functions
adminWithdrawAddress
viewfunction adminWithdrawAddress() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getClaimableTokens
viewfunction getClaimableTokens(uint256 saleTypeId, address beneficiaryAddress) view returns (uint256)
getCurrentTimestamp
viewfunction getCurrentTimestamp() view returns (uint256)
getPrivateSaleContractAddress
viewfunction getPrivateSaleContractAddress(uint256 _saleTypeId) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSaleType
viewfunction getSaleType(uint256 saleTypeId) view returns (tuple)
getSaleTypesCount
viewfunction getSaleTypesCount() view returns (uint256)
getTokensClaimed
viewfunction getTokensClaimed(uint256 saleTypeId, address beneficiary) view returns (uint256)
getTokensToBeClaimedInTotalPrivateSale
viewfunction getTokensToBeClaimedInTotalPrivateSale(uint256 saleTypeId, address _addressToClaimFor) view returns (uint256 tokensLeftToClaim)
getTokenToClaim
viewfunction getTokenToClaim() view returns (address)
getTokenToClaimDecimals
viewfunction getTokenToClaimDecimals() view returns (uint256)
getTotalAllocation
viewfunction getTotalAllocation(uint256 saleTypeId, address beneficiary) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isContractEnabled
viewfunction isContractEnabled() view returns (bool)
privateSaleContractAddress
viewfunction privateSaleContractAddress(uint256) view returns (address)
saleTypes
viewfunction saleTypes(uint256) view returns (bool exists, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
saleTypesCount
viewfunction saleTypesCount() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokensClaimed
viewfunction tokensClaimed(uint256, address) view returns (uint256)
tokenToClaimAddress
viewfunction tokenToClaimAddress() view returns (address)
tokenToClaimDecimals
viewfunction tokenToClaimDecimals() view returns (uint256)
totalTokensDeposited
viewfunction totalTokensDeposited() view returns (uint256)
addSaleType
nonpayablefunction addSaleType(uint256 id, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
adminSetPrivateSaleContractAddress
nonpayablefunction adminSetPrivateSaleContractAddress(uint256 _saleTypeId, address _privateSaleContractAddress)
adminSetTokenToClaim
nonpayablefunction adminSetTokenToClaim(address _tokenToClaimAddress, uint256 _tokenToClaimDecimals)
adminWithdrawETH
nonpayablefunction adminWithdrawETH()
adminWithdrawToken
nonpayablefunction adminWithdrawToken(address token)
claimTokens
nonpayablefunction claimTokens(uint256 saleTypeId) returns (bool)
claimTokensForAllSales
nonpayablefunction claimTokensForAllSales(bool claimPrivateSale1, bool claimPrivateSale2, bool claimPrivateSale3) returns (bool claim1_success, bool claim2_success, bool claim3_success)
claimTokensOnBehalfOf
nonpayablefunction claimTokensOnBehalfOf(uint256 saleTypeId, address beneficiaryAddress) returns (bool)
depositTokens
nonpayablefunction depositTokens(uint256 amount)
enableContract
nonpayablefunction enableContract(bool _isContractEnabled)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAdminWithdrawAddress
nonpayablefunction setAdminWithdrawAddress(address _adminWithdrawAddress)
updateSaleType
nonpayablefunction updateSaleType(uint256 id, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
events
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)
SaleTypeAdded
event SaleTypeAdded(uint256 indexed id, string label, bool enabled, uint256 startTimestamp, uint256 percentReleasedAtTGE, uint256 cliffInSeconds, uint256 vestingInSeconds)
TokenRecovered
event TokenRecovered(address beneficiary, address token, uint256 amount)
TokensClaimedEvent
event TokensClaimedEvent(uint256 indexed saleTypeId, address indexed beneficiary, uint256 amount)
TokensDeposited
event TokensDeposited(address indexed admin, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
FailedToWithdrawEth
error FailedToWithdrawEth(address beneficiary, uint256 amount)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608060405260006007556000600960146101000a81548160ff0219169083151502179055503480156200003157600080fd5b50600180819055506200004e6000801b336200009660201b60201c565b5033600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200020b565b6000620000aa83836200019960201b60201c565b6200018e57600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200012a6200020360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905062000193565b600090505b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b614014806200021b6000396000f3fe608060405234801561001057600080fd5b50600436106102315760003560e01c8063a188510e11610130578063d4be3672116100b8578063ed84fc911161007c578063ed84fc91146106da578063f02a9df8146106e4578063fb11a71314610714578063fdae9f0914610744578063fee9d13b1461077a57610231565b8063d4be367214610626578063d547741f14610642578063d588c5da1461065e578063dd49756e1461068e578063e6f2a650146106aa57610231565b8063b13a3070116100ff578063b13a30701461055a578063b5c77ec914610578578063bc9da10614610594578063ce1f34ac146105c6578063cf8912c5146105f657610231565b8063a188510e146104e4578063a217fddf14610502578063a30fc30f14610520578063a9c6b9611461053c57610231565b806336568abe116101be5780636c9230db116101825780636c9230db1461043c5780637c96b7031461045a5780638c39c3661461047857806391d14854146104965780639d602d2d146104c657610231565b806336568abe1461038857806346e04a2f146103a45780634b2da173146103d45780634c81a9fc146103f0578063542472d11461042057610231565b80631ddb52c3116102055780631ddb52c3146102d0578063248a9ca3146102ee578063264d5b7e1461031e5780632cebffd51461033c5780632f2ff15d1461036c57610231565b80624c5c1a1461023657806301ffc9a714610266578063054bb184146102965780630559225e146102b2575b600080fd5b610250600480360381019061024b9190612c07565b610796565b60405161025d9190612c75565b60405180910390f35b610280600480360381019061027b9190612ce8565b6107d3565b60405161028d9190612d30565b60405180910390f35b6102b060048036038101906102ab9190612d77565b61084d565b005b6102ba610916565b6040516102c79190612dc6565b60405180910390f35b6102d861091c565b6040516102e59190612dc6565b60405180910390f35b61030860048036038101906103039190612e17565b610922565b6040516103159190612e53565b60405180910390f35b610326610941565b6040516103339190612dc6565b60405180910390f35b61035660048036038101906103519190612c07565b61094b565b6040516103639190612c75565b60405180910390f35b61038660048036038101906103819190612e6e565b61097e565b005b6103a2600480360381019061039d9190612e6e565b6109a0565b005b6103be60048036038101906103b99190612c07565b610a1b565b6040516103cb9190612d30565b60405180910390f35b6103ee60048036038101906103e99190613020565b610a8d565b005b61040a600480360381019061040591906130de565b610bc9565b6040516104179190612dc6565b60405180910390f35b61043a6004803603810190610435919061311e565b610c24565b005b610444610c76565b6040516104519190612dc6565b60405180910390f35b610462610c7e565b60405161046f9190612dc6565b60405180910390f35b610480610c88565b60405161048d9190612c75565b60405180910390f35b6104b060048036038101906104ab9190612e6e565b610cae565b6040516104bd9190612d30565b60405180910390f35b6104ce610d18565b6040516104db9190612d30565b60405180910390f35b6104ec610d2b565b6040516104f99190612dc6565b60405180910390f35b61050a610d31565b6040516105179190612e53565b60405180910390f35b61053a60048036038101906105359190613020565b610d38565b005b610544610ece565b6040516105519190612c75565b60405180910390f35b610562610ef8565b60405161056f9190612c75565b60405180910390f35b610592600480360381019061058d919061314b565b610f1e565b005b6105ae60048036038101906105a99190613178565b610f49565b6040516105bd939291906131cb565b60405180910390f35b6105e060048036038101906105db91906130de565b610ff2565b6040516105ed9190612dc6565b60405180910390f35b610610600480360381019061060b91906130de565b611006565b60405161061d9190612dc6565b60405180910390f35b610640600480360381019061063b91906130de565b61102b565b005b61065c60048036038101906106579190612e6e565b6110fe565b005b610678600480360381019061067391906130de565b611120565b6040516106859190612dc6565b60405180910390f35b6106a860048036038101906106a39190612c07565b611278565b005b6106c460048036038101906106bf91906130de565b611392565b6040516106d19190612d30565b60405180910390f35b6106e2611405565b005b6106fe60048036038101906106f991906130de565b61157e565b60405161070b9190612dc6565b60405180910390f35b61072e60048036038101906107299190612c07565b61194f565b60405161073b919061333b565b60405180910390f35b61075e60048036038101906107599190612c07565b611a6c565b60405161077197969594939291906133a7565b60405180910390f35b610794600480360381019061078f919061311e565b611b50565b005b60006008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610846575061084582611c9a565b5b9050919050565b6000801b61085a81611d04565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c09061348f565b60405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600381905550505050565b60035481565b60045481565b6000806000838152602001908152602001600020600101549050919050565b6000600354905090565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61098782610922565b61099081611d04565b61099a8383611d18565b50505050565b6109a8611e09565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a0c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a168282611e11565b505050565b6000610a25611f03565b600960149054906101000a900460ff16610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b906134fb565b60405180910390fd5b610a7e8233611f49565b9050610a8861228a565b919050565b6000801b610a9a81611d04565b6000600660008a81526020019081526020016000206005015403610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613567565b60405180910390fd5b6040518060e00160405280600115158152602001888152602001871515815260200186815260200185815260200184815260200183815250600660008a815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001019081610b739190613793565b5060408201518160020160006101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015560c082015181600601559050505050505050505050565b60006005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000801b610c3181611d04565b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600042905090565b6000600754905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960149054906101000a900460ff1681565b60075481565b6000801b81565b6000801b610d4581611d04565b6000600660008a81526020019081526020016000206005015414610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d95906138b1565b60405180910390fd5b6040518060e00160405280600115158152602001888152602001871515815260200186815260200185815260200184815260200183815250600660008a815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001019081610e1e9190613793565b5060408201518160020160006101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505060076000815480929190610e7d90613900565b9190505550877fb7c35b1cc53acea76fc33f33e1c3fbd5cddcbdfec595acf7458d3922c10d0fab888888888888604051610ebc96959493929190613948565b60405180910390a25050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000801b610f2b81611d04565b81600960146101000a81548160ff0219169083151502179055505050565b6000806000610f56611f03565b600960149054906101000a900460ff16610fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9c906134fb565b60405180910390fd5b8515610fb957610fb6600133611f49565b92505b8415610fcd57610fca600233611f49565b91505b8315610fe157610fde600333611f49565b90505b610fe961228a565b93509350939050565b6000610ffe8383612293565b905092915050565b6005602052816000526040600020602052806000526040600020600091509150505481565b6000801b61103881611d04565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e90613a22565b60405180910390fd5b816008600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61110782610922565b61111081611d04565b61111a8383611e11565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166008600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90613ab4565b60405180910390fd5b6008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c4630fe836040518263ffffffff1660e01b815260040161122f9190612c75565b602060405180830381865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112709190613ae9565b905092915050565b6000801b61128581611d04565b61128d611f03565b600082116112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790613b62565b60405180910390fd5b61131f333084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661244c909392919063ffffffff16565b81600460008282546113319190613b82565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f59062170a285eb80e8c6b8ced60428442a51910635005233fc4ce084a475845e8360405161137e9190612dc6565b60405180910390a261138e61228a565b5050565b600061139c611f03565b600960149054906101000a900460ff166113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e2906134fb565b60405180910390fd5b6113f58383611f49565b90506113ff61228a565b92915050565b6000801b61141281611d04565b61141a611f03565b60004790506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161146790613be7565b60006040518083038185875af1925050503d80600081146114a4576040519150601f19603f3d011682016040523d82523d6000602084013e6114a9565b606091505b505090508061151357600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040517f0cd9003700000000000000000000000000000000000000000000000000000000815260040161150a929190613bfc565b60405180910390fd5b7f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008460405161156993929190613c25565b60405180910390a1505061157b61228a565b50565b60006115a16040518060600160405280602a8152602001613f91602a91396124ce565b6000600660008581526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff161515151581526020016001820180546115ec906135b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611618906135b6565b80156116655780601f1061163a57610100808354040283529160200191611665565b820191906000526020600020905b81548152906001019060200180831161164857829003601f168201915b505050505081526020016002820160009054906101000a900460ff16151515158152602001600382015481526020016004820154815260200160058201548152602001600682015481525050905060006116bf8585611120565b9050600081036116d457600092505050611949565b60006005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061271084608001518461173e9190613c5c565b6117489190613ccd565b90506117896040518060400160405280600f81526020017f746f74616c416c6c6f636174696f6e000000000000000000000000000000000081525084612567565b6117c86040518060400160405280600d81526020017f636c61696d6564546f6b656e730000000000000000000000000000000000000081525083612567565b6118076040518060400160405280600e81526020017f636c61696d61626c65417454474500000000000000000000000000000000000081525082612567565b61184a6040518060400160405280601d81526020017f73616c65547970652e70657263656e7452656c656173656441745447450000008152508560800151612567565b61187d604051806060016040528060238152602001613f6e6023913961271086608001516118789190613ccd565b612567565b600061189588838661188f9190613cfe565b42612603565b90506118d66040518060400160405280600c81526020017f766573746564546f6b656e73000000000000000000000000000000000000000081525082612567565b600081836118e49190613b82565b90506119256040518060400160405280600f81526020017f636c61696d61626c65546f6b656e73000000000000000000000000000000000081525082612567565b838111611933576000611940565b838161193f9190613cfe565b5b96505050505050505b92915050565b611957612b72565b600660008381526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff161515151581526020016001820180546119a0906135b6565b80601f01602080910402602001604051908101604052809291908181526020018280546119cc906135b6565b8015611a195780601f106119ee57610100808354040283529160200191611a19565b820191906000526020600020905b8154815290600101906020018083116119fc57829003601f168201915b505050505081526020016002820160009054906101000a900460ff161515151581526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050919050565b60066020528060005260406000206000915090508060000160009054906101000a900460ff1690806001018054611aa2906135b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611ace906135b6565b8015611b1b5780601f10611af057610100808354040283529160200191611b1b565b820191906000526020600020905b815481529060010190602001808311611afe57829003601f168201915b5050505050908060020160009054906101000a900460ff16908060030154908060040154908060050154908060060154905087565b6000801b611b5d81611d04565b611b65611f03565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ba09190612c75565b602060405180830381865afa158015611bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be19190613ae9565b9050611c30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828573ffffffffffffffffffffffffffffffffffffffff166127229092919063ffffffff16565b7f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483604051611c8593929190613c25565b60405180910390a150611c9661228a565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611d1581611d10611e09565b6127a1565b50565b6000611d248383610cae565b611dfe57600160008085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d9b611e09565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611e03565b600090505b92915050565b600033905090565b6000611e1d8383610cae565b15611ef857600080600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e95611e09565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611efd565b600090505b92915050565b600260015403611f3f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600181905550565b600080600660008581526020019081526020016000206040518060e00160405290816000820160009054906101000a900460ff16151515158152602001600182018054611f95906135b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc1906135b6565b801561200e5780601f10611fe35761010080835404028352916020019161200e565b820191906000526020600020905b815481529060010190602001808311611ff157829003601f168201915b505050505081526020016002820160009054906101000a900460ff16151515158152602001600382015481526020016004820154815260200160058201548152602001600682015481525050905080604001516120a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209790613d7e565b60405180910390fd5b80606001514210156120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90613dea565b60405180910390fd5b60006120f38585611120565b90506000810361210857600192505050612284565b6000612114868661157e565b905060008103612179578473ffffffffffffffffffffffffffffffffffffffff16867f3ad65878af9999d3d2c820bcabf89a752247c6e3124fc769b962e484b24c1b74836040516121659190612dc6565b60405180910390a360009350505050612284565b806005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d99190613b82565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16867f3ad65878af9999d3d2c820bcabf89a752247c6e3124fc769b962e484b24c1b74836040516122279190612dc6565b60405180910390a361227c8582600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127229092919063ffffffff16565b600193505050505b92915050565b60018081905550565b60008073ffffffffffffffffffffffffffffffffffffffff166008600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d90613ab4565b60405180910390fd5b60006008600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632c4630fe846040518263ffffffff1660e01b81526004016123a49190612c75565b602060405180830381865afa1580156123c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e59190613ae9565b90506005600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816124439190613cfe565b91505092915050565b6124c8848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161248193929190613c25565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127f2565b50505050565b612564816040516024016124e29190613e0a565b6040516020818303038152906040527f41304fac000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612889565b50565b6125ff828260405160240161257d929190613e2c565b6040516020818303038152906040527fb60e72cc000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612889565b5050565b600061264e6040518060400160405280600981526020017f74696d657374616d7000000000000000000000000000000000000000000000008152508367ffffffffffffffff16612567565b612686604051806060016040528060248152602001613f4a602491396006600087815260200190815260200160002060030154612567565b6126be604051806060016040528060248152602001613fbb602491396006600087815260200190815260200160002060050154612567565b600660008581526020019081526020016000206005015460066000868152602001908152602001600020600301546126f69190613b82565b8267ffffffffffffffff1610612716576127118484846128a3565b612719565b60005b90509392505050565b61279c838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401612755929190613bfc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127f2565b505050565b6127ab8282610cae565b6127ee5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016127e5929190613e5c565b60405180910390fd5b5050565b600061281d828473ffffffffffffffffffffffffffffffffffffffff1661298f90919063ffffffff16565b905060008151141580156128425750808060200190518101906128409190613e9a565b155b1561288457826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161287b9190612c75565b60405180910390fd5b505050565b6128a0816128986129a56129c6565b63ffffffff16565b50565b600080600660008681526020019081526020016000206006015460066000878152602001908152602001600020600301546128de9190613b82565b905060066000868152602001908152602001600020600301548367ffffffffffffffff161015612912576000915050612988565b808367ffffffffffffffff161061292c5783915050612988565b600660008681526020019081526020016000206006015460066000878152602001908152602001600020600301548467ffffffffffffffff1661296f9190613cfe565b8561297a9190613c5c565b6129849190613ccd565b9150505b9392505050565b606061299d838360006129d1565b905092915050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b612bb3819050919050565b606081471015612a1857306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401612a0f9190612c75565b60405180910390fd5b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051612a419190613f03565b60006040518083038185875af1925050503d8060008114612a7e576040519150601f19603f3d011682016040523d82523d6000602084013e612a83565b606091505b5091509150612a93868383612a9e565b925050509392505050565b606082612ab357612aae82612b2d565b612b25565b60008251148015612adb575060008473ffffffffffffffffffffffffffffffffffffffff163b145b15612b1d57836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401612b149190612c75565b60405180910390fd5b819050612b26565b5b9392505050565b600081511115612b405780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060e0016040528060001515815260200160608152602001600015158152602001600081526020016000815260200160008152602001600081525090565b612bbb613f1a565b565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b612be481612bd1565b8114612bef57600080fd5b50565b600081359050612c0181612bdb565b92915050565b600060208284031215612c1d57612c1c612bc7565b5b6000612c2b84828501612bf2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c5f82612c34565b9050919050565b612c6f81612c54565b82525050565b6000602082019050612c8a6000830184612c66565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cc581612c90565b8114612cd057600080fd5b50565b600081359050612ce281612cbc565b92915050565b600060208284031215612cfe57612cfd612bc7565b5b6000612d0c84828501612cd3565b91505092915050565b60008115159050919050565b612d2a81612d15565b82525050565b6000602082019050612d456000830184612d21565b92915050565b612d5481612c54565b8114612d5f57600080fd5b50565b600081359050612d7181612d4b565b92915050565b60008060408385031215612d8e57612d8d612bc7565b5b6000612d9c85828601612d62565b9250506020612dad85828601612bf2565b9150509250929050565b612dc081612bd1565b82525050565b6000602082019050612ddb6000830184612db7565b92915050565b6000819050919050565b612df481612de1565b8114612dff57600080fd5b50565b600081359050612e1181612deb565b92915050565b600060208284031215612e2d57612e2c612bc7565b5b6000612e3b84828501612e02565b91505092915050565b612e4d81612de1565b82525050565b6000602082019050612e686000830184612e44565b92915050565b60008060408385031215612e8557612e84612bc7565b5b6000612e9385828601612e02565b9250506020612ea485828601612d62565b9150509250929050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f0182612eb8565b810181811067ffffffffffffffff82111715612f2057612f1f612ec9565b5b80604052505050565b6000612f33612bbd565b9050612f3f8282612ef8565b919050565b600067ffffffffffffffff821115612f5f57612f5e612ec9565b5b612f6882612eb8565b9050602081019050919050565b82818337600083830152505050565b6000612f97612f9284612f44565b612f29565b905082815260208101848484011115612fb357612fb2612eb3565b5b612fbe848285612f75565b509392505050565b600082601f830112612fdb57612fda612eae565b5b8135612feb848260208601612f84565b91505092915050565b612ffd81612d15565b811461300857600080fd5b50565b60008135905061301a81612ff4565b92915050565b600080600080600080600060e0888a03121561303f5761303e612bc7565b5b600061304d8a828b01612bf2565b975050602088013567ffffffffffffffff81111561306e5761306d612bcc565b5b61307a8a828b01612fc6565b965050604061308b8a828b0161300b565b955050606061309c8a828b01612bf2565b94505060806130ad8a828b01612bf2565b93505060a06130be8a828b01612bf2565b92505060c06130cf8a828b01612bf2565b91505092959891949750929550565b600080604083850312156130f5576130f4612bc7565b5b600061310385828601612bf2565b925050602061311485828601612d62565b9150509250929050565b60006020828403121561313457613133612bc7565b5b600061314284828501612d62565b91505092915050565b60006020828403121561316157613160612bc7565b5b600061316f8482850161300b565b91505092915050565b60008060006060848603121561319157613190612bc7565b5b600061319f8682870161300b565b93505060206131b08682870161300b565b92505060406131c18682870161300b565b9150509250925092565b60006060820190506131e06000830186612d21565b6131ed6020830185612d21565b6131fa6040830184612d21565b949350505050565b61320b81612d15565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561324b578082015181840152602081019050613230565b60008484015250505050565b600061326282613211565b61326c818561321c565b935061327c81856020860161322d565b61328581612eb8565b840191505092915050565b61329981612bd1565b82525050565b600060e0830160008301516132b76000860182613202565b50602083015184820360208601526132cf8282613257565b91505060408301516132e46040860182613202565b5060608301516132f76060860182613290565b50608083015161330a6080860182613290565b5060a083015161331d60a0860182613290565b5060c083015161333060c0860182613290565b508091505092915050565b60006020820190508181036000830152613355818461329f565b905092915050565b600082825260208201905092915050565b600061337982613211565b613383818561335d565b935061339381856020860161322d565b61339c81612eb8565b840191505092915050565b600060e0820190506133bc600083018a612d21565b81810360208301526133ce818961336e565b90506133dd6040830188612d21565b6133ea6060830187612db7565b6133f76080830186612db7565b61340460a0830185612db7565b61341160c0830184612db7565b98975050505050505050565b7f546f6b656e20746f207265636569766520616464726573732063616e6e6f742060008201527f6265207a65726f00000000000000000000000000000000000000000000000000602082015250565b600061347960278361335d565b91506134848261341d565b604082019050919050565b600060208201905081810360008301526134a88161346c565b9050919050565b7f436f6e747261637420686173206265656e2064697361626c6564000000000000600082015250565b60006134e5601a8361335d565b91506134f0826134af565b602082019050919050565b60006020820190508181036000830152613514816134d8565b9050919050565b7f53616c65207479706520646f6573206e6f742065786973740000000000000000600082015250565b600061355160188361335d565b915061355c8261351b565b602082019050919050565b6000602082019050818103600083015261358081613544565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135ce57607f821691505b6020821081036135e1576135e0613587565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261360c565b613653868361360c565b95508019841693508086168417925050509392505050565b6000819050919050565b600061369061368b61368684612bd1565b61366b565b612bd1565b9050919050565b6000819050919050565b6136aa83613675565b6136be6136b682613697565b848454613619565b825550505050565b600090565b6136d36136c6565b6136de8184846136a1565b505050565b5b81811015613702576136f76000826136cb565b6001810190506136e4565b5050565b601f82111561374757613718816135e7565b613721846135fc565b81016020851015613730578190505b61374461373c856135fc565b8301826136e3565b50505b505050565b600082821c905092915050565b600061376a6000198460080261374c565b1980831691505092915050565b60006137838383613759565b9150826002028217905092915050565b61379c82613211565b67ffffffffffffffff8111156137b5576137b4612ec9565b5b6137bf82546135b6565b6137ca828285613706565b600060209050601f8311600181146137fd57600084156137eb578287015190505b6137f58582613777565b86555061385d565b601f19841661380b866135e7565b60005b828110156138335784890151825560018201915060208501945060208101905061380e565b86831015613850578489015161384c601f891682613759565b8355505b6001600288020188555050505b505050505050565b7f53616c65207479706520616c7265616479206578697374730000000000000000600082015250565b600061389b60188361335d565b91506138a682613865565b602082019050919050565b600060208201905081810360008301526138ca8161388e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061390b82612bd1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361393d5761393c6138d1565b5b600182019050919050565b600060c0820190508181036000830152613962818961336e565b90506139716020830188612d21565b61397e6040830187612db7565b61398b6060830186612db7565b6139986080830185612db7565b6139a560a0830184612db7565b979650505050505050565b7f507269766174652053616c6520436f6e7472616374206164647265737320636160008201527f6e6e6f74206265207a65726f0000000000000000000000000000000000000000602082015250565b6000613a0c602c8361335d565b9150613a17826139b0565b604082019050919050565b60006020820190508181036000830152613a3b816139ff565b9050919050565b7f507269766174652073616c6520636f6e74726163742061646472657373206e6f60008201527f7420736574000000000000000000000000000000000000000000000000000000602082015250565b6000613a9e60258361335d565b9150613aa982613a42565b604082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b600081519050613ae381612bdb565b92915050565b600060208284031215613aff57613afe612bc7565b5b6000613b0d84828501613ad4565b91505092915050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b6000613b4c60208361335d565b9150613b5782613b16565b602082019050919050565b60006020820190508181036000830152613b7b81613b3f565b9050919050565b6000613b8d82612bd1565b9150613b9883612bd1565b9250828201905080821115613bb057613baf6138d1565b5b92915050565b600081905092915050565b50565b6000613bd1600083613bb6565b9150613bdc82613bc1565b600082019050919050565b6000613bf282613bc4565b9150819050919050565b6000604082019050613c116000830185612c66565b613c1e6020830184612db7565b9392505050565b6000606082019050613c3a6000830186612c66565b613c476020830185612c66565b613c546040830184612db7565b949350505050565b6000613c6782612bd1565b9150613c7283612bd1565b9250828202613c8081612bd1565b91508282048414831517613c9757613c966138d1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cd882612bd1565b9150613ce383612bd1565b925082613cf357613cf2613c9e565b5b828204905092915050565b6000613d0982612bd1565b9150613d1483612bd1565b9250828203905081811115613d2c57613d2b6138d1565b5b92915050565b7f53616c652074797065206d75737420626520656e61626c656400000000000000600082015250565b6000613d6860198361335d565b9150613d7382613d32565b602082019050919050565b60006020820190508181036000830152613d9781613d5b565b9050919050565b7f53616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b6000613dd460188361335d565b9150613ddf82613d9e565b602082019050919050565b60006020820190508181036000830152613e0381613dc7565b9050919050565b60006020820190508181036000830152613e24818461336e565b905092915050565b60006040820190508181036000830152613e46818561336e565b9050613e556020830184612db7565b9392505050565b6000604082019050613e716000830185612c66565b613e7e6020830184612e44565b9392505050565b600081519050613e9481612ff4565b92915050565b600060208284031215613eb057613eaf612bc7565b5b6000613ebe84828501613e85565b91505092915050565b600081519050919050565b6000613edd82613ec7565b613ee78185613bb6565b9350613ef781856020860161322d565b80840191505092915050565b6000613f0f8284613ed2565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052605160045260246000fdfe73616c6554797065735b73616c655479706549645d2e737461727454696d657374616d7073616c65547970652e70657263656e7452656c656173656441745447452f31303030302a2a2a202a2a2a202a2a2a20676574436c61696d61626c65546f6b656e73202a2a2a202a2a2a202a2a2a73616c6554797065735b73616c655479706549645d2e636c696666496e5365636f6e6473a26469706673582212204a9e80314f8edd951294f9cc5b5306a197bdf705436b28d6eb581f7331ed88c164736f6c63430008180033