6 txs
7 calls
constructor
constructor(address initialOwner, address usdt_, address nft_, address engineWallet_, address marketingWallet_)
functions
BOOST_10_BPS
viewfunction BOOST_10_BPS() view returns (uint256)
BOOST_20_BPS
viewfunction BOOST_20_BPS() view returns (uint256)
BOOST_30_BPS
viewfunction BOOST_30_BPS() view returns (uint256)
BPS
viewfunction BPS() view returns (uint256)
buybackBps
viewfunction buybackBps() view returns (uint256)
claimable
viewfunction claimable(uint256 tokenId) view returns (uint256)
currentPhase
viewfunction currentPhase() view returns (uint8)
directReferrals
viewfunction directReferrals(address, uint256) view returns (address)
engineWallet
viewfunction engineWallet() view returns (address)
floorPrice
viewfunction floorPrice(uint8) view returns (uint256)
getActiveListings
viewfunction getActiveListings() view returns (uint256[] ids)
getGlobalStats
viewfunction getGlobalStats() view returns (uint256 _totalUsers, uint256 _totalMinted, uint256 _totalActive, uint256 _activeListings)
getMinerInfo
viewfunction getMinerInfo(uint256 tokenId) view returns (tuple M)
getMyMinersDetailed
viewfunction getMyMinersDetailed() view returns (tuple[] arr)
getReferralCountsByLevel
viewfunction getReferralCountsByLevel(address u) view returns (uint256[10])
getReferralEarningsByLevel
viewfunction getReferralEarningsByLevel(address u) view returns (uint256[10])
hasUnlocked
viewfunction hasUnlocked(address user, uint8 level) view returns (bool)
listingIdCounter
viewfunction listingIdCounter() view returns (uint256)
listings
viewfunction listings(uint256) view returns (address seller, uint256 tokenId, uint256 price, bool active)
MARKET_ENGINE_BPS
viewfunction MARKET_ENGINE_BPS() view returns (uint256)
MARKET_FEE_BPS
viewfunction MARKET_FEE_BPS() view returns (uint256)
MARKET_MKT_BPS
viewfunction MARKET_MKT_BPS() view returns (uint256)
marketingWallet
viewfunction marketingWallet() view returns (address)
miner
viewfunction miner(uint256) view returns (bool isActive, bool expired, uint64 startTime, uint64 lastClaim, uint32 usedHours, uint32 maxHours, uint256 baseProdPerHour, uint256 lastPurchasePrice, uint16 permBoostBps, uint16 tempBoostBps, uint64 tempBoostUntil)
nft
viewfunction nft() view returns (address)
OCLOCK_20_BPS
viewfunction OCLOCK_20_BPS() view returns (uint256)
OCLOCK_35_BPS
viewfunction OCLOCK_35_BPS() view returns (uint256)
OVERCLOCK_20_BPS
viewfunction OVERCLOCK_20_BPS() view returns (uint256)
OVERCLOCK_35_BPS
viewfunction OVERCLOCK_35_BPS() view returns (uint256)
OVERCLOCK_DURATION
viewfunction OVERCLOCK_DURATION() view returns (uint256)
owner
viewfunction owner() view returns (address)
PERM_BOOST_CAP_BPS
viewfunction PERM_BOOST_CAP_BPS() view returns (uint256)
phaseAllocation
viewfunction phaseAllocation(uint8, uint8) view returns (uint256)
phaseMinted
viewfunction phaseMinted(uint8, uint8) view returns (uint256)
phaseMultiplierBps
viewfunction phaseMultiplierBps(uint8) view returns (uint256)
plans
viewfunction plans(uint8) view returns (uint256 initialPrice, uint256 baseProdPerHour, uint32 maxHours, uint8 referralLevels)
PRICE_MULTIPLIER_CAP_BPS
viewfunction PRICE_MULTIPLIER_CAP_BPS() view returns (uint256)
prodPerHour
viewfunction prodPerHour(uint256 tokenId) view returns (uint256)
refs
viewfunction refs(address) view returns (address referrer, uint256 totalEarnings)
RENEW_250H_BPS
viewfunction RENEW_250H_BPS() view returns (uint256)
totalActive
viewfunction totalActive() view returns (uint256)
totalMinted
viewfunction totalMinted() view returns (uint256)
totalUsers
viewfunction totalUsers() view returns (uint256)
upgradeSplit
viewfunction upgradeSplit() view returns (uint16 engineBps, uint16 reserveBps, uint16 mktBps)
usdt
viewfunction usdt() view returns (address)
activate
nonpayablefunction activate(uint256 tokenId, uint256 activationPrice)
advancePhase
nonpayablefunction advancePhase(uint8 newPhase)
autoListInternal
nonpayablefunction autoListInternal(uint256 tokenId)
boost
nonpayablefunction boost(uint256 tokenId, uint8 tierPct)
buyInternal
nonpayablefunction buyInternal(uint256 listingId)
buyPrimary
nonpayablefunction buyPrimary(uint8 model, address ref)
cancelListing
nonpayablefunction cancelListing(uint256 listingId)
claim
nonpayablefunction claim(uint256 tokenId)
claimBatch
nonpayablefunction claimBatch(uint256[] tokenIds)
configurePhase
nonpayablefunction configurePhase(uint8 phase, uint8[] models, uint256[] allocations, uint256 multiplierBps)
extendLife
nonpayablefunction extendLife(uint256 tokenId, uint16 packHours)
listInternal
nonpayablefunction listInternal(uint256 tokenId, uint256 price)
overclock
nonpayablefunction overclock(uint256 tokenId, uint8 tierPct)
renounceOwnership
nonpayablefunction renounceOwnership()
sellToSystem
nonpayablefunction sellToSystem(uint256 tokenId)
setBuybackBps
nonpayablefunction setBuybackBps(uint256 newBps)
setFloorPrice
nonpayablefunction setFloorPrice(uint8 model, uint256 value)
setUpgradeSplit
nonpayablefunction setUpgradeSplit(uint16 engineBps, uint16 reserveBps, uint16 mktBps)
setWallets
nonpayablefunction setWallets(address engineWallet_, address marketingWallet_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Activated
event Activated(address indexed owner, uint256 indexed tokenId, uint256 lastPurchasePrice)
Boosted
event Boosted(address indexed owner, uint256 indexed tokenId, uint16 boostBps, uint256 cost)
BoughtBack
event BoughtBack(address indexed seller, uint256 indexed tokenId, uint256 payout)
BuybackConfigUpdated
event BuybackConfigUpdated(uint256 previousBps, uint256 newBps)
Claimed
event Claimed(address indexed owner, uint256 indexed tokenId, uint256 amount, uint256 hoursClaimed)
Delisted
event Delisted(address indexed seller, uint256 indexed listingId)
Expired
event Expired(address indexed owner, uint256 indexed tokenId)
Extended
event Extended(address indexed owner, uint256 indexed tokenId, uint16 hoursAdded, uint256 cost)
Listed
event Listed(address indexed seller, uint256 indexed listingId, uint256 indexed tokenId, uint256 price)
Overclocked
event Overclocked(address indexed owner, uint256 indexed tokenId, uint16 boostBps, uint256 cost, uint64 until)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PhaseAdvanced
event PhaseAdvanced(uint8 newPhase)
PhaseConfigured
event PhaseConfigured(uint8 phase, uint8 model, uint256 allocation, uint256 multiplierBps)
PrimaryBought
event PrimaryBought(address indexed buyer, uint8 indexed model, uint256 indexed tokenId, uint256 price)
ReferralReward
event ReferralReward(address indexed from, address indexed to, uint8 level, uint256 amount)
SoldInternal
event SoldInternal(address indexed buyer, address indexed seller, uint256 indexed listingId, uint256 tokenId, uint256 price)
UpgradeSplitUpdated
event UpgradeSplitUpdated(uint16 engineBps, uint16 reserveBps, uint16 mktBps)
WalletsUpdated
event WalletsUpdated(address engineWallet, address marketingWallet)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x61012060405261177060c0526109c460e0526105dc610100526002805465ffffffffffff19166505dc09c41770179055611b58600355348015610040575f5ffd5b50604051615c3b380380615c3b83398101604081905261005f91610862565b846001600160a01b03811661008e57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100978161077d565b50600180556001600160a01b038416158015906100bc57506001600160a01b03831615155b6100f75760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610085565b6001600160a01b0382161580159061011757506001600160a01b03811615155b6101515760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc81dd85b1b195d60aa1b6044820152606401610085565b6001600160a01b03848116608090815284821660a052600480546001600160a01b0319908116868516179091556005805490911692841692909217909155604080519182018152670de0b6b3a76400008252662501e734690aaa6020830152610823908201526001606082015260065f8060ff908116825260208083019390935260409182015f908120855181558585015160018083019190915586850151600292830180546060998a01519096166401000000000264ffffffffff1990961663ffffffff90921691909117949094179093558351608081018552670de0b6b3a7640000815266c0704bdd556aaa958101959095526108209385019390935293830191909152909160069160ff908116825260208083019390935260409182015f9081208551815585850151600182015585840151600291820180546060988901519095166401000000000264ffffffffff1990951663ffffffff9092169190911793909317909255825160808101845268056bc75e2d63100000815267018fae27693b40009481019490945261081d9284019290925260049383019390935290916006919060ff908116825260208083019390935260409182015f9081208551815585850151600182015585840151600290910180546060978801519094166401000000000264ffffffffff1990941663ffffffff90921691909117929092179091558151608081018352680d8d726b7177a80000815267040c3549bb7d2aaa938101939093526107f5918301919091526006928201839052909190600360ff908116825260208083019390935260409182015f9081208551815585850151600182015585840151600290910180546060978801519094166401000000000264ffffffffff1990941663ffffffff90921691909117929092179091558151608081018352681b1ae4d6e2ef500000815267083d6c7aab636000938101939093526107d09183019190915260079282019290925290600690600460ff908116825260208083019390935260409182015f9081208551815585850151600182015585840151600290910180546060978801519094166401000000000264ffffffffff1990941663ffffffff90921691909117929092179091558151608081018352683635c9adc5dea0000081526710c4dcc3bf98d555938101939093526107d09183019190915260089282019290925290600690600560ff908116825260208083019390935260409182015f9081208551815585850151600182015585840151600290910180546060978801519094166401000000000264ffffffffff1990941663ffffffff90921691909117929092179091558151608081018352686c6b935b8bbd400000815267221dc12450d5d555938101939093526107d091830191909152600992820192909252906006908160ff908116825260208083019390935260409182015f9081208551815585850151600182015585840151600290910180546060978801519094166401000000000264ffffffffff1990941663ffffffff9092169190911792909217909155815160808101835269010f0cf064dd5920000081526756bc75e2d6310000938101939093526107d091830191909152600a9282019290925290600690600760ff908116825260208083019390935260409182015f9081208551815593850151600185015591840151600290930180546060909501519091166401000000000264ffffffffff1990941663ffffffff9093169290921792909217905561271090600e908060ff16815260208101919091526040015f90812091909155614e2090600e90600160ff16815260208101919091526040015f90812091909155600d805460ff191660ff929092169190911790556106bc5f5b5f610fa06107cc565b6106cb5f5b60016107d06107cc565b6106da5f5b60026105dc6107cc565b6106e95f5b60036103e86107cc565b6106f85f5b60046102586107cc565b6107075f5b600561012c6107cc565b6107155f5b600660a06107cc565b6107235f5b600760506107cc565b61072d60016106b3565b61073760016106c1565b61074160016106d0565b61074b60016106df565b61075560016106ee565b61075f60016106fd565b610769600161070c565b610773600161071a565b50505050506108c3565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60ff8381165f818152600f60209081526040808320948716808452948252808320869055838352600e82529182902054825193845290830193909352810183905260608101919091527f0dd13b11b802595586c55b160d3cf7981d7a89b3c2564dbd8d1ba584e00bc25d9060800160405180910390a1505050565b80516001600160a01b038116811461085d575f5ffd5b919050565b5f5f5f5f5f60a08688031215610876575f5ffd5b61087f86610847565b945061088d60208701610847565b935061089b60408701610847565b92506108a960608701610847565b91506108b760808701610847565b90509295509295909350565b60805160a0516152546109e75f395f818161062c01528181610b1601528181610e69015281816110fe015281816111c401528181611361015281816114f6015281816118e301528181611c100152818161210201528181612497015281816125b50152818161282901528181612bfd01528181612df401528181612edb015281816132d30152818161355b0152818161367a015281816139f801528181613dd101528181613f83015281816143f3015281816144a1015261452f01525f818161048d015281816117a401528181611aaa015281816120420152818161207b015281816120b701528181612b3e01528181612b7a01528181612bb601528181613c2c01528181613c6401528181613c9d0152818161401d01526142ae01526152545ff3fe608060405234801561000f575f5ffd5b50600436106103ca575f3560e01c806371eeea3311610200578063bace0a9a1161011f578063d43c89b4116100b4578063eb408b3211610084578063eb408b3214610a61578063f2fde38b14610a74578063f716368914610a87578063f74fb84514610aa7578063f778e01d14610ab1575f5ffd5b8063d43c89b4146109bb578063dc00ac33146109ce578063de74e57b146109e1578063e6f8453314610a4e575f5ffd5b8063c1622f8a116100ef578063c1622f8a14610963578063c97efc3014610982578063d1d58b2514610995578063d3f6a157146109a8575f5ffd5b8063bace0a9a146108ea578063bb9943f014610932578063bff1f9e114610945578063c007d71c1461094e575f5ffd5b8063957b061711610195578063a2ceb78b11610165578063a2ceb78b146108b2578063a76d806b146108c5578063b3260839146108ce578063baa9f0fa146108e1575f5ffd5b8063957b06171461077757806398548f6f1461086c5780639f2363bf1461087f578063a2309ff8146108a9575f5ffd5b806387c35bc0116101d057806387c35bc0146108215780638b9be52c146108365780638da5cb5b146108495780638ea8f83c14610859575f5ffd5b806371eeea331461078057806375c6c6da146107aa57806375f0a874146107fb5780637b9ea87e1461080e575f5ffd5b80633f45c31b116102ec5780635ddaa12a116102815780636b4169c3116102515780636b4169c31461073e5780636dd5a90314610766578063715018a61461076f57806371aae78714610777575f5ffd5b80635ddaa12a1461069457806360a31a88146106b357806362abebce146107225780636658c82714610735575f5ffd5b806354cab291116102bc57806354cab29114610671578063553c02481461067957806357759600146106825780635825237b1461068b575f5ffd5b80633f45c31b146105fe578063405cb7691461060757806347ccca02146106275780634e9652661461064e575f5ffd5b80632b05abfe116103625780633579bcbe116103325780633579bcbe146105bc578063357f3ca6146105cf578063379607f5146105d85780633a091fae146105eb575f5ffd5b80632b05abfe146104755780632f48ab7d14610488578063305a67a8146104af578063324e20c0146104c2575f5ffd5b80630fcc40e71161039d5780630fcc40e714610445578063231701e91461045b578063249d39e9146104645780632546c8511461046d575f5ffd5b8063055ad42e146103ce57806305ad3935146103f2578063079e43a51461041d5780630c10f2aa14610430575b5f5ffd5b600d546103db9060ff1681565b60405160ff90911681526020015b60405180910390f35b610405610400366004614961565b610aba565b6040516001600160a01b0390911681526020016103e9565b600454610405906001600160a01b031681565b61044361043e366004614999565b610aee565b005b61044d60c881565b6040519081526020016103e9565b61044d600c5481565b61044d61271081565b61044d606481565b61044d6104833660046149c7565b610d94565b6104057f000000000000000000000000000000000000000000000000000000000000000081565b6104436104bd3660046149c7565b61103a565b61054e6104d03660046149c7565b60086020525f9081526040902080546001820154600283015460039093015460ff808416946101008504909116936001600160401b0362010000808304821695600160501b840483169563ffffffff600160901b8604811696600160b01b90960416949193919261ffff808316939183041691600160201b9004168b565b604080519b15158c5299151560208c01526001600160401b03988916998b019990995295871660608a015263ffffffff94851660808a01529390921660a088015260c087015260e086015261ffff9081166101008601521661012084015216610140820152610160016103e9565b6104436105ca3660046149c7565b61119c565b61044d61753081565b6104436105e63660046149c7565b6114d6565b6104436105f93660046149c7565b6118bb565b61044d610dac81565b61061a6106153660046149de565b611b15565b6040516103e991906149f9565b6104057f000000000000000000000000000000000000000000000000000000000000000081565b61066161065c366004614a2a565b611b6e565b60405190151581526020016103e9565b61044d60fa81565b61044d6103e881565b61044d60135481565b61044d61019081565b61044d6106a2366004614a56565b60076020525f908152604090205481565b6106f36106c1366004614a56565b60066020525f908152604090208054600182015460029092015490919063ffffffff811690600160201b900460ff1684565b6040516103e99493929190938452602084019290925263ffffffff16604083015260ff16606082015260800190565b610443610730366004614ab8565b611bfb565b61044d61012c81565b610746611e34565b6040805194855260208501939093529183015260608201526080016103e9565b61044d61038481565b610443611e8d565b61044d61025881565b61044d61078e366004614af6565b601060209081525f928352604080842090915290825290205481565b6107dc6107b83660046149de565b60096020525f9081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103e9565b600554610405906001600160a01b031681565b61044361081c366004614b12565b611ea0565b610829612278565b6040516103e99190614b3e565b610443610844366004614b80565b6123af565b5f546001600160a01b0316610405565b610443610867366004614c08565b61246f565b61044361087a366004614c37565b612801565b61044d61088d366004614af6565b600f60209081525f928352604080842090915290825290205481565b61044d60125481565b6104436108c03660046149c7565b612a26565b61044d61138881565b6104436108dc366004614a56565b612cf7565b61044d60035481565b60025461090d9061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103e9565b6104436109403660046149c7565b612d47565b61044d60115481565b610956612dd2565b6040516103e99190614d5e565b61044d610971366004614a56565b600e6020525f908152604090205481565b610443610990366004614da1565b612fd9565b61044d6109a33660046149c7565b612ff6565b6104436109b6366004614dbd565b61318a565b61061a6109c93660046149de565b613253565b6104436109dc366004614999565b6132ab565b610a226109ef3660046149c7565b600b6020525f908152604090208054600182015460028301546003909301546001600160a01b0390921692909160ff1684565b604080516001600160a01b039095168552602085019390935291830152151560608201526080016103e9565b610443610a5c366004614c08565b613533565b610443610a6f366004614dd9565b6137ec565b610443610a823660046149de565b6138e0565b610a9a610a953660046149c7565b61391a565b6040516103e99190614e21565b61044d62093a8081565b61044d6107d081565b600a602052815f5260405f208181548110610ad3575f80fd5b5f918252602090912001546001600160a01b03169150829050565b610af6613b3d565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610b5b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7f9190614e30565b6001600160a01b031614610bae5760405162461bcd60e51b8152600401610ba590614e4b565b60405180910390fd5b8060ff16600a1480610bc357508060ff166014145b80610bd157508060ff16601e145b610c0c5760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b6044820152606401610ba5565b5f8281526008602052604090208054610100900460ff1615610c405760405162461bcd60e51b8152600401610ba590614e6e565b5f8260ff16600a14610c67578260ff16601414610c5f57610384610c6b565b610258610c6b565b61012c5b90505f612710828460020154610c819190614ea3565b610c8b9190614eba565b90505f610c99856064614ed9565b600385015460ff91909116915061138890610cb990839061ffff16614efc565b1115610cf35760405162461bcd60e51b81526020600482015260096024820152680426f6f7374206361760bc1b6044820152606401610ba5565b610cfc82613b67565b6003840180548291905f90610d1690849061ffff16614f0f565b92506101000a81548161ffff021916908361ffff16021790555085336001600160a01b03167fbd2c55c132ce6bf4edbcaf8e0c9665cc39410a959ca8f88daa6b1b1fdb24117e8385604051610d7b92919061ffff929092168252602082015260400190565b60405180910390a350505050610d9060018055565b5050565b5f818152600860209081526040808320815161016081018352815460ff808216151583526101008083049091161515958301959095526001600160401b0362010000808304821684870152600160501b83048216606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015460e084015260039093015461ffff80821696840196909652908104909416610120820152600160201b9093041661014083015251632bbacfe360e11b815282906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906357759fc690610ea290879060040190815260200190565b602060405180830381865afa158015610ebd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee19190614f39565b60ff8082165f9081526006602090815260408083208151608081018352815480825260018301549482019490945260029091015463ffffffff811692820192909252600160201b9091049093166060840152929350909161271090610f499061753090614ea3565b610f539190614eba565b90505f818560e0015111610f6b578460e00151610f6d565b815b83519091505f90610f8061271084614ea3565b610f8a9190614eba565b90505f86610100015161ffff16612710610fa49190614efc565b90505f8761014001516001600160401b03164210610fc457612710610fda565b610120880151610fda9061ffff16612710614efc565b60c0890151909150612710610fef8583614ea3565b610ff99190614eba565b90506127106110088483614ea3565b6110129190614eba565b90506127106110218383614ea3565b61102b9190614eba565b9b9a5050505050505050505050565b611042613b3d565b5f818152600b60205260409020600381015460ff166110905760405162461bcd60e51b815260206004820152600a6024820152694e6f742061637469766560b01b6044820152606401610ba5565b80546001600160a01b031633146110d65760405162461bcd60e51b815260206004820152600a6024820152692737ba1039b2b63632b960b11b6044820152606401610ba5565b60038101805460ff191690556001810154604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916342842e0e91611136913091339190600401614f54565b5f604051808303815f87803b15801561114d575f5ffd5b505af115801561115f573d5f5f3e3d5ffd5b50506040518492503391507f070be797ebb4cddc2d58b4fe8de5939531dd771aaed937a59fbe5c9dc8a5d099905f90a35061119960018055565b50565b6111a4613b3d565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611209573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122d9190614e30565b6001600160a01b0316146112535760405162461bcd60e51b8152600401610ba590614e4b565b61125c81613cce565b5f8181526008602052604090208054610100900460ff16156112905760405162461bcd60e51b8152600401610ba590614e6e565b80545f9063ffffffff600160901b82048116600160b01b90920416116112b6575f6112d8565b81546112d89063ffffffff600160901b8204811691600160b01b900416614f78565b63ffffffff1690505f81116112ff5760405162461bcd60e51b8152600401610ba590614f94565b815460028301545f91600160b01b900463ffffffff1690611321908490614ea3565b61132b9190614eba565b90505f61271061133d83612328614ea3565b6113479190614eba565b604051632142170760e11b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061139a90339030908a90600401614f54565b5f604051808303815f87803b1580156113b1575f5ffd5b505af11580156113c3573d5f5f3e3d5ffd5b5050600c80545f93509150826113d883614fba565b909155506040805160808101825233815260208082018a81528284018781526001606085018181525f888152600b90955295909320935184546001600160a01b0319166001600160a01b0390911617845590519183019190915551600282015590516003909101805460ff1916911515919091179055855490915060ff161561148357845460ff191685556013541561148357600160135f82825461147d9190614fd2565b90915550505b8581336001600160a01b03167f03dec9cb5eb28fc88294be525eef5c4e1c3f2ca49fbe9c31a5ae6f11945aaec1856040516114c091815260200190565b60405180910390a4505050505061119960018055565b6114de613b3d565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015611543573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115679190614e30565b90506001600160a01b03811633146115915760405162461bcd60e51b8152600401610ba590614e4b565b5f828152600860205260409020805460ff1680156115b657508054610100900460ff16155b6115f85760405162461bcd60e51b8152602060048201526013602482015272125b9858dd1a5d99481bdc88195e1c1a5c9959606a1b6044820152606401610ba5565b80545f90610e109061161a90600160501b90046001600160401b031642614fd2565b6116249190614eba565b90505f81116116635760405162461bcd60e51b815260206004820152600b60248201526a2bb0b4ba1018903437bab960a91b6044820152606401610ba5565b81545f906116879063ffffffff600160901b8204811691600160b01b900416614f78565b63ffffffff1690505f81831161169d578261169f565b815b90505f81116116c05760405162461bcd60e51b8152600401610ba590614f94565b5f816116cb88610d94565b6116d59190614ea3565b90505f811161170f5760405162461bcd60e51b8152600401610ba5906020808252600490820152635a65726f60e01b604082015260600190565b61171b82610e10614fe5565b85546117379190600160501b90046001600160401b0316615007565b85546001600160401b0391909116600160501b0267ffffffffffffffff60501b19909116178086558290869060129061177f90849063ffffffff600160901b90910416615026565b92506101000a81548163ffffffff021916908363ffffffff1602179055506117db86827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166141579092919063ffffffff16565b604080518281526020810184905288916001600160a01b038916917f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e910160405180910390a361182b86826141bb565b845463ffffffff600160b01b82048116600160901b90920416106118ac57845461ffff19166101001785556013541561187657600160135f8282546118709190614fd2565b90915550505b60405187906001600160a01b038816907f751a0eb66c3cc9aa48957d09bd3cc81db888f5bcac6689def5fb9e18ec3cf201905f90a35b50505050505061119960018055565b6118c3613b3d565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611928573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194c9190614e30565b6001600160a01b0316146119725760405162461bcd60e51b8152600401610ba590614e4b565b5f8181526008602052604090208054610100900460ff16156119a65760405162461bcd60e51b8152600401610ba590614e6e565b80545f9063ffffffff600160901b82048116600160b01b90920416116119cc575f6119ee565b81546119ee9063ffffffff600160901b8204811691600160b01b900416614f78565b63ffffffff1690505f8111611a155760405162461bcd60e51b8152600401610ba590614f94565b815460028301545f91600160b01b900463ffffffff1690611a37908490614ea3565b611a419190614eba565b90505f61271060035483611a559190614ea3565b611a5f9190614eba565b845461ff0019811661010017865590915060ff168015611a8057505f601354115b15611a9d57600160135f828254611a979190614fd2565b90915550505b611ad16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383614157565b604051818152859033907fa52290e9bbeea08e85a4902c066be363bfea47a8be21bba8d1e325b67df795c69060200160405180910390a35050505061119960018055565b611b1d6148c3565b6001600160a01b0382165f908152600960205260409081902081516101408101909252600c01600a8282826020028201915b815481526020019060010190808311611b4f5750505050509050919050565b5f60018260ff161080611b845750600a8260ff16115b15611b9057505f611bf5565b5f611b9a846143d0565b60ff9081165f908152600660209081526040918290208251608081018452815481526001820154928101929092526002015463ffffffff811692820192909252600160201b9091048216606090910181905290841611159150505b92915050565b611c03613b3d565b5f5b81811015611e2a57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e858585818110611c4f57611c4f615042565b905060200201356040518263ffffffff1660e01b8152600401611c7491815260200190565b602060405180830381865afa158015611c8f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb39190614e30565b6001600160a01b031603611e22575f60085f858585818110611cd757611cd7615042565b602090810292909201358352508181019290925260409081015f20815161016081018352815460ff8082161580158085526101008085049093161515978501979097526001600160401b0362010000808504821697860197909752600160501b84048116606086015263ffffffff600160901b850481166080870152600160b01b90940490931660a0850152600185015460c0850152600285015460e085015260039094015461ffff8082169285019290925294850416610120830152600160201b909304909216610140830152909250611db457508060200151155b15611e20573063379607f5858585818110611dd157611dd1615042565b905060200201356040518263ffffffff1660e01b8152600401611df691815260200190565b5f604051808303815f87803b158015611e0d575f5ffd5b505af1925050508015611e1e575060015b505b505b600101611c05565b50610d9060018055565b5f80808080805b600c54811015611e74575f818152600b602052604090206003015460ff1615611e6c5781611e6881614fba565b9250505b600101611e3b565b5060115460125460135491965094509250905090919293565b611e956145be565b611e9e5f6145ea565b565b611ea8613b3d565b60ff8083165f908152600660209081526040918290208251608081018452815480825260018301549382019390935260029091015463ffffffff811693820193909352600160201b909204909216606082015290611f3e5760405162461bcd60e51b81526020600482015260136024820152724d6f64656c206e6f7420617661696c61626c6560681b6044820152606401610ba5565b600d5460ff9081165f818152600f602090815260408083209488168084529482528083205493835260108252808320948352939052919091205410611fb65760405162461bcd60e51b815260206004820152600e60248201526d141a185cd9481cdbdb19081bdd5d60921b6044820152606401610ba5565b600d5460ff165f908152600e6020526040812054825161271091611fd991614ea3565b611fe39190614eba565b90505f612710611ff583610258614ea3565b611fff9190614eba565b90505f61271061201184610190614ea3565b61201b9190614eba565b90505f816120298486614fd2565b6120339190614fd2565b905061206a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084614639565b6004546120a6906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169133911686614639565b6005546120e2906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169133911685614639565b604051630348ab1560e51b815233600482015260ff881660248201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063691562a0906044016020604051808303815f875af1158015612150573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121749190615056565b5f818152600860209081526040918290208054928a015163ffffffff16600160b01b026001600160d01b03199093169290921782558801516001820155600281018790556003810180546bffffffffffffffffffffffff191690559091506121dc3389614661565b600160125f8282546121ee9190614efc565b9091555050600d5460ff9081165f908152601060209081526040808320938d168352929052908120805460019290612227908490614efc565b9091555050604051868152829060ff8b169033907f204afba2fa3455dc820c9fee8f5455497a472e2d7193c1b3e6a78d19bf187ba59060200160405180910390a450505050505050610d9060018055565b600c546060905f816001600160401b038111156122975761229761506d565b6040519080825280602002602001820160405280156122c0578160200160208202803683370190505b5090505f805b8381101561231a575f818152600b602052604090206003015460ff1615612312578083836122f381614fba565b94508151811061230557612305615042565b6020026020010181815250505b6001016122c6565b50806001600160401b038111156123335761233361506d565b60405190808252806020026020018201604052801561235c578160200160208202803683370190505b5093505f5b818110156123a85782818151811061237b5761237b615042565b602002602001015185828151811061239557612395615042565b6020908102919091010152600101612361565b5050505090565b6123b76145be565b8382146123f85760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610ba5565b60ff86165f908152600e602052604081208290555b848110156124665761245e8787878481811061242b5761242b615042565b90506020020160208101906124409190614a56565b86868581811061245257612452615042565b905060200201356147e4565b60010161240d565b50505050505050565b612477613b3d565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156124dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125009190614e30565b6001600160a01b0316146125265760405162461bcd60e51b8152600401610ba590614e4b565b5f8281526008602052604090208054610100900460ff161561255a5760405162461bcd60e51b8152600401610ba590614e6e565b805460ff161561259d5760405162461bcd60e51b815260206004820152600e60248201526d416c72656164792061637469766560901b6044820152606401610ba5565b604051632bbacfe360e11b8152600481018490525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906357759fc690602401602060405180830381865afa158015612602573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126269190614f39565b60ff8082165f908152600660209081526040918290208251608081018452815481526001820154928101929092526002015463ffffffff811692820192909252600160201b9091049091166060820152909150831561271e5760ff82165f90815260076020526040902054156126e55760ff82165f908152600760205260409020548410156126e55760405162461bcd60e51b815260206004820152600b60248201526a2132b637bb90333637b7b960a91b6044820152606401610ba5565b5f612710617530835f01516126fa9190614ea3565b6127049190614eba565b90505f8186116127145785612716565b815b600286015550505b825460ff19166001178084556001600160401b036201000090910416156127555782546201000090046001600160401b0316612757565b425b835471ffffffffffffffffffffffffffffffff00001916620100006001600160401b039283160267ffffffffffffffff60501b191617600160501b42929092169190910217835560138054600191905f906127b3908490614efc565b90915550506002830154604051908152859033907ff89be561c4ce44410305a86555ebae8b579de22890a703ac89051c5971b5d4dc906020015b60405180910390a3505050610d9060018055565b612809613b3d565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561286e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128929190614e30565b6001600160a01b0316146128b85760405162461bcd60e51b8152600401610ba590614e4b565b8061ffff1660fa14806128d057508061ffff166101f4145b806128e057508061ffff166103e8145b61291b5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207061636b60a01b6044820152606401610ba5565b5f8281526008602052604090208054610100900460ff161561294f5760405162461bcd60e51b8152600401610ba590614e6e565b5f61295f60fa61ffff8516614eba565b90505f61296d8260fa614ea3565b90505f6127108285600201546129839190614ea3565b61298d9190614eba565b905061299881613b67565b835461ffff86169085906016906129bd908490600160b01b900463ffffffff16615026565b92506101000a81548163ffffffff021916908363ffffffff16021790555085336001600160a01b03167f9a3005d3b63dabda9047e395b13738a587dac530d65d9ac060dbb6421d3a2a3d8784604051610d7b92919061ffff929092168252602082015260400190565b612a2e613b3d565b5f818152600b60205260409020600381015460ff16612a815760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206c697374696e6760881b6044820152606401610ba5565b8054336001600160a01b0390911603612ac75760405162461bcd60e51b815260206004820152600860248201526753656c662062757960c01b6044820152606401610ba5565b60028101545f612710612adc6103e884614ea3565b612ae69190614eba565b90505f612af38284614fd2565b90505f612710612b0561025886614ea3565b612b0f9190614eba565b90505f612710612b2161019087614ea3565b612b2b9190614eba565b8654909150612b69906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169133911686614639565b600454612ba5906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169133911685614639565b600554612be1906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169133911684614639565b6001860154604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916342842e0e91612c35913091339190600401614f54565b5f604051808303815f87803b158015612c4c575f5ffd5b505af1158015612c5e573d5f5f3e3d5ffd5b5050506001870180545f9081526008602052604090819020805460ff199081168255600282018a905560038b01805490911690558954925491519093508a926001600160a01b03169133917f6dcef017cc53467bf0780bcb702819032f869d4fa4591dffd79fbeef06233bf891612cdf918c90918252602082015260400190565b60405180910390a45050505050505061119960018055565b612cff6145be565b600d805460ff191660ff83169081179091556040519081527fd0e47a271d69b0e6e3f9bd81c7c695bfbcb309e6ee66a23e6ad80a8f901905749060200160405180910390a150565b612d4f6145be565b612328811115612d8c5760405162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b6044820152606401610ba5565b600380549082905560408051828152602081018490527f1d8b6281eb44540f09cbeaaf94e93879694e0f51947cc648853952d3e826fc8c91015b60405180910390a15050565b6040516370a0823160e01b81523360048201526060905f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612e39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5d9190615056565b9050806001600160401b03811115612e7757612e7761506d565b604051908082528060200260200182016040528015612eb057816020015b612e9d6148e2565b815260200190600190039081612e955790505b5091505f5b81811015612fd457604051632f745c5960e01b8152336004820152602481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632f745c5990604401602060405180830381865afa158015612f28573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4c9190615056565b60405163f716368960e01b815260048101829052909150309063f7163689906024016101a060405180830381865afa158015612f8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fae91906150f9565b848381518110612fc057612fc0615042565b602090810291909101015250600101612eb5565b505090565b612fe16145be565b60ff9091165f90815260076020526040902055565b5f818152600860209081526040808320815161016081018352815460ff80821615801584526101008084049092161515968401969096526001600160401b0362010000808404821696850196909652600160501b83048116606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015460e084015260039093015461ffff80821694840194909452938404909216610120820152600160201b9092041661014082015290806130c5575080602001515b156130d257505f92915050565b5f610e1082606001516001600160401b0316426130ef9190614fd2565b6130f99190614eba565b9050805f0361310b57505f9392505050565b5f826080015163ffffffff168360a0015163ffffffff161161312d575f613141565b82608001518360a001516131419190614f78565b63ffffffff169050805f0361315a57505f949350505050565b5f818311613168578261316a565b815b90508061317687610d94565b6131809190614ea3565b9695505050505050565b6131926145be565b6001600160a01b038216158015906131b257506001600160a01b03811615155b6131ec5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc81dd85b1b195d60aa1b6044820152606401610ba5565b600480546001600160a01b038481166001600160a01b03199283168117909355600580549185169190921681179091556040805192835260208301919091527f316af92955f23ddbd4c570a5f8cda8a10b192f24d8f58524deb2fcb03a8bc7949101612dc6565b61325b6148c3565b6001600160a01b0382165f908152600960205260409081902081516101408101909252600201600a828282602002820191815481526020019060010190808311611b4f5750505050509050919050565b6132b3613b3d565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015613318573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333c9190614e30565b6001600160a01b0316146133625760405162461bcd60e51b8152600401610ba590614e4b565b8060ff166014148061337757508060ff166023145b6133b25760405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103a34b2b960a11b6044820152606401610ba5565b5f8281526008602052604090208054610100900460ff16156133e65760405162461bcd60e51b8152600401610ba590614e6e565b6003810154600160201b90046001600160401b031642101561343d5760405162461bcd60e51b815260206004820152601060248201526f4f766572636c6f636b2061637469766560801b6044820152606401610ba5565b5f8260ff166014146134505760c8613453565b60645b90505f6127108284600201546134699190614ea3565b6134739190614eba565b905061347e81613b67565b613489846064614ed9565b60038401805463ffff0000191660ff9290921662010000029190911790556134b462093a8042614efc565b6003840180546bffffffffffffffff000000001916600160201b6001600160401b03938416810291909117918290556040805162010000840461ffff168152602081018690529190920490921690820152859033907f5cce9e779c839c2487075280b16170f17c82662a7414e3bc44d72c106d106bb0906060016127ed565b61353b613b3d565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156135a0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135c49190614e30565b6001600160a01b0316146135ea5760405162461bcd60e51b8152600401610ba590614e4b565b5f81116136265760405162461bcd60e51b815260206004820152600a6024820152695a65726f20707269636560b01b6044820152606401610ba5565b61362f82613cce565b5f8281526008602052604090208054610100900460ff16156136635760405162461bcd60e51b8152600401610ba590614e6e565b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e906136b390339030908890600401614f54565b5f604051808303815f87803b1580156136ca575f5ffd5b505af11580156136dc573d5f5f3e3d5ffd5b5050600c80545f93509150826136f183614fba565b909155506040805160808101825233815260208082018881528284018881526001606085018181525f888152600b90955295909320935184546001600160a01b0319166001600160a01b0390911617845590519183019190915551600282015590516003909101805460ff1916911515919091179055825490915060ff161561379c57815460ff191682556013541561379c57600160135f8282546137969190614fd2565b90915550505b8381336001600160a01b03167f03dec9cb5eb28fc88294be525eef5c4e1c3f2ca49fbe9c31a5ae6f11945aaec1866040516137d991815260200190565b60405180910390a45050610d9060018055565b6137f46145be565b612710816138028486614f0f565b61380c9190614f0f565b61ffff161461384d5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081cdc1b1a5d609a1b6044820152606401610ba5565b604080516060808201835261ffff86811680845286821660208086018290529287169486018590526002805463ffffffff191683176201000083021765ffff000000001916600160201b8702179055855191825291810191909152928301919091527f0a9ae4c67e3e252d557e27c113149e3e8aa3aa07d6c10ea8398ad1e611fcb40b91015b60405180910390a1505050565b6138e86145be565b6001600160a01b03811661391157604051631e4fbdf760e01b81525f6004820152602401610ba5565b611199816145ea565b6139226148e2565b5f828152600860209081526040808320815161016081018352815460ff808216151583526101008083049091161515958301959095526001600160401b0362010000808304821684870152600160501b83048216606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015460e084015260039093015461ffff80821696840196909652908104909416610120820152600160201b9093041661014083015251632bbacfe360e11b81529091906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906357759fc690613a3190879060040190815260200190565b602060405180830381865afa158015613a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a709190614f39565b9050604051806101a001604052808260ff168152602001835f01511515815260200183602001511515815260200183604001516001600160401b0316815260200183606001516001600160401b03168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015181526020018360e00151815260200183610100015161ffff16815260200183610120015161ffff1681526020018361014001516001600160401b03168152602001613b3386612ff6565b9052949350505050565b600260015403613b6057604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b5f8111613ba25760405162461bcd60e51b815260206004820152600960248201526816995c9bc818dbdcdd60ba1b6044820152606401610ba5565b6002545f9061271090613bb99061ffff1684614ea3565b613bc39190614eba565b6002549091505f9061271090613be39062010000900461ffff1685614ea3565b613bed9190614eba565b6002549091505f9061271090613c0e90600160201b900461ffff1686614ea3565b613c189190614eba565b600454909150613c57906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169133911686614639565b613c8c6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085614639565b600554613cc8906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169133911684614639565b50505050565b5f818152600860205260409020805460ff168015613cf357508054610100900460ff16155b613cfb575050565b80545f90610e1090613d1d90600160501b90046001600160401b031642614fd2565b613d279190614eba565b9050805f03613d3557505050565b81545f9063ffffffff600160901b82048116600160b01b9092041611613d5b575f613d7d565b8254613d7d9063ffffffff600160901b8204811691600160b01b900416614f78565b63ffffffff169050805f03613eba57825461ffff191661010017835560135415613db957600160135f828254613db39190614fd2565b90915550505b6040516331a9108f60e11b81526004810185905284907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015613e1e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e429190614e30565b6001600160a01b03167f751a0eb66c3cc9aa48957d09bd3cc81db888f5bcac6689def5fb9e18ec3cf20160405160405180910390a360405162461bcd60e51b815260206004820152601860248201527745787069726564206166746572206175746f2d636c61696d60401b6044820152606401610ba5565b5f818311613ec85782613eca565b815b90505f81613ed787610d94565b613ee19190614ea3565b9050805f03613ef257505050505050565b613efe82610e10614fe5565b8554613f1a9190600160501b90046001600160401b0316615007565b85546001600160401b0391909116600160501b0267ffffffffffffffff60501b199091161780865582908690601290613f6290849063ffffffff600160901b90910416615026565b92506101000a81548163ffffffff021916908363ffffffff1602179055505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e886040518263ffffffff1660e01b8152600401613fcf91815260200190565b602060405180830381865afa158015613fea573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061400e9190614e30565b90506140446001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168284614157565b604080518381526020810185905288916001600160a01b038416917f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e910160405180910390a361409481836141bb565b855463ffffffff600160b01b82048116600160901b909204161061246657855461ffff1916610100178655601354156140df57600160135f8282546140d99190614fd2565b90915550505b60405187906001600160a01b038316907f751a0eb66c3cc9aa48957d09bd3cc81db888f5bcac6689def5fb9e18ec3cf201905f90a360405162461bcd60e51b815260206004820152601860248201527745787069726564206166746572206175746f2d636c61696d60401b6044820152606401610ba5565b6040516001600160a01b038381166024830152604482018390526141b691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614857565b505050565b6001600160a01b038083165f90815260096020526040812054909116905b600a8160ff161080156141f457506001600160a01b03821615155b15613cc8576142088261065c8360016151e7565b61422e576001600160a01b039182165f90815260096020526040902054909116906143be565b5f8160ff165f0361424257506103e8614281565b8160ff1660010361425657506101f4614281565b8160ff1660020361426a575061012c614281565b8160ff1660030361427d575060c8614281565b5060645b5f61271061428f8387614ea3565b6142999190614eba565b9050801561439e576142d56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168583614157565b6001600160a01b0384165f90815260096020526040812060010180548392906142ff908490614efc565b90915550506001600160a01b0384165f908152600960205260409020819060020160ff8516600a811061433457614334615042565b015f8282546143439190614efc565b90915550506001600160a01b038085169087167f9e049ed607614d479b674dbbbd87ad8695ec902d2f960b95e7a01c5c86b2d1656143828660016151e7565b6040805160ff9092168252602082018690520160405180910390a35b50506001600160a01b039182165f90815260096020526040902054909116905b806143c881615200565b9150506141d9565b6040516370a0823160e01b81526001600160a01b0382811660048301525f9182917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015614438573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061445c9190615056565b9050805f0361446e575f5b9392505050565b5f805b828110156145b657604051632f745c5960e01b81526001600160a01b038681166004830152602482018390525f917f000000000000000000000000000000000000000000000000000000000000000090911690632f745c5990604401602060405180830381865afa1580156144e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061450c9190615056565b604051632bbacfe360e11b8152600481018290529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906357759fc690602401602060405180830381865afa158015614574573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145989190614f39565b90508360ff168160ff1611156145ac578093505b5050600101614471565b509392505050565b5f546001600160a01b03163314611e9e5760405163118cdaa760e01b8152336004820152602401610ba5565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613cc884856001600160a01b03166323b872dd86868660405160240161418493929190614f54565b6001600160a01b038281165f908152600960205260409020541615614684575050565b806001600160a01b03811615806146ac5750826001600160a01b0316816001600160a01b0316145b156146be57505f546001600160a01b03165b6001600160a01b038381165f90815260096020526040902080546001600160a01b0319169183169182179055156147c8576001600160a01b038181165f908152600a60209081526040822080546001810182559083529082200180546001600160a01b0319169286169290921790915581905b600a8160ff1610801561474c57506001600160a01b03821615155b156147c5576001600160a01b0382165f908152600960205260409020600190600c0160ff8316600a811061478257614782615042565b015f8282546147919190614efc565b90915550506001600160a01b039182165f9081526009602052604090205490911690806147bd81615200565b915050614731565b50505b600160115f8282546147da9190614efc565b9091555050505050565b60ff8381165f818152600f60209081526040808320948716808452948252808320869055838352600e82529182902054825193845290830193909352810183905260608101919091527f0dd13b11b802595586c55b160d3cf7981d7a89b3c2564dbd8d1ba584e00bc25d906080016138d3565b5f5f60205f8451602086015f885af180614876576040513d5f823e3d81fd5b50505f513d9150811561488d57806001141561489a565b6001600160a01b0384163b155b15613cc857604051635274afe760e01b81526001600160a01b0385166004820152602401610ba5565b604051806101400160405280600a906020820280368337509192915050565b604080516101a0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b6001600160a01b0381168114611199575f5ffd5b5f5f60408385031215614972575f5ffd5b823561497d8161494d565b946020939093013593505050565b60ff81168114611199575f5ffd5b5f5f604083850312156149aa575f5ffd5b8235915060208301356149bc8161498b565b809150509250929050565b5f602082840312156149d7575f5ffd5b5035919050565b5f602082840312156149ee575f5ffd5b81356144678161494d565b610140810181835f5b600a811015614a21578151835260209283019290910190600101614a02565b50505092915050565b5f5f60408385031215614a3b575f5ffd5b8235614a468161494d565b915060208301356149bc8161498b565b5f60208284031215614a66575f5ffd5b81356144678161498b565b5f5f83601f840112614a81575f5ffd5b5081356001600160401b03811115614a97575f5ffd5b6020830191508360208260051b8501011115614ab1575f5ffd5b9250929050565b5f5f60208385031215614ac9575f5ffd5b82356001600160401b03811115614ade575f5ffd5b614aea85828601614a71565b90969095509350505050565b5f5f60408385031215614b07575f5ffd5b8235614a468161498b565b5f5f60408385031215614b23575f5ffd5b8235614b2e8161498b565b915060208301356149bc8161494d565b602080825282518282018190525f918401906040840190835b81811015614b75578351835260209384019390920191600101614b57565b509095945050505050565b5f5f5f5f5f5f60808789031215614b95575f5ffd5b8635614ba08161498b565b955060208701356001600160401b03811115614bba575f5ffd5b614bc689828a01614a71565b90965094505060408701356001600160401b03811115614be4575f5ffd5b614bf089828a01614a71565b979a9699509497949695606090950135949350505050565b5f5f60408385031215614c19575f5ffd5b50508035926020909101359150565b61ffff81168114611199575f5ffd5b5f5f60408385031215614c48575f5ffd5b8235915060208301356149bc81614c28565b805160ff1682526020810151614c74602084018215159052565b506040810151614c88604084018215159052565b506060810151614ca360608401826001600160401b03169052565b506080810151614cbe60808401826001600160401b03169052565b5060a0810151614cd660a084018263ffffffff169052565b5060c0810151614cee60c084018263ffffffff169052565b5060e081015160e0830152610100810151610100830152610120810151614d1c61012084018261ffff169052565b50610140810151614d3461014084018261ffff169052565b50610160810151614d516101608401826001600160401b03169052565b5061018090810151910152565b602080825282518282018190525f918401906040840190835b81811015614b7557614d8a838551614c5a565b602093909301926101a09290920191600101614d77565b5f5f60408385031215614db2575f5ffd5b823561497d8161498b565b5f5f60408385031215614dce575f5ffd5b8235614b2e8161494d565b5f5f5f60608486031215614deb575f5ffd5b8335614df681614c28565b92506020840135614e0681614c28565b91506040840135614e1681614c28565b809150509250925092565b6101a08101611bf58284614c5a565b5f60208284031215614e40575f5ffd5b81516144678161494d565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b602080825260079082015266115e1c1a5c995960ca1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611bf557611bf5614e8f565b5f82614ed457634e487b7160e01b5f52601260045260245ffd5b500490565b60ff8181168382160290811690818114614ef557614ef5614e8f565b5092915050565b80820180821115611bf557611bf5614e8f565b61ffff8181168382160190811115611bf557611bf5614e8f565b8051614f348161498b565b919050565b5f60208284031215614f49575f5ffd5b81516144678161498b565b6001600160a01b039384168152919092166020820152604081019190915260600190565b63ffffffff8281168282160390811115611bf557611bf5614e8f565b6020808252600c908201526b4e6f2072656d61696e696e6760a01b604082015260600190565b5f60018201614fcb57614fcb614e8f565b5060010190565b81810381811115611bf557611bf5614e8f565b6001600160401b038181168382160290811690818114614ef557614ef5614e8f565b6001600160401b038181168382160190811115611bf557611bf5614e8f565b63ffffffff8181168382160190811115611bf557611bf5614e8f565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215615066575f5ffd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b6040516101a081016001600160401b03811182821017156150b057634e487b7160e01b5f52604160045260245ffd5b60405290565b80518015158114614f34575f5ffd5b80516001600160401b0381168114614f34575f5ffd5b805163ffffffff81168114614f34575f5ffd5b8051614f3481614c28565b5f6101a082840312801561510b575f5ffd5b50615114615081565b61511d83614f29565b815261512b602084016150b6565b602082015261513c604084016150b6565b604082015261514d606084016150c5565b606082015261515e608084016150c5565b608082015261516f60a084016150db565b60a082015261518060c084016150db565b60c082015260e0838101519082015261010080840151908201526151a761012084016150ee565b6101208201526151ba61014084016150ee565b6101408201526151cd61016084016150c5565b610160820152610180928301519281019290925250919050565b60ff8181168382160190811115611bf557611bf5614e8f565b5f60ff821660ff810361521557615215614e8f565b6001019291505056fea2646970667358221220fd1165db457159139521a292ef4047ce9631c54c89bb761e0be00786e802fe0764736f6c634300081e00330000000000000000000000002fd8158fb9b5a78fa36164c52499e81723d1133a00000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000007e8f636b2da205a734a3b75cd6882b023d8b5cac0000000000000000000000002fd8158fb9b5a78fa36164c52499e81723d1133a0000000000000000000000002fd8158fb9b5a78fa36164c52499e81723d1133a