0 txs
347.4k calls
constructor
No constructor.
functions
bucketshareMaxValues
viewfunction bucketshareMaxValues(uint256) view returns (uint32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deployerAddress
viewfunction deployerAddress() view returns (address)
esXaiAddress
viewfunction esXaiAddress() view returns (address)
failedKyc
viewfunction failedKyc(address) view returns (bool)
getDelegatePools
viewfunction getDelegatePools(address delegate) view returns (address[])
getPoolAddress
viewfunction getPoolAddress(uint256 poolIndex) view returns (address)
getPoolAddressOfUser
viewfunction getPoolAddressOfUser(address user, uint256 index) view returns (address)
getPoolIndicesOfUser
viewfunction getPoolIndicesOfUser(address user) view returns (address[])
getPoolsCount
viewfunction getPoolsCount() view returns (uint256)
getPoolsOfUserCount
viewfunction getPoolsOfUserCount(address user) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getTotalesXaiStakedByUser
viewfunction getTotalesXaiStakedByUser(address user) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
interactedPoolsOfUser
viewfunction interactedPoolsOfUser(address, uint256) view returns (address)
isDelegateOfPoolOrOwner
viewfunction isDelegateOfPoolOrOwner(address delegate, address pool) view returns (bool)
nodeLicenseAddress
viewfunction nodeLicenseAddress() view returns (address)
poolsCreatedViaFactory
viewfunction poolsCreatedViaFactory(address) view returns (bool)
poolsOfDelegate
viewfunction poolsOfDelegate(address, uint256) view returns (address)
poolsOfDelegateIndices
viewfunction poolsOfDelegateIndices(address) view returns (uint256)
refereeAddress
viewfunction refereeAddress() view returns (address)
STAKE_KEYS_ADMIN_ROLE
viewfunction STAKE_KEYS_ADMIN_ROLE() view returns (bytes32)
stakingEnabled
viewfunction stakingEnabled() view returns (bool)
stakingPools
viewfunction stakingPools(uint256) view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
totalEsXaiStakeCalculated
viewfunction totalEsXaiStakeCalculated(address) view returns (bool)
unstakeEsXaiDelayPeriod
viewfunction unstakeEsXaiDelayPeriod() view returns (uint256)
unstakeGenesisKeyDelayPeriod
viewfunction unstakeGenesisKeyDelayPeriod() view returns (uint256)
unstakeKeysDelayPeriod
viewfunction unstakeKeysDelayPeriod() view returns (uint256)
updateRewardBreakdownDelayPeriod
viewfunction updateRewardBreakdownDelayPeriod() view returns (uint256)
userToInteractedPoolIds
viewfunction userToInteractedPoolIds(address, address) view returns (uint256)
validateSubmitPoolAssertion
viewfunction validateSubmitPoolAssertion(address pool, address user) view returns (bool)
xaiVotingAddress
viewfunction xaiVotingAddress() view returns (address)
calculateUserTotalStake
nonpayablefunction calculateUserTotalStake(address[] users)
claimFromPools
nonpayablefunction claimFromPools(address[] pools)
createPool
nonpayablefunction createPool(address _delegateOwner, uint256[] _keyIds, uint32[3] _shareConfig, string[3] _poolMetadata, string[] _poolSocials, string[2][2] trackerDetails)
createUnstakeEsXaiRequest
nonpayablefunction createUnstakeEsXaiRequest(address pool, uint256 amount)
createUnstakeKeyRequest
nonpayablefunction createUnstakeKeyRequest(address pool, uint256 keyAmount)
createUnstakeOwnerLastKeyRequest
nonpayablefunction createUnstakeOwnerLastKeyRequest(address pool)
enableStaking
nonpayablefunction enableStaking()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _xaiVotingAddress)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
revokeStakeKeysAdminRole
nonpayablefunction revokeStakeKeysAdminRole(address account)
setFailedKyc
nonpayablefunction setFailedKyc(address user, bool failed)
stakeEsXai
nonpayablefunction stakeEsXai(address pool, uint256 amount)
stakeKeys
nonpayablefunction stakeKeys(address pool, uint256 keyAmount)
stakeKeysAdmin
nonpayablefunction stakeKeysAdmin(address pool, uint256 keyAmounts, address staker)
transferStakedKeys
nonpayablefunction transferStakedKeys(address from, address to, address pool, uint256 amount)
unstakeEsXai
nonpayablefunction unstakeEsXai(address pool, uint256 unstakeRequestIndex, uint256 amount)
unstakeKeys
nonpayablefunction unstakeKeys(address pool, uint256 unstakeRequestIndex)
updateDelayPeriods
nonpayablefunction updateDelayPeriods(uint256 _unstakeKeysDelayPeriod, uint256 _unstakeGenesisKeyDelayPeriod, uint256 _unstakeEsXaiDelayPeriod, uint256 _updateRewardBreakdownDelayPeriod)
updateDelegateOwner
nonpayablefunction updateDelegateOwner(address pool, address delegate)
updatePoolMetadata
nonpayablefunction updatePoolMetadata(address pool, string[3] _poolMetadata, string[] _poolSocials)
updatePoolProxyDeployer
nonpayablefunction updatePoolProxyDeployer(address newDeployer)
updateShares
nonpayablefunction updateShares(address pool, uint32[3] _shareConfig)
events
ClaimFromPool
event ClaimFromPool(address indexed user, address indexed pool)
Initialized
event Initialized(uint8 version)
OnTransferUpdateError
event OnTransferUpdateError(address indexed from, address indexed to, uint256 amount, string reason)
PoolCreated
event PoolCreated(uint256 indexed poolIndex, address indexed poolAddress, address indexed poolOwner, uint256 stakedKeyCount)
PoolCreatedV2
event PoolCreatedV2(uint256 indexed poolIndex, address indexed poolAddress, address indexed poolOwner, uint256 stakedKeyCount, address delegateAddress, uint256[] keyIds, uint32[3] shareConfig, string[3] poolMetadata, string[] poolSocials)
PoolProxyDeployerUpdated
event PoolProxyDeployerUpdated(address oldDeployer, address newDeployer)
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)
StakeEsXai
event StakeEsXai(address indexed user, address indexed pool, uint256 amount, uint256 totalUserEsXaiStaked, uint256 totalEsXaiStaked)
StakeKeys
event StakeKeys(address indexed user, address indexed pool, uint256 amount, uint256 totalUserKeysStaked, uint256 totalKeysStaked)
StakeKeysV2
event StakeKeysV2(address indexed user, address indexed pool, uint256 amount, uint256 totalUserKeysStaked, uint256 totalKeysStaked, uint256[] keyIds)
StakingEnabled
event StakingEnabled()
UnstakeEsXai
event UnstakeEsXai(address indexed user, address indexed pool, uint256 amount, uint256 totalUserEsXaiStaked, uint256 totalEsXaiStaked)
UnstakeEsXaiV2
event UnstakeEsXaiV2(address indexed user, address indexed pool, uint256 amount, uint256 totalUserEsXaiStaked, uint256 totalEsXaiStaked, uint256 requestIndex)
UnstakeKeys
event UnstakeKeys(address indexed user, address indexed pool, uint256 amount, uint256 totalUserKeysStaked, uint256 totalKeysStaked)
UnstakeKeysV2
event UnstakeKeysV2(address indexed user, address indexed pool, uint256 amount, uint256 totalUserKeysStaked, uint256 totalKeysStaked, uint256 requestIndex, uint256[] keyIds)
UnstakeRequestStarted
event UnstakeRequestStarted(address indexed user, address indexed pool, uint256 indexed index, uint256 amount, bool isKey)
UpdateDelayPeriods
event UpdateDelayPeriods()
UpdateMetadata
event UpdateMetadata(address indexed pool)
UpdateMetadataV2
event UpdateMetadataV2(address indexed pool, string[3] poolMetadata, string[] poolSocials)
UpdatePoolDelegate
event UpdatePoolDelegate(address indexed delegate, address indexed pool)
UpdateShares
event UpdateShares(address indexed pool)
UpdateSharesV2
event UpdateSharesV2(address indexed pool, uint32[3] shareConfig)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b50615b8380620000216000396000f3fe608060405234801561001057600080fd5b50600436106103985760003560e01c806370f69998116101e9578063c3c32a311161010f578063d547741f116100ad578063e7043a1f1161007c578063e7043a1f14610848578063ebffab451461085b578063efdee94f1461087e578063fe407a921461089157600080fd5b8063d547741f146107f2578063da64b6d114610805578063dce307d01461080e578063e22b49dd1461082157600080fd5b8063cf5abf19116100e9578063cf5abf1914610789578063d11aca62146107b4578063d29e7096146107bc578063d4e44335146107df57600080fd5b8063c3c32a3114610750578063c4d66de814610763578063ca15c8731461077657600080fd5b80639010d07c11610187578063a217fddf11610156578063a217fddf1461071a578063a528916d14610722578063b4ac686014610735578063c32a02a61461073d57600080fd5b80639010d07c146106b857806391d14854146106cb5780639634bcf6146106de578063a1884d5d1461070757600080fd5b806378778bb8116101c357806378778bb81461065757806382282d171461066a578063830ebb06146106925780638376f5db146106a557600080fd5b806370f699981461060e578063757105691461062157806376da21be1461063457600080fd5b8063317b4567116102ce57806357b06a8d1161026c57806368da34e61161023b57806368da34e6146105cc5780636a51a6a8146105df5780636b27fd13146105e85780636ff30371146105fb57600080fd5b806357b06a8d1461058a5780635a7b4f2f1461059d5780635aad6cf0146105b05780635eab269b146105c357600080fd5b806336aa3f75116102a857806336aa3f7514610531578063395fbe781461055157806344bd615414610564578063576341981461057757600080fd5b8063317b4567146104f8578063324a3aa11461050b57806336568abe1461051e57600080fd5b80631988a4131161033b578063248a9ca311610315578063248a9ca3146104a65780632ab11265146104c95780632f2ff15d146104d25780632fc73fdf146104e557600080fd5b80631988a4131461045e5780631cfff51b146104715780631e171d231461048557600080fd5b80630d8ccd4f116103775780630d8ccd4f1461040557806316c1e35614610425578063181c498614610438578063198574b11461044b57600080fd5b8062a5ae211461039d57806301ffc9a7146103cd578063098e8ae7146103f0575b600080fd5b6103b06103ab366004614b29565b6108a4565b6040516001600160a01b0390911681526020015b60405180910390f35b6103e06103db366004614b42565b6108d4565b60405190151581526020016103c4565b6104036103fe366004614f8f565b6108ff565b005b61041861041336600461505d565b611055565b6040516103c4919061507a565b60cb546103b0906001600160a01b031681565b6103b06104463660046150c7565b6110cb565b6103b06104593660046150c7565b611103565b60c9546103b0906001600160a01b031681565b60cb546103e090600160a01b900460ff1681565b61049861049336600461505d565b61111f565b6040519081526020016103c4565b6104986104b4366004614b29565b60009081526065602052604090206001015490565b61049860d65481565b6104036104e03660046150f3565b611294565b6104036104f3366004615123565b6112be565b60db546103b0906001600160a01b031681565b610403610519366004615159565b6114e8565b61040361052c3660046150f3565b611a3a565b61049861053f36600461505d565b60d16020526000908152604090205481565b6103e061055f3660046151aa565b611ab8565b6104036105723660046151e6565b611bd4565b610403610585366004615214565b611c0b565b61040361059836600461505d565b611d2b565b6104036105ab3660046150c7565b611d60565b6103b06105be366004614b29565b6121fd565b61049860d45481565b6104036105da3660046152b8565b612227565b61049860d55481565b6104036105f63660046152ed565b612879565b610403610609366004615361565b612ad2565b61040361061c36600461505d565b612bc6565b61040361062f3660046150c7565b612c33565b6103e061064236600461505d565b60d26020526000908152604090205460ff1681565b6104036106653660046153a3565b612def565b61067d610678366004614b29565b612e3e565b60405163ffffffff90911681526020016103c4565b6104036106a03660046151aa565b612e6e565b60ca546103b0906001600160a01b031681565b6103b06106c63660046153d5565b61322a565b6103e06106d93660046150f3565b613242565b6104986106ec36600461505d565b6001600160a01b0316600090815260ce602052604090205490565b6104036107153660046150c7565b61326d565b610498600081565b6104036107303660046150c7565b613367565b60cc54610498565b61040361074b3660046153f7565b613803565b6103e061075e3660046151aa565b6139cf565b61040361077136600461505d565b613abd565b610498610784366004614b29565b613bb1565b6104986107973660046151aa565b60cf60209081526000928352604080842090915290825290205481565b610403613bc8565b6103e06107ca36600461505d565b60d86020526000908152604090205460ff1681565b6104036107ed3660046150c7565b613c12565b6104036108003660046150f3565b613dc6565b61049860d75481565b6103b061081c3660046150c7565b613deb565b6104987f4744ee11e24f5fc5de82fa6dba03b134899d8fd3405c7e9a26e120c89c8d9c2881565b61041861085636600461505d565b613e31565b6103e061086936600461505d565b60d96020526000908152604090205460ff1681565b60d3546103b0906001600160a01b031681565b61040361089f36600461505d565b613ea5565b600060cc82815481106108b9576108b961546c565b6000918252602090912001546001600160a01b031692915050565b60006001600160e01b03198216635a05180f60e01b14806108f957506108f982614023565b92915050565b60cb54600160a01b900460ff166109415760405162461bcd60e51b81526020600482015260016024820152603160f81b60448201526064015b60405180910390fd5b60008551116109765760405162461bcd60e51b81526020600482015260016024820152601960f91b6044820152606401610938565b61097f84614058565b6109af5760405162461bcd60e51b81526020600482015260016024820152603360f81b6044820152606401610938565b336001600160a01b03871614156109ec5760405162461bcd60e51b81526020600482015260016024820152600d60fa1b6044820152606401610938565b60cb54604051636412767d60e11b81523360048201526001600160a01b0390911690819063c824ecfa9060240160206040518083038186803b158015610a3157600080fd5b505afa158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a699190615482565b610a9a5760405162461bcd60e51b8152602060048201526002602482015261333760f01b6044820152606401610938565b33600090815260d8602052604090205460ff1615610aca5760405162461bcd60e51b81526004016109389061549f565b600080600060d360009054906101000a90046001600160a01b03166001600160a01b0316639a06b1136040518163ffffffff1660e01b8152600401606060405180830381600087803b158015610b1f57600080fd5b505af1158015610b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5791906154bb565b60cb5460ca5460405163cc2a9a5b60e01b81526001600160a01b03928316600482015290821660248201523360448201528e82166064820152818416608482015281831660a4820152939650919450925084169063cc2a9a5b9060c401600060405180830381600087803b158015610bce57600080fd5b505af1158015610be2573d6000803e3d6000fd5b5050895160208b01516040808d01519051632a95a59b60e11b815263ffffffff938416600482015291831660248301529190911660448201526001600160a01b038616925063552b4b369150606401600060405180830381600087803b158015610c4b57600080fd5b505af1158015610c5f573d6000803e3d6000fd5b5050604051638bc081eb60e01b81526001600160a01b0386169250638bc081eb9150610c91908a908a906004016155ef565b600060405180830381600087803b158015610cab57600080fd5b505af1158015610cbf573d6000803e3d6000fd5b505060ca54875180516020909101516040516393d2392360e01b81526001600160a01b0388811696506393d239239550610d05948a94911692909160009060040161561d565b600060405180830381600087803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b505060ca5460208089015180519101516040516393d2392360e01b81526001600160a01b0387811696506393d239239550610d7a948a94911692909160129060040161561d565b600060405180830381600087803b158015610d9457600080fd5b505af1158015610da8573d6000803e3d6000fd5b505050506001600160a01b038a1615610e0d576001600160a01b03808b16600090815260d060208181526040808420805495891680865260d1845291852086905592825260018501835591835290912090910180546001600160a01b03191690911790555b60cc805460018082019092557f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe0180546001600160a01b0319166001600160a01b03868116918217909255600081815260d2602052604090819020805460ff191690941790935560ca54925163e43252d760e01b8152600481019190915291169063e43252d790602401600060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505060ca5460405163e43252d760e01b81526001600160a01b038681166004830152909116925063e43252d79150602401600060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b505060ca5460405163e43252d760e01b81526001600160a01b038581166004830152909116925063e43252d79150602401600060405180830381600087803b158015610f6f57600080fd5b505af1158015610f83573d6000803e3d6000fd5b50505050610f95838a513360006140f0565b60cc5433906001600160a01b03851690610fb190600190615684565b7ff756876565d755443228c555dcee8573d6405d9be751ac121eb5e386ed86913a8c51604051610fe391815260200190565b60405180910390a460cc5433906001600160a01b0385169061100790600190615684565b7fbe76579b902b9d14853f5c4b35f4b7a8c46f8ffa21d8eb7dc9c4be7b0db57f538c518e8e8e8e8e604051611041969594939291906156ff565b60405180910390a450505050505050505050565b6001600160a01b038116600090815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156110bf57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110a1575b50505050509050919050565b60ce60205281600052604060002081815481106110e757600080fd5b6000918252602090912001546001600160a01b03169150829050565b60d060205281600052604060002081815481106110e757600080fd5b6001600160a01b038116600090815260d9602052604081205460ff161561115c57506001600160a01b0316600090815260da602052604090205490565b6001600160a01b038216600090815260ce60209081526040808320805482518185028101850190935280835284938301828280156111c357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111a5575b5050505050905060005b815181101561128b578181815181106111e8576111e861546c565b602090810291909101015160405163dbb4006f60e01b81526001600160a01b0387811660048301529091169063dbb4006f9060240160206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d919061576c565b6112779084615785565b9250806112838161579d565b9150506111cd565b50909392505050565b6000828152606560205260409020600101546112af8161444c565b6112b98383614459565b505050565b6001600160a01b038216600090815260d26020526040902054829060ff166112f85760405162461bcd60e51b8152600401610938906157b8565b336001600160a01b0316816001600160a01b03166378c535336040518163ffffffff1660e01b815260040160206040518083038186803b15801561133b57600080fd5b505afa15801561134f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137391906157d4565b6001600160a01b0316146113ad5760405162461bcd60e51b81526020600482015260016024820152601b60f91b6044820152606401610938565b6113b682614058565b6113e65760405162461bcd60e51b81526020600482015260016024820152603760f81b6044820152606401610938565b8151602083015160408085015160d754915163676785bf60e11b815263ffffffff9485166004820152928416602484015292909216604482015260648101919091526001600160a01b0382169063cecf0b7e90608401600060405180830381600087803b15801561145657600080fd5b505af115801561146a573d6000803e3d6000fd5b50506040516001600160a01b03861692507fb993e5f9b42e38925193f2e0d47778ca3879f662ecbfc512c38146b9acb663129150600090a2826001600160a01b03167ffe9a66851c756274a8059946b019b9b3d3b177ff8f0702aaf5499470be1c19f3836040516114db91906157f1565b60405180910390a2505050565b6001600160a01b038216600090815260d2602052604090205460ff166115355760405162461bcd60e51b8152602060048201526002602482015261323360f01b6044820152606401610938565b6001600160a01b038416600090815260d8602052604090205460ff1615801561157757506001600160a01b038316600090815260d8602052604090205460ff16155b6115935760405162461bcd60e51b81526004016109389061549f565b60c9546001600160a01b031633146115d25760405162461bcd60e51b8152602060048201526002602482015261343160f01b6044820152606401610938565b60405163d17e072360e01b815282906001600160a01b0382169063d17e072390611604908890889087906004016157ff565b600060405180830381600087803b15801561161e57600080fd5b505af1158015611632573d6000803e3d6000fd5b50505050611640848461447b565b6040516383eff18560e01b81526001600160a01b0386811660048301528216906383eff1859060240160206040518083038186803b15801561168157600080fd5b505afa158015611695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b99190615482565b6116c7576116c78584614548565b60cb54604051638e67b51f60e01b81526001600160a01b0390911690638e67b51f906116fb908890889087906004016157ff565b600060405180830381600087803b15801561171557600080fd5b505af1158015611729573d6000803e3d6000fd5b505060405163013b00fd60e21b81526001600160a01b03888116600483015260009350841691506304ec03f49060240160206040518083038186803b15801561177157600080fd5b505afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a9919061576c565b60405163013b00fd60e21b81526001600160a01b0387811660048301529192506000918416906304ec03f49060240160206040518083038186803b1580156117f057600080fd5b505afa158015611804573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611828919061576c565b90506000836001600160a01b0316637def5d6f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561186557600080fd5b505afa158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d919061576c565b60408051878152602081018690529081018290529091506001600160a01b0380881691908a16907f35e7892ec1f92e336fc888fdecf95a6fbbc6fc90be38ada00db3852e617efcd69060600160405180910390a36001600160a01b038087169089167f76edda783672c8a2742c899efcd961fb1e5c0a6fe290676ebe1264f0e4c8e9d487868560008060405190808252806020026020018201604052801561194f578160200160208202803683370190505b50604051611961959493929190615823565b60405180910390a360408051868152602081018490529081018290526001600160a01b0380881691908916907f357affaae030885f07351ec7a67de6fdf9ec6e31c8bf4ad70cbc17d3d95dd3dc9060600160405180910390a36001600160a01b038087169088167fc3b51ee987a0c0c4105af13521f1dcaafa141fb9a2c53253797cc49a1ff069b18785856000604051908082528060200260200182016040528015611a17578160200160208202803683370190505b50604051611a28949392919061584e565b60405180910390a35050505050505050565b6001600160a01b0381163314611aaa5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610938565b611ab48282614668565b5050565b6001600160a01b03808216600090815260d16020908152604080832054938616835260d09091528120549091108015611b4157506001600160a01b03838116600090815260d06020908152604080832093861680845260d19092529091205482549192918110611b2a57611b2a61546c565b6000918252602090912001546001600160a01b0316145b80611bcd5750826001600160a01b0316826001600160a01b03166378c535336040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8a57600080fd5b505afa158015611b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc291906157d4565b6001600160a01b0316145b9392505050565b6000611bdf8161444c565b506001600160a01b0391909116600090815260d860205260409020805460ff1916911515919091179055565b805160005b818110156112b9576000838281518110611c2c57611c2c61546c565b6020908102919091018101516001600160a01b038116600090815260d290925260409091205490915060ff16611c895760405162461bcd60e51b8152602060048201526002602482015261333360f01b6044820152606401610938565b604051633bd73ee360e21b81523360048201526001600160a01b0382169063ef5cfb8c90602401600060405180830381600087803b158015611cca57600080fd5b505af1158015611cde573d6000803e3d6000fd5b50506040516001600160a01b03841692503391507f4606d04fcafeb2f803dd9893b2f6e076ea1093fe6c66d881ad52bf54253fabde90600090a35080611d238161579d565b915050611c10565b6000611d368161444c565b611ab47f4744ee11e24f5fc5de82fa6dba03b134899d8fd3405c7e9a26e120c89c8d9c2883613dc6565b6001600160a01b038216600090815260d2602052604090205460ff16611dad5760405162461bcd60e51b8152602060048201526002602482015261323360f01b6044820152606401610938565b604051632573625760e11b81523360048201526024810182905282906000906001600160a01b03831690634ae6c4ae906044016101406040518083038186803b158015611df957600080fd5b505afa158015611e0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e31919061587d565b604051635a7b4f2f60e01b8152336004820152602481018590529091506001600160a01b03831690635a7b4f2f90604401600060405180830381600087803b158015611e7c57600080fd5b505af1158015611e90573d6000803e3d6000fd5b505060cb546040808501519051634a89a58f60e11b81526001600160a01b0390921693506395134b1e9250611ecb91889133916004016157ff565b600060405180830381600087803b158015611ee557600080fd5b505af1158015611ef9573d6000803e3d6000fd5b50506040516383eff18560e01b81523360048201526001600160a01b03851692506383eff185915060240160206040518083038186803b158015611f3c57600080fd5b505afa158015611f50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f749190615482565b611f8257611f823385614548565b604080820151905163013b00fd60e21b815233600482018190526001600160a01b038088169391927f35e7892ec1f92e336fc888fdecf95a6fbbc6fc90be38ada00db3852e617efcd692918716906304ec03f49060240160206040518083038186803b158015611ff157600080fd5b505afa158015612005573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612029919061576c565b866001600160a01b0316637def5d6f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561206257600080fd5b505afa158015612076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209a919061576c565b6040805193845260208401929092529082015260600160405180910390a3604080820151905163013b00fd60e21b815233600482018190526001600160a01b038088169391927f76edda783672c8a2742c899efcd961fb1e5c0a6fe290676ebe1264f0e4c8e9d492918716906304ec03f49060240160206040518083038186803b15801561212757600080fd5b505afa15801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f919061576c565b866001600160a01b0316637def5d6f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561219857600080fd5b505afa1580156121ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d0919061576c565b604080516000815260208101918290526121ef949392918b9190615823565b60405180910390a350505050565b60cc818154811061220d57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038316600090815260d2602052604090205460ff166122745760405162461bcd60e51b8152602060048201526002602482015261064760f31b6044820152606401610938565b60405163346d1a7360e11b8152336004820152602481018390526044810182905283906001600160a01b038216906368da34e690606401600060405180830381600087803b1580156122c557600080fd5b505af11580156122d9573d6000803e3d6000fd5b50506040516383eff18560e01b81523360048201526001600160a01b03841692506383eff185915060240160206040518083038186803b15801561231c57600080fd5b505afa158015612330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123549190615482565b612362576123623385614548565b60cb546040516377f0a5a560e11b81526001600160a01b038681166004830152602482018590529091169063efe14b4a90604401600060405180830381600087803b1580156123b057600080fd5b505af11580156123c4573d6000803e3d6000fd5b505060ca5460405163a9059cbb60e01b8152336004820152602481018690526001600160a01b03909116925063a9059cbb9150604401602060405180830381600087803b15801561241457600080fd5b505af1158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c9190615482565b5033600090815260d9602052604090205460ff166124b35733600090815260ce602052604090205460968110156124ad576124863361111f565b33600090815260da602090815260408083209390935560d9905220805460ff191660011790555b506124d8565b33600090815260da6020526040812080548492906124d2908490615684565b90915550505b60405163dbb4006f60e01b815233600482018190526001600160a01b03808716927f6b8b9f70b9cdc3b11cb9cb7d50716571e39f5422ac41f0e8c1379a806bfe8ca49186919086169063dbb4006f9060240160206040518083038186803b15801561254257600080fd5b505afa158015612556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257a919061576c565b60cb546040516310c1c10360e01b81526001600160a01b038b81166004830152909116906310c1c1039060240160206040518083038186803b1580156125bf57600080fd5b505afa1580156125d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f7919061576c565b6040805193845260208401929092529082015260600160405180910390a360405163dbb4006f60e01b815233600482018190526001600160a01b03808716927f3dec424faaae7462d3f35aa48b1a60f04ad2637aace9fdac1eba09a34c888a369186919086169063dbb4006f9060240160206040518083038186803b15801561267f57600080fd5b505afa158015612693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b7919061576c565b60cb546040516310c1c10360e01b81526001600160a01b038b81166004830152909116906310c1c1039060240160206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612734919061576c565b604080519384526020840192909252908201526060810187905260800160405180910390a360db54604051633116206360e01b81526001600160a01b039091169063311620639061278e90339060009087906004016157ff565b600060405180830381600087803b1580156127a857600080fd5b505af19250505080156127b9575060015b612873576127c5615936565b806308c379a0141561281857506127da615952565b806127e5575061281a565b6040516000903390600080516020615b2e8339815191529061280a90879086906159d0565b60405180910390a350612873565b505b6040516000903390600080516020615b2e833981519152906121ef9086815260406020808301829052908201527f556e6b6e6f776e206572726f7220696e206f6e55706461746542616c616e6365606082015260800190565b50505050565b60005b818110156112b95760d9600084848481811061289a5761289a61546c565b90506020020160208101906128af919061505d565b6001600160a01b0316815260208101919091526040016000205460ff16156128d657612ac0565b60008060ce60008686868181106128ef576128ef61546c565b9050602002016020810190612904919061505d565b6001600160a01b03168152602081019190915260400160009081208054909250905b81811015612a16578281815481106129405761294061546c565b6000918252602090912001546001600160a01b031663dbb4006f88888881811061296c5761296c61546c565b9050602002016020810190612981919061505d565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156129c057600080fd5b505afa1580156129d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f8919061576c565b612a029085615785565b935080612a0e8161579d565b915050612926565b508260da6000888888818110612a2e57612a2e61546c565b9050602002016020810190612a43919061505d565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160d96000888888818110612a7f57612a7f61546c565b9050602002016020810190612a94919061505d565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555050505b80612aca8161579d565b91505061287c565b7f4744ee11e24f5fc5de82fa6dba03b134899d8fd3405c7e9a26e120c89c8d9c28612afc8161444c565b6001600160a01b038416612b375760405162461bcd60e51b8152602060048201526002602482015261031360f41b6044820152606401610938565b60008311612b6c5760405162461bcd60e51b8152602060048201526002602482015261313160f01b6044820152606401610938565b6001600160a01b038416600090815260d2602052604090205460ff16612bb95760405162461bcd60e51b8152602060048201526002602482015261189960f11b6044820152606401610938565b61287384848460016140f0565b6000612bd18161444c565b60d380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527f4753011200299025ae2f6968ecee4649a62f438b75f0cfa8ddd612558067feb6910160405180910390a1505050565b60008111612c685760405162461bcd60e51b8152602060048201526002602482015261032360f41b6044820152606401610938565b6001600160a01b038216600090815260d2602052604090205460ff16612cb55760405162461bcd60e51b8152602060048201526002602482015261191960f11b6044820152606401610938565b60d654604051630ef6129560e01b81523360048201526024810183905260448101919091526001600160a01b03831690630ef6129590606401600060405180830381600087803b158015612d0857600080fd5b505af1158015612d1c573d6000803e3d6000fd5b505060405163ed60c17160e01b8152336004820152600192506001600160a01b038516915063ed60c1719060240160206040518083038186803b158015612d6257600080fd5b505afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a919061576c565b612da49190615684565b60408051838152600060208201526001600160a01b0385169133917fbc1e9bc04e1db1d16d4b6eed9898d8236686425351f60b32762c6541d09750bb91015b60405180910390a45050565b6000612dfa8161444c565b60d485905560d584905560d683905560d78290556040517f80b68981b098c1ccdcea8c09a58f7acc2edf6e8791ffeef6dbf8f764821dfd1290600090a15050505050565b60cd8160038110612e4e57600080fd5b60089182820401919006600402915054906101000a900463ffffffff1681565b6001600160a01b038216600090815260d26020526040902054829060ff16612ebd5760405162461bcd60e51b81526020600482015260026024820152610ccd60f21b6044820152606401610938565b336001600160a01b0316816001600160a01b03166378c535336040518163ffffffff1660e01b815260040160206040518083038186803b158015612f0057600080fd5b505afa158015612f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3891906157d4565b6001600160a01b031614612f725760405162461bcd60e51b81526020600482015260016024820152600760fb1b6044820152606401610938565b336001600160a01b0383161415612faf5760405162461bcd60e51b81526020600482015260016024820152603960f81b6044820152606401610938565b6000816001600160a01b031663d9066f2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612fea57600080fd5b505afa158015612ffe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302291906157d4565b90506001600160a01b03811615613130576001600160a01b03808516600090815260d16020908152604080832054938516835260d09091528120805461306a90600190615684565b8154811061307a5761307a61546c565b60009182526020808320909101546001600160a01b0390811680845260d183526040808520879055918716845260d090925290912080549192508291849081106130c6576130c661546c565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918516815260d09091526040902080548061310b5761310b6159f1565b600082815260209020810160001990810180546001600160a01b031916905501905550505b6001600160a01b03831615613191576001600160a01b03808416600090815260d0602081815260408084208054958a1680865260d1845291852086905592825260018501835591835290912090910180546001600160a01b03191690911790555b604051633a3319fb60e01b81526001600160a01b038481166004830152831690633a3319fb90602401600060405180830381600087803b1580156131d457600080fd5b505af11580156131e8573d6000803e3d6000fd5b50506040516001600160a01b038088169350861691507f50fdd3cf8ddc7abe0a7e847e150dc792812ba201432dec3678f7df7bd769a60e90600090a350505050565b6000828152609760205260408120611bcd908361468a565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6001600160a01b0382166132a85760405162461bcd60e51b8152602060048201526002602482015261031360f41b6044820152606401610938565b600081116132dd5760405162461bcd60e51b8152602060048201526002602482015261313160f01b6044820152606401610938565b6001600160a01b038216600090815260d2602052604090205460ff1661332a5760405162461bcd60e51b8152602060048201526002602482015261189960f11b6044820152606401610938565b33600090815260d8602052604090205460ff161561335a5760405162461bcd60e51b81526004016109389061549f565b611ab482823360006140f0565b6001600160a01b038216600090815260d2602052604090205460ff166133b45760405162461bcd60e51b8152602060048201526002602482015261323760f01b6044820152606401610938565b33600090815260d8602052604090205460ff16156133e45760405162461bcd60e51b81526004016109389061549f565b60cb5460405163a528916d60e01b81526001600160a01b038481166004830152602482018490529091169063a528916d90604401600060405180830381600087803b15801561343257600080fd5b505af1158015613446573d6000803e3d6000fd5b505060ca546040516323b872dd60e01b81526001600160a01b0390911692506323b872dd915061347e903390309086906004016157ff565b602060405180830381600087803b15801561349857600080fd5b505af11580156134ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d09190615482565b5060405163a528916d60e01b81523360048201526024810182905282906001600160a01b0382169063a528916d90604401600060405180830381600087803b15801561351b57600080fd5b505af115801561352f573d6000803e3d6000fd5b5050505061353d338461447b565b33600090815260d9602052604090205460ff166135885761355d3361111f565b33600090815260da602090815260408083209390935560d9905220805460ff191660011790556135ad565b33600090815260da6020526040812080548492906135a7908490615785565b90915550505b60405163dbb4006f60e01b815233600482018190526001600160a01b03808616927fba4eb27ba9f5314c056b6107c5f272b449eda74ff9e34c2e2127011b2959ab529186919086169063dbb4006f9060240160206040518083038186803b15801561361757600080fd5b505afa15801561362b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364f919061576c565b60cb546040516310c1c10360e01b81526001600160a01b038a81166004830152909116906310c1c1039060240160206040518083038186803b15801561369457600080fd5b505afa1580156136a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cc919061576c565b6040805193845260208401929092529082015260600160405180910390a360db54604051633116206360e01b81526001600160a01b039091169063311620639061371f90600090339087906004016157ff565b600060405180830381600087803b15801561373957600080fd5b505af192505050801561374a575060015b6112b957613756615936565b806308c379a0141561379b575061376b615952565b80613776575061379d565b6040513390600090600080516020615b2e833981519152906121ef90879086906159d0565b505b6040513390600090600080516020615b2e833981519152906137f69086815260406020808301829052908201527f556e6b6e6f776e206572726f7220696e206f6e55706461746542616c616e6365606082015260800190565b60405180910390a3505050565b6001600160a01b038316600090815260d26020526040902054839060ff1661383d5760405162461bcd60e51b8152600401610938906157b8565b336001600160a01b0316816001600160a01b03166378c535336040518163ffffffff1660e01b815260040160206040518083038186803b15801561388057600080fd5b505afa158015613894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b891906157d4565b6001600160a01b0316146138f25760405162461bcd60e51b81526020600482015260016024820152603560f81b6044820152606401610938565b604051638bc081eb60e01b81526001600160a01b03821690638bc081eb9061392090869086906004016155ef565b600060405180830381600087803b15801561393a57600080fd5b505af115801561394e573d6000803e3d6000fd5b50506040516001600160a01b03871692507f612b4a0ec3bfbdd25693b910d37ba25479c0c724b7f1c2e0ee11ac91bcd2fe3a9150600090a2836001600160a01b03167faf199314eb37d116767e32b31c022a7f259a8180f8d5f654a7cd5c535ad61df284846040516139c19291906155ef565b60405180910390a250505050565b6001600160a01b038216600090815260d2602052604081205460ff16613a075760405162461bcd60e51b8152600401610938906157b8565b604051636ede3d2d60e01b81526001600160a01b0383811660048301526000918291861690636ede3d2d9060240160a06040518083038186803b158015613a4d57600080fd5b505afa158015613a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a859190615a07565b50509250509150613a968486611ab8565b613ab2576000821180613aa95750600081115b925050506108f9565b506001949350505050565b600054600390610100900460ff16158015613adf575060005460ff8083169116105b613b425760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610938565b6000805460db80546001600160a01b0319166001600160a01b03861617905561ff001961010060ff851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60008181526097602052604081206108f990614696565b6000613bd38161444c565b60cb805460ff60a01b1916600160a01b1790556040517fda917aeab736a19e4ba54207413dbe4f8c7d558fde2c14d7e66fc8f7186ea8a390600090a150565b60008111613c475760405162461bcd60e51b8152602060048201526002602482015261313360f01b6044820152606401610938565b6001600160a01b038216600090815260d2602052604090205460ff16613c945760405162461bcd60e51b81526020600482015260026024820152610c4d60f21b6044820152606401610938565b60d45460405163464a23b360e11b81523360048201526024810183905260448101919091526001600160a01b03831690638c94476690606401600060405180830381600087803b158015613ce757600080fd5b505af1158015613cfb573d6000803e3d6000fd5b505060405163ed60c17160e01b8152336004820152600192506001600160a01b038516915063ed60c1719060240160206040518083038186803b158015613d4157600080fd5b505afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d79919061576c565b613d839190615684565b60408051838152600160208201526001600160a01b0385169133917fbc1e9bc04e1db1d16d4b6eed9898d8236686425351f60b32762c6541d09750bb9101612de3565b600082815260656020526040902060010154613de18161444c565b6112b98383614668565b6001600160a01b038216600090815260ce60205260408120805483908110613e1557613e1561546c565b6000918252602090912001546001600160a01b03169392505050565b6001600160a01b038116600090815260d060209081526040918290208054835181840281018401909452808452606093928301828280156110bf576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116110a15750505050509050919050565b6001600160a01b038116600090815260d2602052604090205460ff16613ef25760405162461bcd60e51b8152602060048201526002602482015261062760f31b6044820152606401610938565b60d5546040516333d599a160e21b815233600482015260248101919091526001600160a01b0382169063cf56668490604401600060405180830381600087803b158015613f3e57600080fd5b505af1158015613f52573d6000803e3d6000fd5b505060405163ed60c17160e01b8152336004820152600192506001600160a01b038416915063ed60c1719060240160206040518083038186803b158015613f9857600080fd5b505afa158015613fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fd0919061576c565b613fda9190615684565b60408051600180825260208201526001600160a01b0384169133917fbc1e9bc04e1db1d16d4b6eed9898d8236686425351f60b32762c6541d09750bb910160405180910390a450565b60006001600160e01b03198216637965db0b60e01b14806108f957506301ffc9a760e01b6001600160e01b03198316146108f9565b60cd54815160009163ffffffff908116911611801590614090575060cd54602083015163ffffffff6401000000009092048216911611155b80156140b8575060cd54604083015163ffffffff680100000000000000009092048216911611155b80156108f957506040820151602083015183516140d59190615a47565b6140df9190615a47565b63ffffffff16620f42401492915050565b60cb5460405163391b2fdd60e21b81526001600160a01b038681166004830152848116602483015260448201869052831515606483015290911690819063e46cbf7490608401600060405180830381600087803b15801561415057600080fd5b505af1158015614164573d6000803e3d6000fd5b505060405163a1884d5d60e01b81526001600160a01b038681166004830152602482018890528893508316915063a1884d5d90604401600060405180830381600087803b1580156141b457600080fd5b505af11580156141c8573d6000803e3d6000fd5b505050506141d6848761447b565b60405163013b00fd60e21b81526001600160a01b03858116600483018190528189169290917f357affaae030885f07351ec7a67de6fdf9ec6e31c8bf4ad70cbc17d3d95dd3dc9189918616906304ec03f49060240160206040518083038186803b15801561424357600080fd5b505afa158015614257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427b919061576c565b856001600160a01b0316637def5d6f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156142b457600080fd5b505afa1580156142c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ec919061576c565b6040805193845260208401929092529082015260600160405180910390a360405163013b00fd60e21b81526001600160a01b03858116600483018190528189169290917fc3b51ee987a0c0c4105af13521f1dcaafa141fb9a2c53253797cc49a1ff069b19189918616906304ec03f49060240160206040518083038186803b15801561437757600080fd5b505afa15801561438b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143af919061576c565b856001600160a01b0316637def5d6f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156143e857600080fd5b505afa1580156143fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614420919061576c565b6040805160008152602081019182905261443c9493929161584e565b60405180910390a3505050505050565b61445681336146a0565b50565b61446382826146f9565b60008281526097602052604090206112b9908261477f565b6001600160a01b038216600090815260ce602052604090208054600111806144f357506001600160a01b03808416600090815260cf6020908152604080832093861683529290522054815482919081106144d7576144d761546c565b6000918252602090912001546001600160a01b03838116911614155b156112b95780546001600160a01b03808516600090815260cf602090815260408083209387168084529382528220849055600184018555848252902090910180546001600160a01b0319169091179055505050565b6001600160a01b03808316600081815260cf6020908152604080832094861683529381528382205492825260ce9052918220805491929061458a600184615684565b8154811061459a5761459a61546c565b60009182526020808320909101546001600160a01b03888116845260ce90925260409092208054919092169250829190859081106145da576145da61546c565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905587831680835260cf82526040808420868616855283528084208890559388168352838320839055825260ce90522080548061463f5761463f6159f1565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6146728282614794565b60008281526097602052604090206112b990826147fb565b6000611bcd8383614810565b60006108f9825490565b6146aa8282613242565b611ab4576146b78161483a565b6146c283602061484c565b6040516020016146d3929190615a6f565b60408051601f198184030181529082905262461bcd60e51b825261093891600401615ae4565b6147038282613242565b611ab45760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561473b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611bcd836001600160a01b0384166149e7565b61479e8282613242565b15611ab45760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611bcd836001600160a01b038416614a36565b60008260000182815481106148275761482761546c565b9060005260206000200154905092915050565b60606108f96001600160a01b03831660145b6060600061485b836002615af7565b614866906002615785565b6001600160401b0381111561487d5761487d614b91565b6040519080825280601f01601f1916602001820160405280156148a7576020820181803683370190505b509050600360fc1b816000815181106148c2576148c261546c565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106148f1576148f161546c565b60200101906001600160f81b031916908160001a9053506000614915846002615af7565b614920906001615785565b90505b6001811115614998576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106149545761495461546c565b1a60f81b82828151811061496a5761496a61546c565b60200101906001600160f81b031916908160001a90535060049490941c9361499181615b16565b9050614923565b508315611bcd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610938565b6000818152600183016020526040812054614a2e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108f9565b5060006108f9565b60008181526001830160205260408120548015614b1f576000614a5a600183615684565b8554909150600090614a6e90600190615684565b9050818114614ad3576000866000018281548110614a8e57614a8e61546c565b9060005260206000200154905080876000018481548110614ab157614ab161546c565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ae457614ae46159f1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108f9565b60009150506108f9565b600060208284031215614b3b57600080fd5b5035919050565b600060208284031215614b5457600080fd5b81356001600160e01b031981168114611bcd57600080fd5b6001600160a01b038116811461445657600080fd5b8035614b8c81614b6c565b919050565b634e487b7160e01b600052604160045260246000fd5b60c081018181106001600160401b0382111715614bc657614bc6614b91565b60405250565b606081018181106001600160401b0382111715614bc657614bc6614b91565b604081018181106001600160401b0382111715614bc657614bc6614b91565b60a081018181106001600160401b0382111715614bc657614bc6614b91565b601f8201601f191681016001600160401b0381118282101715614c4e57614c4e614b91565b6040525050565b60006001600160401b03821115614c6e57614c6e614b91565b5060051b60200190565b600082601f830112614c8957600080fd5b81356020614c9682614c55565b604051614ca38282614c29565b83815260059390931b8501820192828101915086841115614cc357600080fd5b8286015b84811015614cde5780358352918301918301614cc7565b509695505050505050565b600082601f830112614cfa57600080fd5b604051614d0681614bcc565b806060840185811115614d1857600080fd5b845b81811015614d4557803563ffffffff81168114614d375760008081fd5b835260209283019201614d1a565b509195945050505050565b600082601f830112614d6157600080fd5b81356001600160401b03811115614d7a57614d7a614b91565b604051614d91601f8301601f191660200182614c29565b818152846020838601011115614da657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112614dd457600080fd5b604051614de081614bcc565b806060840185811115614df257600080fd5b845b81811015614d455780356001600160401b03811115614e135760008081fd5b614e1f88828901614d50565b84525060209283019201614df4565b600082601f830112614e3f57600080fd5b81356020614e4c82614c55565b604051614e598282614c29565b83815260059390931b8501820192828101915086841115614e7957600080fd5b8286015b84811015614cde5780356001600160401b03811115614e9c5760008081fd5b614eaa8986838b0101614d50565b845250918301918301614e7d565b600082601f830112614ec957600080fd5b60408051614ed681614beb565b8082850186811115614ee757600080fd5b855b81811015614f835780356001600160401b0380821115614f095760008081fd5b818901915089601f830112614f1e5760008081fd5b8651614f2981614beb565b808884018c811115614f3b5760008081fd5b845b81811015614f7057803585811115614f555760008081fd5b614f618f828901614d50565b84525060209283019201614f3d565b5050508552505060209283019201614ee9565b50919695505050505050565b6000806000806000806101008789031215614fa957600080fd5b614fb287614b81565b955060208701356001600160401b0380821115614fce57600080fd5b614fda8a838b01614c78565b9650614fe98a60408b01614ce9565b955060a0890135915080821115614fff57600080fd5b61500b8a838b01614dc3565b945060c089013591508082111561502157600080fd5b61502d8a838b01614e2e565b935060e089013591508082111561504357600080fd5b5061505089828a01614eb8565b9150509295509295509295565b60006020828403121561506f57600080fd5b8135611bcd81614b6c565b6020808252825182820181905260009190848201906040850190845b818110156150bb5783516001600160a01b031683529284019291840191600101615096565b50909695505050505050565b600080604083850312156150da57600080fd5b82356150e581614b6c565b946020939093013593505050565b6000806040838503121561510657600080fd5b82359150602083013561511881614b6c565b809150509250929050565b6000806080838503121561513657600080fd5b823561514181614b6c565b91506151508460208501614ce9565b90509250929050565b6000806000806080858703121561516f57600080fd5b843561517a81614b6c565b9350602085013561518a81614b6c565b9250604085013561519a81614b6c565b9396929550929360600135925050565b600080604083850312156151bd57600080fd5b82356151c881614b6c565b9150602083013561511881614b6c565b801515811461445657600080fd5b600080604083850312156151f957600080fd5b823561520481614b6c565b91506020830135615118816151d8565b6000602080838503121561522757600080fd5b82356001600160401b0381111561523d57600080fd5b8301601f8101851361524e57600080fd5b803561525981614c55565b6040516152668282614c29565b82815260059290921b830184019184810191508783111561528657600080fd5b928401925b828410156152ad57833561529e81614b6c565b8252928401929084019061528b565b979650505050505050565b6000806000606084860312156152cd57600080fd5b83356152d881614b6c565b95602085013595506040909401359392505050565b6000806020838503121561530057600080fd5b82356001600160401b038082111561531757600080fd5b818501915085601f83011261532b57600080fd5b81358181111561533a57600080fd5b8660208260051b850101111561534f57600080fd5b60209290920196919550909350505050565b60008060006060848603121561537657600080fd5b833561538181614b6c565b925060208401359150604084013561539881614b6c565b809150509250925092565b600080600080608085870312156153b957600080fd5b5050823594602084013594506040840135936060013592509050565b600080604083850312156153e857600080fd5b50508035926020909101359150565b60008060006060848603121561540c57600080fd5b833561541781614b6c565b925060208401356001600160401b038082111561543357600080fd5b61543f87838801614dc3565b9350604086013591508082111561545557600080fd5b5061546286828701614e2e565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561549457600080fd5b8151611bcd816151d8565b602080825260029082015261066760f31b604082015260600190565b6000806000606084860312156154d057600080fd5b83516154db81614b6c565b60208501519093506154ec81614b6c565b604085015190925061539881614b6c565b60005b83811015615518578181015183820152602001615500565b838111156128735750506000910152565b600081518084526155418160208601602086016154fd565b601f01601f19169290920160200192915050565b600082606081018360005b600381101561558f578383038752615579838351615529565b6020978801979093509190910190600101615560565b509095945050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156155e25782840389526155d0848351615529565b988501989350908401906001016155b8565b5091979650505050505050565b6040815260006156026040830185615555565b8281036020840152615614818561559a565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061564990830186615529565b828103606084015261565b8186615529565b9150508260808301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156156965761569661566e565b500390565b600081518084526020808501945080840160005b838110156156cb578151875295820195908201906001016156af565b509495945050505050565b8060005b600381101561287357815163ffffffff168452602093840193909101906001016156da565b8681526001600160a01b03861660208201526101006040820181905260009061572a8382018861569b565b905061573960608401876156d6565b82810360c084015261574b8186615555565b905082810360e084015261575f818561559a565b9998505050505050505050565b60006020828403121561577e57600080fd5b5051919050565b600082198211156157985761579861566e565b500190565b60006000198214156157b1576157b161566e565b5060010190565b602080825260029082015261333560f01b604082015260600190565b6000602082840312156157e657600080fd5b8151611bcd81614b6c565b606081016108f982846156d6565b6001600160a01b039384168152919092166020820152604081019190915260600190565b85815284602082015283604082015282606082015260a0608082015260006152ad60a083018461569b565b848152836020820152826040820152608060608201526000615873608083018461569b565b9695505050505050565b600061014080838503121561589157600080fd5b60405161589d81614ba7565b83516158a8816151d8565b81526020848101516158b9816151d8565b8082840152506040850151604083015260608501516060830152608085015160808301528560bf8601126158ec57600080fd5b6040516158f881614c0a565b92850192808785111561590a57600080fd5b60a087015b85811015615926578051825290830190830161590f565b505060a083015250949350505050565b600060033d111561594f5760046000803e5060005160e01c5b90565b600060443d10156159605790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561598f57505050505090565b82850191508151818111156159a75750505050505090565b843d87010160208285010111156159c15750505050505090565b61558f60208286010187614c29565b8281526040602082015260006159e96040830184615529565b949350505050565b634e487b7160e01b600052603160045260246000fd5b600080600080600060a08688031215615a1f57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b600063ffffffff808316818516808303821115615a6657615a6661566e565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351615aa78160178501602088016154fd565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615ad88160288401602088016154fd565b01602801949350505050565b602081526000611bcd6020830184615529565b6000816000190483118215151615615b1157615b1161566e565b500290565b600081615b2557615b2561566e565b50600019019056fe5b97b6c6a9457523c675b83c949ce5392e2bedb1efaec841304cca5d6b6650c4a2646970667358221220b286c13bdeacffebba0b46fa3fd680ff1897a23700f7edc0928dc4013811475764736f6c63430008090033