2 txs
4 calls
constructor
No constructor.
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
contractURI
viewfunction contractURI() view returns (string)
decimals
viewfunction decimals() view returns (uint8)
defaultVestingPeriod
viewfunction defaultVestingPeriod() view returns (uint256)
fundsCollectedPerPhase
viewfunction fundsCollectedPerPhase(uint256) view returns (uint256)
getPhaseCount
viewfunction getPhaseCount() view returns (uint256)
getPhaseInfo
viewfunction getPhaseInfo(uint256 _phaseId) view returns (uint256 price, uint256 minPurchase, uint256 maxPurchase, uint256 supply, uint256 sold, uint256 startTime, uint256 endTime, bool whitelistRequired, bool active, uint256 vestingPeriod)
getPurchasedAmount
viewfunction getPurchasedAmount(uint256 _phaseId, address _buyer) view returns (uint256)
getTotalLockedAmount
viewfunction getTotalLockedAmount(address _user) view returns (uint256 locked)
legacyBalances
viewfunction legacyBalances(address) view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
paymentTokenPrice
viewfunction paymentTokenPrice(address) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
purchasedPerPhase
viewfunction purchasedPerPhase(uint256, address) view returns (uint256)
salePhases
viewfunction salePhases(uint256) view returns (uint256 price, uint256 minPurchase, uint256 maxPurchase, uint256 supply, uint256 sold, uint256 startTime, uint256 endTime, bool whitelistRequired, bool active, uint256 vestingPeriod)
salesPaused
viewfunction salesPaused() view returns (bool)
secondAdmin
viewfunction secondAdmin() view returns (address)
symbol
viewfunction symbol() view returns (string)
TAX_BPS
viewfunction TAX_BPS() view returns (uint256)
taxWallet
viewfunction taxWallet() view returns (address)
totalFundsCollected
viewfunction totalFundsCollected() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
vestingSchedules
viewfunction vestingSchedules(address, uint256) view returns (uint256 amount, uint256 released, uint256 vestingEnd)
whitelist
viewfunction whitelist(address) view returns (bool)
withdrawalWallets
viewfunction withdrawalWallets(uint256) view returns (address)
addToWhitelist
nonpayablefunction addToWhitelist(address[] _addresses)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
buyTokens
payablefunction buyTokens(uint256 _phaseId) payable
buyTokensWithERC20
nonpayablefunction buyTokensWithERC20(uint256 _phaseId, address paymentToken, uint256 amountIn)
createSalePhase
nonpayablefunction createSalePhase(uint256 _price, uint256 _minPurchase, uint256 _maxPurchase, uint256 _supply, uint256 _startTime, uint256 _endTime, bool _whitelistRequired, uint256 _vestingPeriod)
initialize
nonpayablefunction initialize(address _defaultAdmin, address _secondAdmin, string _name, string _symbol, string contractURI_, address _taxWallet, address[2] _withdrawalWallets, uint256 _defaultVestingPeriod)
migrateLegacyBalances
nonpayablefunction migrateLegacyBalances(address[] _users)
migrateMetadata
nonpayablefunction migrateMetadata(address legacyContract)
releaseVestedTokens
nonpayablefunction releaseVestedTokens()
removeFromWhitelist
nonpayablefunction removeFromWhitelist(address[] _addresses)
renounceOwnership
nonpayablefunction renounceOwnership()
setContractURI
nonpayablefunction setContractURI(string newURI)
setPaymentTokenPrice
nonpayablefunction setPaymentTokenPrice(address token, uint256 price)
setPhaseParams
nonpayablefunction setPhaseParams(uint256 _phaseId, uint256 _price, uint256 _minPurchase, uint256 _maxPurchase, uint256 _supply, uint256 _startTime, uint256 _endTime, bool _whitelistRequired, bool _active, uint256 _vestingPeriod)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawFunds
nonpayablefunction withdrawFunds(uint256 _amount)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
FundsWithdrawn
event FundsWithdrawn(address indexed to, uint256 amount)
Initialized
event Initialized(uint64 version)
LegacyTokensClaimed
event LegacyTokensClaimed(address indexed user, uint256 amount)
MetadataMigrated
event MetadataMigrated(string name, string symbol, string contractURI)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SalePhaseCreated
event SalePhaseCreated(uint256 phaseId, uint256 price, uint256 supply, uint256 startTime, uint256 endTime, uint256 maxPurchase, bool whitelistRequired)
SalePhaseUpdated
event SalePhaseUpdated(uint256 phaseId, uint256 price, uint256 supply, uint256 startTime, uint256 endTime, uint256 maxPurchase, bool whitelistRequired)
TokensPurchased
event TokensPurchased(address indexed buyer, uint256 phaseId, uint256 netTokens, uint256 grossTokens, uint256 cost)
TokensReleased
event TokensReleased(address indexed user, uint256 amount)
TokensVested
event TokensVested(address indexed user, uint256 amount, uint256 vestingEnd)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Upgraded
event Upgraded(address indexed implementation)
WhitelistUpdated
event WhitelistUpdated(address indexed user, bool status)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a0604052306080523480156012575f5ffd5b5060805161389d6100395f395f81816126450152818161266e0152612819015261389d5ff3fe60806040526004361061028e575f3560e01c80637f64978311610155578063ba2a3cf5116100be578063dd62ed3e11610078578063dd62ed3e14610847578063e4b48a6514610866578063e707ca0414610891578063e8a3d485146108a6578063f2fde38b146108ba578063f58a6d60146108d9575f5ffd5b8063ba2a3cf514610776578063badda2c614610795578063bf90856a146107b4578063c79d49be146107ea578063ceaac9c414610815578063db5e006314610834575f5ffd5b80639b19251a1161010f5780639b19251a14610680578063a1e18620146106ae578063a9059cbb146106cd578063ad3cb1cc146106ec578063b1fa59b91461071c578063b6b976641461075d575f5ffd5b80637f649783146105dc578063808b46e2146105fb5780638da5cb5b1461061a578063938e3d7b1461062e57806395d89b411461064d57806398c2fa0714610661575f5ffd5b80634f1ef286116101f7578063554cd598116101b1578063554cd5981461052b57806361d027b314610556578063625dea901461057557806368f4a7861461059457806370a08231146105a9578063715018a6146105c8575f5ffd5b80634f1ef28614610445578063509864a51461045857806352648a78146104c557806352d1902d146104e4578063548db174146104f857806354dd1da414610517575f5ffd5b80631d32e9b3116102485780631d32e9b31461037357806323b872dd1461039f5780632dc0562d146103be578063313ce567146103dd5780633610724e146103f857806345626bd61461040b575f5ffd5b80630617eb2b1461029957806306fdde03146102ba578063095ea7b3146102e4578063152d42af14610313578063155dd5ee1461033257806318160ddd14610351575f5ffd5b3661029557005b5f5ffd5b3480156102a4575f5ffd5b506102b86102b3366004612dba565b6108ee565b005b3480156102c5575f5ffd5b506102ce610efe565b6040516102db9190612e1b565b60405180910390f35b3480156102ef575f5ffd5b506103036102fe366004612e2d565b610f9c565b60405190151581526020016102db565b34801561031e575f5ffd5b506102b861032d366004612e2d565b610fb5565b34801561033d575f5ffd5b506102b861034c366004612e55565b610fd8565b34801561035c575f5ffd5b506103656110e4565b6040519081526020016102db565b34801561037e575f5ffd5b50600d54610392906001600160a01b031681565b6040516102db9190612e6c565b3480156103aa575f5ffd5b506103036103b9366004612e80565b6110f8565b3480156103c9575f5ffd5b50600854610392906001600160a01b031681565b3480156103e8575f5ffd5b50604051601281526020016102db565b6102b8610406366004612e55565b61111d565b348015610416575f5ffd5b5061042a610425366004612e2d565b611554565b604080519384526020840192909252908201526060016102db565b6102b8610453366004612f4e565b611592565b348015610463575f5ffd5b50610477610472366004612e55565b6115b1565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c0850152151560e08401521515610100830152610120820152610140016102db565b3480156104d0575f5ffd5b506102b86104df366004612fab565b611616565b3480156104ef575f5ffd5b506103656116de565b348015610503575f5ffd5b506102b8610512366004612fc4565b6116f9565b348015610522575f5ffd5b506102b86117d5565b348015610536575f5ffd5b50610365610545366004612e55565b60076020525f908152604090205481565b348015610561575f5ffd5b50600454610392906001600160a01b031681565b348015610580575f5ffd5b506102b861058f366004612fc4565b61198f565b34801561059f575f5ffd5b506103656101f481565b3480156105b4575f5ffd5b506103656105c3366004612fab565b611ad4565b3480156105d3575f5ffd5b506102b8611afd565b3480156105e7575f5ffd5b506102b86105f6366004612fc4565b611b10565b348015610606575f5ffd5b50610392610615366004612e55565b611be9565b348015610625575f5ffd5b50610392611c08565b348015610639575f5ffd5b506102b8610648366004613051565b611c36565b348015610658575f5ffd5b506102ce611c4a565b34801561066c575f5ffd5b5061047761067b366004612e55565b611c66565b34801561068b575f5ffd5b5061030361069a366004612fab565b60026020525f908152604090205460ff1681565b3480156106b9575f5ffd5b506102b86106c83660046130fd565b611d20565b3480156106d8575f5ffd5b506103036106e7366004612e2d565b611f05565b3480156106f7575f5ffd5b506102ce604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610727575f5ffd5b506103656107363660046131d7565b5f9182526003602090815260408084206001600160a01b0393909316845291905290205490565b348015610768575f5ffd5b506001546103039060ff1681565b348015610781575f5ffd5b50610365610790366004612fab565b611f12565b3480156107a0575f5ffd5b506102b86107af36600461320e565b611f9c565b3480156107bf575f5ffd5b506103656107ce3660046131d7565b600360209081525f928352604080842090915290825290205481565b3480156107f5575f5ffd5b50610365610804366004612fab565b60096020525f908152604090205481565b348015610820575f5ffd5b506102b861082f366004613293565b61212c565b34801561083f575f5ffd5b505f54610365565b348015610852575f5ffd5b506103656108613660046132f8565b6123ee565b348015610871575f5ffd5b50610365610880366004612fab565b600f6020525f908152604090205481565b34801561089c575f5ffd5b50610365600e5481565b3480156108b1575f5ffd5b506102ce612428565b3480156108c5575f5ffd5b506102b86108d4366004612fab565b6124b8565b3480156108e4575f5ffd5b5061036560065481565b6001600160a01b0382165f908152600f60205260409020546109575760405162461bcd60e51b815260206004820152601b60248201527f5061796d656e7420746f6b656e206e6f7420737570706f72746564000000000060448201526064015b60405180910390fd5b60015460ff161561097a5760405162461bcd60e51b815260040161094e90613320565b5f54831061099a5760405162461bcd60e51b815260040161094e90613346565b5f5f84815481106109ad576109ad613370565b905f5260205f20906009020190508060070160019054906101000a900460ff166109e95760405162461bcd60e51b815260040161094e90613384565b80600501544210158015610a01575080600601544211155b610a1d5760405162461bcd60e51b815260040161094e906133ac565b600781015460ff1615610a5857335f9081526002602052604090205460ff16610a585760405162461bcd60e51b815260040161094e906133d8565b5f81600401548260030154610a6d9190613415565b90505f8111610a8e5760405162461bcd60e51b815260040161094e90613428565b6001600160a01b0384165f908152600f602052604081205490610ab18286613455565b90508360010154811015610ad75760405162461bcd60e51b815260040161094e90613474565b5f8111610b265760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e207061796d656e74000000000000604482015260640161094e565b600284015415610b9b575f8781526003602090815260408083203384529091529020546002850154610b5883836134a0565b1115610b765760405162461bcd60e51b815260040161094e906134b3565b610b8082826134a0565b5f898152600360209081526040808320338452909152902055505b82811115610ba65750815b5f610bb183836134e1565b90505f818711610bc1575f610bcb565b610bcb8288613415565b905082866004015f828254610be091906134a0565b925050819055508160065f828254610bf891906134a0565b90915550505f8981526007602052604081208054849290610c1a9084906134a0565b90915550506003860154600487015410610c3c5760078601805461ff00191690555b5f612710610c4c6101f4866134e1565b610c569190613455565b90505f610c638286613415565b90505f886008015442610c7691906134a0565b335f818152600560209081526040808320815160608101835288815280840185815281840188815283546001818101865594885295909620915160039095029091019384555190830155915160029091015551919250907fe37037c1b3b5a7099de9b4ff0b386af195061ad990fcf5c0c5f84b95d328f76690610d059085908590918252602082015260400190565b60405180910390a26040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038c16906323b872dd906064016020604051808303815f875af1158015610d5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8191906134f8565b610dc75760405162461bcd60e51b815260206004820152601760248201527614185e5b595b9d081d1c985b9cd9995c8819985a5b1959604a1b604482015260640161094e565b8315610e805760405163a9059cbb60e01b8152336004820152602481018590526001600160a01b038c169063a9059cbb906044016020604051808303815f875af1158015610e17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3b91906134f8565b610e805760405162461bcd60e51b81526020600482015260166024820152751499599d5b99081d1c985b9cd9995c8819985a5b195960521b604482015260640161094e565b610e8a33836124f5565b8215610ea657600854610ea6906001600160a01b0316846124f5565b604080518d8152602081018490529081018790526060810186905233907f34987d73948b60cfba9beeb35760c345a3be430f3540605113911ead78a0830e9060800160405180910390a2505050505050505050505050565b60605f610f09612529565b9050806003018054610f1a90613513565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4690613513565b8015610f915780601f10610f6857610100808354040283529160200191610f91565b820191905f5260205f20905b815481529060010190602001808311610f7457829003601f168201915b505050505091505090565b5f33610fa981858561254d565b60019150505b92915050565b610fbd61255a565b6001600160a01b039091165f908152600f6020526040902055565b600a5f01546001600160a01b03163314806110005750600a600101546001600160a01b031633145b61103a5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b604482015260640161094e565b478111156110815760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161094e565b604051339082156108fc029083905f818181858888f193505050501580156110ab573d5f5f3e3d5ffd5b5060405181815233907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d9060200160405180910390a250565b5f5f6110ee612529565b6002015492915050565b5f3361110585828561258c565b6111108585856125dd565b60019150505b9392505050565b60015460ff16156111405760405162461bcd60e51b815260040161094e90613320565b5f5481106111605760405162461bcd60e51b815260040161094e90613346565b5f5f828154811061117357611173613370565b905f5260205f20906009020190508060070160019054906101000a900460ff166111af5760405162461bcd60e51b815260040161094e90613384565b806005015442101580156111c7575080600601544211155b6111e35760405162461bcd60e51b815260040161094e906133ac565b600781015460ff161561121e57335f9081526002602052604090205460ff1661121e5760405162461bcd60e51b815260040161094e906133d8565b5f816004015482600301546112339190613415565b90505f81116112545760405162461bcd60e51b815260040161094e90613428565b81545f906112629034613455565b905082600101548110156112885760405162461bcd60e51b815260040161094e90613474565b5f81116112ca5760405162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b604482015260640161094e565b60028301541561133f575f84815260036020908152604080832033845290915290205460028401546112fc83836134a0565b111561131a5760405162461bcd60e51b815260040161094e906134b3565b61132482826134a0565b5f868152600360209081526040808320338452909152902055505b8181111561134a5750805b82545f9061135890836134e1565b90505f6113658234613415565b905082856004015f82825461137a91906134a0565b925050819055508160065f82825461139291906134a0565b90915550505f86815260076020526040812080548492906113b49084906134a0565b909155505060038501546004860154106113d65760078501805461ff00191690555b5f6127106113e66101f4866134e1565b6113f09190613455565b90505f6113fd8286613415565b90505f87600801544261141091906134a0565b335f818152600560209081526040808320815160608101835288815280840185815281840188815283546001818101865594885295909620915160039095029091019384555190830155915160029091015551919250907fe37037c1b3b5a7099de9b4ff0b386af195061ad990fcf5c0c5f84b95d328f7669061149f9085908590918252602082015260400190565b60405180910390a26114b133836124f5565b82156114cd576008546114cd906001600160a01b0316846124f5565b83156114ff57604051339085156108fc029086905f818181858888f193505050501580156114fd573d5f5f3e3d5ffd5b505b604080518a8152602081018490529081018790526060810186905233907f34987d73948b60cfba9beeb35760c345a3be430f3540605113911ead78a0830e9060800160405180910390a2505050505050505050565b6005602052815f5260405f20818154811061156d575f80fd5b5f91825260209091206003909102018054600182015460029092015490935090915083565b61159a61263a565b6115a3826126de565b6115ad828261275b565b5050565b5f81815481106115bf575f80fd5b5f9182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801549698509496939592949193909260ff80831692610100900416908a565b61161e61255a565b5f816001600160a01b031663e8a3d4856040518163ffffffff1660e01b81526004015f60405180830381865afa15801561165a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611681919081019061354b565b9050600c61168f8282613603565b507f68173dc6be0fc8abf696402d9880985b1a24e2d9e5151e6b6a7e8b3ac6c708f06116b9610efe565b6116c1611c4a565b600c6040516116d2939291906136bd565b60405180910390a15050565b5f6116e761280e565b505f5160206138485f395f51905f5290565b61170161255a565b5f5b818110156117d0575f60025f85858581811061172157611721613370565b90506020020160208101906117369190612fab565b6001600160a01b0316815260208101919091526040015f20805460ff191691151591909117905582828281811061176f5761176f613370565b90506020020160208101906117849190612fab565b6001600160a01b03167ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d5f6040516117c0911515815260200190565b60405180910390a2600101611703565b505050565b335f90815260056020526040812090805b82548110156119115782818154811061180157611801613370565b905f5260205f209060030201600201544210158015611860575082818154811061182d5761182d613370565b905f5260205f2090600302015f015483828154811061184e5761184e613370565b905f5260205f20906003020160010154105b15611909575f83828154811061187857611878613370565b905f5260205f2090600302016001015484838154811061189a5761189a613370565b905f5260205f2090600302015f01546118b39190613415565b90508382815481106118c7576118c7613370565b905f5260205f2090600302015f01548483815481106118e8576118e8613370565b5f91825260209091206001600390920201015561190581846134a0565b9250505b6001016117e6565b505f81116119565760405162461bcd60e51b81526020600482015260126024820152714e6f7468696e6720746f2072656c6561736560701b604482015260640161094e565b60405181815233907fc7798891864187665ac6dd119286e44ec13f014527aeeb2b8eb3fd413df931799060200160405180910390a25050565b61199761255a565b5f5b818110156117d0575f60095f8585858181106119b7576119b7613370565b90506020020160208101906119cc9190612fab565b6001600160a01b0316815260208101919091526040015f205490508015611acb575f60095f868686818110611a0357611a03613370565b9050602002016020810190611a189190612fab565b6001600160a01b0316815260208101919091526040015f2055611a61848484818110611a4657611a46613370565b9050602002016020810190611a5b9190612fab565b826124f5565b838383818110611a7357611a73613370565b9050602002016020810190611a889190612fab565b6001600160a01b03167f3554f6c598d4276295dd6b9adb18122cf3517ebf0f018a716d99d07a7191474782604051611ac291815260200190565b60405180910390a25b50600101611999565b5f5f611ade612529565b6001600160a01b039093165f9081526020939093525050604090205490565b611b0561255a565b611b0e5f612857565b565b611b1861255a565b5f5b818110156117d057600160025f858585818110611b3957611b39613370565b9050602002016020810190611b4e9190612fab565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055828282818110611b8757611b87613370565b9050602002016020810190611b9c9190612fab565b6001600160a01b03167ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d6001604051611bd9911515815260200190565b60405180910390a2600101611b1a565b600a8160028110611bf8575f80fd5b01546001600160a01b0316905081565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611c3e61255a565b600c6115ad8282613603565b60605f611c55612529565b9050806004018054610f1a90613513565b5f5f5f5f5f5f5f5f5f5f5f805490508b10611c935760405162461bcd60e51b815260040161094e90613346565b5f5f8c81548110611ca657611ca6613370565b905f5260205f2090600902019050805f0154816001015482600201548360030154846004015485600501548660060154876007015f9054906101000a900460ff168860070160019054906101000a900460ff1689600801549a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015611d645750825b90505f826001600160401b03166001148015611d7f5750303b155b905081158015611d8d575080155b15611dab5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611dd557845460ff60401b1916600160401b1785555b611ddf8b8b6128c7565b611de88d6128d9565b611df06128ea565b611df98d6124b8565b8b600d5f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508c60045f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508760085f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555086600a906002611e7c929190612d33565b50600c611e898a82613603565b50600e8690556001805460ff191690556a0e79c4e6a3023e81800000611eaf8e826124f5565b508315611ef657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b5f33610fa98185856125dd565b6001600160a01b0381165f908152600560205260408120815b8154811015611f9557818181548110611f4657611f46613370565b905f5260205f20906003020160010154828281548110611f6857611f68613370565b905f5260205f2090600302015f0154611f819190613415565b611f8b90846134a0565b9250600101611f2b565b5050919050565b611fa461255a565b5f548a10611fc45760405162461bcd60e51b815260040161094e90613346565b838510611fe35760405162461bcd60e51b815260040161094e9061376f565b5f89116120025760405162461bcd60e51b815260040161094e9061379c565b5f8a8154811061201457612014613370565b905f5260205f2090600902016004015486101561206b5760405162461bcd60e51b815260206004820152601560248201527414dd5c1c1b1e481b195cdcc81d1a185b881cdbdb19605a1b604482015260640161094e565b5f5f8b8154811061207e5761207e613370565b5f91825260209091206009909102018a8155600181018a90556002810189905560038101889055600581018790556006810186905560078101805461ffff191686151561ff0019161761010086151502179055600881018390556040519091507fcbb0c1a1fdb681944efff8b5b79efe3647a0d17de3e73e906a4358172dd32b1f90612117908d908d908b908b908b908f908c906137c7565b60405180910390a15050505050505050505050565b61213461255a565b8284106121535760405162461bcd60e51b815260040161094e9061376f565b5f88116121725760405162461bcd60e51b815260040161094e9061379c565b5f85116121b65760405162461bcd60e51b81526020600482015260126024820152710537570706c79206d757374206265203e20360741b604482015260640161094e565b604080516101408101825289815260208101898152918101888152606082018881525f6080840181815260a085018a815260c086018a815289151560e088019081526001610100808a018281526101208b018d815288548085018a558980529b517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5636009909d029c8d01559b517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648c015598517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5658b015596517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5668a015593517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56789015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e568880155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e569870155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56a86018054955161ffff1990961691151561ff001916919091179415159093029390931790915592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56b9092019190915590547f96107949801257dc3baebd423f9c753d03a045b47193dc37adc25bc55e952b65916123c391613415565b898787878b886040516123dc97969594939291906137c7565b60405180910390a15050505050505050565b5f5f6123f8612529565b6001600160a01b039485165f90815260019190910160209081526040808320959096168252939093525050205490565b6060600c805461243790613513565b80601f016020809104026020016040519081016040528092919081815260200182805461246390613513565b80156124ae5780601f10612485576101008083540402835291602001916124ae565b820191905f5260205f20905b81548152906001019060200180831161249157829003601f168201915b5050505050905090565b6124c061255a565b6001600160a01b0381166124e9575f604051631e4fbdf760e01b815260040161094e9190612e6c565b6124f281612857565b50565b6001600160a01b03821661251e575f60405163ec442f0560e01b815260040161094e9190612e6c565b6115ad5f83836128f2565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0090565b6117d08383836001612a15565b33612563611c08565b6001600160a01b031614611b0e573360405163118cdaa760e01b815260040161094e9190612e6c565b5f61259784846123ee565b90505f198110156125d757818110156125c957828183604051637dc7a0d960e11b815260040161094e939291906137f9565b6125d784848484035f612a15565b50505050565b6001600160a01b038316612606575f604051634b637e8f60e11b815260040161094e9190612e6c565b6001600160a01b03821661262f575f60405163ec442f0560e01b815260040161094e9190612e6c565b6117d08383836128f2565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806126c057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126b45f5160206138485f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611b0e5760405163703e46dd60e11b815260040160405180910390fd5b6126e6611c08565b6001600160a01b0316336001600160a01b0316148061270f5750600d546001600160a01b031633145b6124f25760405162461bcd60e51b815260206004820152601a60248201527f4e6f7420617574686f72697a656420666f722075706772616465000000000000604482015260640161094e565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156127b5575060408051601f3d908101601f191682019092526127b29181019061381a565b60015b6127d45781604051634c9c8ce360e01b815260040161094e9190612e6c565b5f5160206138485f395f51905f52811461280457604051632a87526960e21b81526004810182905260240161094e565b6117d08383612af6565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b0e5760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6128cf612b4b565b6115ad8282612b94565b6128e1612b4b565b6124f281612bc4565b611b0e612b4b565b5f6128fb612529565b90506001600160a01b0384166129295781816002015f82825461291e91906134a0565b909155506129869050565b6001600160a01b0384165f90815260208290526040902054828110156129685784818460405163391434e360e21b815260040161094e939291906137f9565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b0383166129a45760028101805483900390556129c2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a0791815260200190565b60405180910390a350505050565b5f612a1e612529565b90506001600160a01b038516612a49575f60405163e602df0560e01b815260040161094e9190612e6c565b6001600160a01b038416612a72575f604051634a1406b160e11b815260040161094e9190612e6c565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115612aef57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612ae691815260200190565b60405180910390a35b5050505050565b612aff82612bcc565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612b43576117d08282612c26565b6115ad612c98565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611b0e57604051631afcd79f60e31b815260040160405180910390fd5b612b9c612b4b565b5f612ba5612529565b905060038101612bb58482613603565b50600481016125d78382613603565b6124c0612b4b565b806001600160a01b03163b5f03612bf85780604051634c9c8ce360e01b815260040161094e9190612e6c565b5f5160206138485f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612c429190613831565b5f60405180830381855af49150503d805f8114612c7a576040519150601f19603f3d011682016040523d82523d5f602084013e612c7f565b606091505b5091509150612c8f858383612cb7565b95945050505050565b3415611b0e5760405163b398979f60e01b815260040160405180910390fd5b606082612ccc57612cc782612d0a565b611116565b8151158015612ce357506001600160a01b0384163b155b15612d035783604051639996b31560e01b815260040161094e9190612e6c565b5080611116565b805115612d1a5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8260028101928215612d7b579160200282015b82811115612d7b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612d46565b50612d87929150612d8b565b5090565b5b80821115612d87575f8155600101612d8c565b80356001600160a01b0381168114612db5575f5ffd5b919050565b5f5f5f60608486031215612dcc575f5ffd5b83359250612ddc60208501612d9f565b929592945050506040919091013590565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111166020830184612ded565b5f5f60408385031215612e3e575f5ffd5b612e4783612d9f565b946020939093013593505050565b5f60208284031215612e65575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b5f5f5f60608486031215612e92575f5ffd5b612e9b84612d9f565b9250612ddc60208501612d9f565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612ee557612ee5612ea9565b604052919050565b5f6001600160401b03821115612f0557612f05612ea9565b50601f01601f191660200190565b5f612f25612f2084612eed565b612ebd565b9050828152838383011115612f38575f5ffd5b828260208301375f602084830101529392505050565b5f5f60408385031215612f5f575f5ffd5b612f6883612d9f565b915060208301356001600160401b03811115612f82575f5ffd5b8301601f81018513612f92575f5ffd5b612fa185823560208401612f13565b9150509250929050565b5f60208284031215612fbb575f5ffd5b61111682612d9f565b5f5f60208385031215612fd5575f5ffd5b82356001600160401b03811115612fea575f5ffd5b8301601f81018513612ffa575f5ffd5b80356001600160401b0381111561300f575f5ffd5b8560208260051b8401011115613023575f5ffd5b6020919091019590945092505050565b5f82601f830112613042575f5ffd5b61111683833560208501612f13565b5f60208284031215613061575f5ffd5b81356001600160401b03811115613076575f5ffd5b61308284828501613033565b949350505050565b5f82601f830112613099575f5ffd5b604080519081016001600160401b03811182821017156130bb576130bb612ea9565b80604052508060408401858111156130d1575f5ffd5b845b818110156130f2576130e481612d9f565b8352602092830192016130d3565b509195945050505050565b5f5f5f5f5f5f5f5f610120898b031215613115575f5ffd5b61311e89612d9f565b975061312c60208a01612d9f565b965060408901356001600160401b03811115613146575f5ffd5b6131528b828c01613033565b96505060608901356001600160401b0381111561316d575f5ffd5b6131798b828c01613033565b95505060808901356001600160401b03811115613194575f5ffd5b6131a08b828c01613033565b9450506131af60a08a01612d9f565b92506131be8a60c08b0161308a565b979a969950949793969295919450919261010001359150565b5f5f604083850312156131e8575f5ffd5b823591506131f860208401612d9f565b90509250929050565b80151581146124f2575f5ffd5b5f5f5f5f5f5f5f5f5f5f6101408b8d031215613228575f5ffd5b8a35995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013561326481613201565b92506101008b013561327581613201565b999c989b509699959894979396509194909392610120909101359150565b5f5f5f5f5f5f5f5f610100898b0312156132ab575f5ffd5b883597506020890135965060408901359550606089013594506080890135935060a0890135925060c08901356132e081613201565b979a969950949793969295919450919260e001359150565b5f5f60408385031215613309575f5ffd5b61331283612d9f565b91506131f860208401612d9f565b6020808252600c908201526b14d85b195cc81c185d5cd95960a21b604082015260600190565b60208082526010908201526f125b9d985b1a59081c1a185cd948125160821b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b6020808252600e908201526d506861736520696e61637469766560901b604082015260600190565b602080825260129082015271139bdd081a5b881cd85b19481c195c9a5bd960721b604082015260600190565b6020808252600f908201526e139bdd081dda1a5d195b1a5cdd1959608a1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610faf57610faf613401565b6020808252601390820152724e6f20746f6b656e7320617661696c61626c6560681b604082015260600190565b5f8261346f57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526012908201527142656c6f77206d696e20707572636861736560701b604082015260600190565b80820180821115610faf57610faf613401565b602080825260149082015273115e18d959591cc81dd85b1b195d081b1a5b5a5d60621b604082015260600190565b8082028115828204841417610faf57610faf613401565b5f60208284031215613508575f5ffd5b815161111681613201565b600181811c9082168061352757607f821691505b60208210810361354557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121561355b575f5ffd5b81516001600160401b03811115613570575f5ffd5b8201601f81018413613580575f5ffd5b805161358e612f2082612eed565b8181528560208385010111156135a2575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b601f8211156117d057805f5260205f20601f840160051c810160208510156135e45750805b601f840160051c820191505b81811015612aef575f81556001016135f0565b81516001600160401b0381111561361c5761361c612ea9565b6136308161362a8454613513565b846135bf565b6020601f821160018114613662575f831561364b5750848201515b5f19600385901b1c1916600184901b178455612aef565b5f84815260208120601f198516915b828110156136915787850151825560209485019460019092019101613671565b50848210156136ae57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f6136cf6060830186612ded565b82810360208401526136e18186612ded565b905082810360408401525f84546136f781613513565b808452600182168015613711576001811461372d57613761565b60ff1983166020860152602082151560051b8601019350613761565b875f5260205f205f5b8381101561375857815460208289010152600182019150602081019050613736565b86016020019450505b509198975050505050505050565b602080825260139082015272496e76616c69642074696d652077696e646f7760681b604082015260600190565b60208082526011908201527005072696365206d757374206265203e203607c1b604082015260600190565b968752602087019590955260408601939093526060850191909152608084015260a0830152151560c082015260e00190565b6001600160a01b039390931683526020830191909152604082015260600190565b5f6020828403121561382a575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220ae9a92f97addf4f5f2fb187930b670c92f9ca12102ba659fbb2727d638b8397664736f6c634300081d0033