0 txs
33 calls
constructor
constructor((address evc, address balanceTracker, address permit2, bool isHarvestCoolDownCheckOn) _integrationsParams, (address eulerEarnVaultModule, address rewardsModule, address hooksModule, address feeModule, address strategyModule, address withdrawalQueueModule) _deploymentParams)
functions
allowance
viewfunction allowance(address _owner, address _spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
balanceForwarderEnabled
viewfunction balanceForwarderEnabled(address _account) view returns (bool)
balanceOf
viewfunction balanceOf(address _account) view returns (uint256)
balanceTrackerAddress
viewfunction balanceTrackerAddress() view returns (address)
checkpoints
viewfunction checkpoints(address _account, uint32 _pos) view returns (tuple)
CLOCK_MODE
viewfunction CLOCK_MODE() view returns (string)
clock
viewfunction clock() view returns (uint48)
convertToAssets
viewfunction convertToAssets(uint256 _shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 _assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
delegates
viewfunction delegates(address _account) view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
eulerEarnVaultModule
viewfunction eulerEarnVaultModule() view returns (address)
EVC
viewfunction EVC() view returns (address)
feeModule
viewfunction feeModule() view returns (address)
getEulerEarnSavingRate
viewfunction getEulerEarnSavingRate() view returns (uint40, uint40, uint168)
getHooksConfig
viewfunction getHooksConfig() view returns (address, uint32)
getPastTotalSupply
viewfunction getPastTotalSupply(uint256 _timepoint) view returns (uint256)
getPastVotes
viewfunction getPastVotes(address _account, uint256 _timepoint) 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)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
getStrategy
viewfunction getStrategy(address _strategy) view returns (tuple)
getVotes
viewfunction getVotes(address _account) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hooksModule
viewfunction hooksModule() view returns (address)
interestAccrued
viewfunction interestAccrued() view returns (uint256)
interestSmearingPeriod
viewfunction interestSmearingPeriod() view returns (uint256)
isCheckingHarvestCoolDown
viewfunction isCheckingHarvestCoolDown() view returns (bool)
lastHarvestTimestamp
viewfunction lastHarvestTimestamp() view returns (uint256)
maxDeposit
viewfunction maxDeposit(address _owner) view returns (uint256)
maxMint
viewfunction maxMint(address _owner) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address _owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address _owner) view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
numCheckpoints
viewfunction numCheckpoints(address _account) view returns (uint32)
performanceFeeConfig
viewfunction performanceFeeConfig() view returns (address, uint96)
permit2Address
viewfunction permit2Address() view returns (address)
previewDeposit
viewfunction previewDeposit(uint256 _assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 _shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 _shares) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 _assets) view returns (uint256)
rewardsModule
viewfunction rewardsModule() view returns (address)
strategyModule
viewfunction strategyModule() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalAllocated
viewfunction totalAllocated() view returns (uint256)
totalAllocationPoints
viewfunction totalAllocationPoints() view returns (uint256)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalAssetsAllocatable
viewfunction totalAssetsAllocatable() view returns (uint256)
totalAssetsDeposited
viewfunction totalAssetsDeposited() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
withdrawalQueue
viewfunction withdrawalQueue() view returns (address[])
withdrawalQueueModule
viewfunction withdrawalQueueModule() view returns (address)
addStrategy
nonpayablefunction addStrategy(address _strategy, uint256 _allocationPoints)
adjustAllocationPoints
nonpayablefunction adjustAllocationPoints(address _strategy, uint256 _newPoints)
approve
nonpayablefunction approve(address _spender, uint256 _value) returns (bool)
claimStrategyReward
nonpayablefunction claimStrategyReward(address _strategy, address _reward, address _recipient, bool _forfeitRecentReward)
delegate
nonpayablefunction delegate(address _delegatee)
delegateBySig
nonpayablefunction delegateBySig(address _delegatee, uint256 _nonce, uint256 _expiry, uint8 _v, bytes32 _r, bytes32 _s)
deposit
nonpayablefunction deposit(uint256 _assets, address _receiver) returns (uint256)
disableBalanceForwarder
nonpayablefunction disableBalanceForwarder()
disableRewardForStrategy
nonpayablefunction disableRewardForStrategy(address _strategy, address _reward, bool _forfeitRecentReward)
enableBalanceForwarder
nonpayablefunction enableBalanceForwarder()
enableRewardForStrategy
nonpayablefunction enableRewardForStrategy(address _strategy, address _reward)
grantRole
nonpayablefunction grantRole(bytes32 _role, address _account)
gulp
nonpayablefunction gulp()
harvest
nonpayablefunction harvest()
init
nonpayablefunction init(tuple _initParams)
mint
nonpayablefunction mint(uint256 _shares, address _receiver) returns (uint256)
optInStrategyRewards
nonpayablefunction optInStrategyRewards(address _strategy)
optOutStrategyRewards
nonpayablefunction optOutStrategyRewards(address _strategy)
rebalance
nonpayablefunction rebalance(address[] _strategies)
redeem
nonpayablefunction redeem(uint256 _shares, address _receiver, address _owner) returns (uint256 assets)
removeStrategy
nonpayablefunction removeStrategy(address _strategy)
renounceRole
nonpayablefunction renounceRole(bytes32 _role, address _callerConfirmation)
reorderWithdrawalQueue
nonpayablefunction reorderWithdrawalQueue(uint8 _index1, uint8 _index2)
revokeRole
nonpayablefunction revokeRole(bytes32 _role, address _account)
setFeeRecipient
nonpayablefunction setFeeRecipient(address _newFeeRecipient)
setHooksConfig
nonpayablefunction setHooksConfig(address _hooksTarget, uint32 _hookedFns)
setPerformanceFee
nonpayablefunction setPerformanceFee(uint96 _newFee)
setStrategyCap
nonpayablefunction setStrategyCap(address _strategy, uint16 _cap)
skim
nonpayablefunction skim(address _token, address _recipient)
toggleStrategyEmergencyStatus
nonpayablefunction toggleStrategyEmergencyStatus(address _strategy)
transfer
nonpayablefunction transfer(address _to, uint256 _value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address _from, address _to, uint256 _value) returns (bool)
updateInterestAccrued
nonpayablefunction updateInterestAccrued()
withdraw
nonpayablefunction withdraw(uint256 _assets, address _receiver, address _owner) returns (uint256 shares)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
DelegateChanged
event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate)
DelegateVotesChanged
event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
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)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
CheckpointUnorderedInsertion
error CheckpointUnorderedInsertion()
ControllerDisabled
error ControllerDisabled()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC20ExceededSafeSupply
error ERC20ExceededSafeSupply(uint256 increasedSupply, uint256 cap)
ERC20ExceededSafeSupply
error ERC20ExceededSafeSupply(uint256 increasedSupply, uint256 cap)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
ERC5805FutureLookup
error ERC5805FutureLookup(uint256 timepoint, uint48 clock)
ERC6372InconsistentClock
error ERC6372InconsistentClock()
EVC_InvalidAddress
error EVC_InvalidAddress()
InitialAllocationPointsZero
error InitialAllocationPointsZero()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidAssetAddress
error InvalidAssetAddress()
InvalidInitialization
error InvalidInitialization()
InvalidSmearingPeriod
error InvalidSmearingPeriod()
NotAuthorized
error NotAuthorized()
NotInitializing
error NotInitializing()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
ViewReentrancy
error ViewReentrancy()
VotesExpiredSignature
error VotesExpiredSignature(uint256 expiry)
creation bytecode
0x6101c0604052348015610010575f5ffd5b5060405161608b38038061608b83398101604081905261002f9161014d565b8051602082015160408301516060840151608085015160a0860151875188906001600160a01b03811661007557604051638133abd160e01b815260040160405180910390fd5b6001600160a01b039081166080526020820151811660a0526040820151811660c052606090910151151560e052958616610100529385166101205291841661014052831661016052821661018052166101a052506102459050565b604051608081016001600160401b03811182821017156100fe57634e487b7160e01b5f52604160045260245ffd5b60405290565b60405160c081016001600160401b03811182821017156100fe57634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114610148575f5ffd5b919050565b5f5f828403610140811215610160575f5ffd5b608081121561016d575f5ffd5b6101756100d0565b61017e85610132565b815261018c60208601610132565b602082015261019d60408601610132565b6040820152606085015180151581146101b4575f5ffd5b6060820152925060c0607f19820112156101cc575f5ffd5b506101d5610104565b6101e160808501610132565b81526101ef60a08501610132565b602082015261020060c08501610132565b604082015261021160e08501610132565b60608201526102236101008501610132565b60808201526102356101208501610132565b60a0820152809150509250929050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615d3d61034e5f395f818161081d01526111d201525f81816109fc01528181610e400152610ea201525f8181610b79015261132701525f81816106a80152610f7101525f818161073d01528181610f2801528181611006015281816110de01528181611b140152611c4601525f81816109180152818161103c01528181611112015281816111760152611a7b01525f8181610a200152612dbb01525f610c0b01525f8181612ab90152818161450701526145f301525f8181610b1701528181611e1801528181611e4101528181611f7001528181614cd00152614d0b0152615d3d5ff3fe608060405234801561000f575f5ffd5b50600436106105e3575f3560e01c806384b0196e11610307578063c31298501161019d578063dd62ed3e116100f3578063ed0e51871161009e578063f061879111610079578063f0618791146108a4578063f1127ed814610d45578063f8806a1314610d84575f5ffd5b8063ed0e518714610d32578063ef8b30f714610c42578063efb913eb14610900575f5ffd5b8063e74b981b116100ce578063e74b981b14610d14578063e7f3fbde14610d22578063ece6a7fa14610d2a575f5ffd5b8063dd62ed3e14610cc2578063e15c82ec14610cd5578063e6f2aae514610ce8575f5ffd5b8063c9411e2211610153578063d51988d01161012e578063d51988d014610c8e578063d547741f14610c9c578063d905777e14610caf575f5ffd5b8063c9411e2214610c55578063ca15c87314610c68578063ce96cb7714610c7b575f5ffd5b8063c522498311610183578063c522498314610c09578063c63d75b614610c2f578063c6e6f59214610c42575f5ffd5b8063c312985014610be3578063c3cda52014610bf6575f5ffd5b80639ab24eb01161025d578063b3d7f6b911610208578063bae41cbf116101e3578063bae41cbf14610b74578063bea9db6d14610b9b578063beb9c69b14610bae575f5ffd5b8063b3d7f6b914610b4e578063b460af9414610b61578063ba08765214610b61575f5ffd5b8063a3246ad311610238578063a3246ad314610b02578063a70354a114610b15578063a9059cbb14610b3b575f5ffd5b80639ab24eb014610ad5578063a051506414610ae8578063a217fddf14610afb575f5ffd5b80639010d07c116102bd57806394909e621161029857806394909e62146108a457806394bf804d1461094257806395d89b4114610acd575f5ffd5b80639010d07c14610a5757806391d1485414610a6a57806391ddadf414610aae575f5ffd5b80638aec2834116102ed5780638aec2834146109f75780638db7e68f14610a1e5780638e539e8c14610a44575f5ffd5b806384b0196e146109c957806387451de6146109e4575f5ffd5b806338d52e0f1161047c578063587cde1e116103d25780636e553f651161037d578063712b772f11610358578063712b772f146109905780637a7e401b146109a35780637ecebe00146109b6575f5ffd5b80636e553f65146109425780636fcfff451461095557806370a082311461097d575f5ffd5b806364b1cdd6116103ad57806364b1cdd6146108945780636bd757c4146109135780636c63c2da1461093a575f5ffd5b8063587cde1e146108da5780635c19a95c146108ed578063612bddc914610900575f5ffd5b806341233a98116104325780634bf5d7e91161040d5780634bf5d7e9146108ac5780634cdad506146108b457806355c00f24146108c7575f5ffd5b806341233a981461089457806345f7f2491461089c5780634641257d146108a4575f5ffd5b80633a46b1a8116104625780633a46b1a81461083f5780633eda828714610852578063402d267d14610881575f5ffd5b806338d52e0f1461081057806339f7444e14610818575f5ffd5b8063210da9cd1161053c57806324506add116104e7578063313ce567116104c2578063313ce567146107ce57806336568abe146107e857806337d5fe99146107fb575f5ffd5b806324506add1461077a578063248a9ca31461078d5780632f2ff15d146107bb575f5ffd5b806323c8738a1161051757806323c8738a1461073857806323e551601461075f5780632419b45b14610767575f5ffd5b8063210da9cd146106ea5780632257a7381461071d57806323b872dd14610725575f5ffd5b80630a28a4771161059c57806318160ddd1161057757806318160ddd1461069b5780631ee91276146106a357806320dcc342146106e2575f5ffd5b80630a28a477146106605780631671fcad14610673578063175188e814610688575f5ffd5b806306fdde03116105cc57806306fdde031461062557806307a2d13a1461063a578063095ea7b31461064d575f5ffd5b806301e1d114146105e757806301ffc9a714610602575b5f5ffd5b6105ef610da4565b6040519081526020015b60405180910390f35b610615610610366004615296565b610db2565b60405190151581526020016105f9565b61062d610ddc565b6040516105f991906152eb565b6105ef6106483660046152fd565b610de6565b61061561065b366004615328565b610df0565b6105ef61066e3660046152fd565b610e02565b610686610681366004615328565b610e0c565b005b610686610696366004615352565b610e6e565b6105ef610ecf565b6106ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016105f9565b6105ef610ed8565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f0854600160e81b900462ffffff166105ef565b6105ef610ee1565b61061561073336600461536d565b610eea565b6106ca7f000000000000000000000000000000000000000000000000000000000000000081565b6105ef610efe565b6106866107753660046153ab565b610f07565b6106866107883660046153e2565b610f50565b6105ef61079b3660046152fd565b5f9081525f516020615c885f395f51905f52602052604090206001015490565b6106866107c9366004615416565b610f99565b6107d6610faf565b60405160ff90911681526020016105f9565b6106866107f6366004615416565b610fb8565b610803610fca565b6040516105f99190615439565b6106ca610fd4565b6106ca7f000000000000000000000000000000000000000000000000000000000000000081565b6105ef61084d366004615328565b610fdd565b61085a610fe8565b604080516001600160a01b0390931683526001600160601b039091166020830152016105f9565b6105ef61088f366004615352565b610ffa565b610686611004565b6105ef611031565b61068661103a565b61062d611064565b6105ef6108c23660046152fd565b61106e565b6106866108d5366004615352565b611078565b6106ca6108e8366004615352565b6110aa565b6106866108fb366004615352565b6110b4565b61068661090e366004615352565b6110bd565b6106ca7f000000000000000000000000000000000000000000000000000000000000000081565b6105ef611106565b6105ef610950366004615416565b61110f565b610968610963366004615352565b611141565b60405163ffffffff90911681526020016105f9565b6105ef61098b366004615352565b61114b565b61068661099e3660046153ab565b611155565b6106866109b1366004615494565b61119e565b6105ef6109c4366004615352565b6111fa565b6109d161123d565b6040516105f997969594939291906154c5565b6106866109f236600461555b565b611306565b6106ca7f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000610615565b6105ef610a523660046152fd565b61134f565b6106ca610a65366004615581565b611359565b610615610a78366004615416565b5f9182525f516020615c885f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610ab6611391565b60405165ffffffffffff90911681526020016105f9565b61062d61139a565b6105ef610ae3366004615352565b6113a4565b610686610af63660046155a1565b6113ae565b6105ef5f81565b610803610b103660046152fd565b611a27565b7f00000000000000000000000000000000000000000000000000000000000000006106ca565b610615610b49366004615328565b611a63565b6105ef610b5c3660046152fd565b611a6e565b6105ef610b6f3660046155d8565b611a78565b6106ca7f000000000000000000000000000000000000000000000000000000000000000081565b610686610ba9366004615617565b611aab565b610bb6611add565b6040805164ffffffffff94851681529390921660208401526001600160a81b0316908201526060016105f9565b610686610bf1366004615695565b611af3565b610686610c043660046156d2565b611b43565b7f00000000000000000000000000000000000000000000000000000000000000006106ca565b6105ef610c3d366004615352565b611b51565b6105ef610c503660046152fd565b611b5b565b610686610c63366004615328565b611b65565b6105ef610c763660046152fd565b611b97565b6105ef610c89366004615352565b611bce565b610686610681366004615728565b610686610caa366004615416565b611bd8565b6105ef610cbd366004615352565b611bea565b6105ef610cd03660046153ab565b611bf4565b610615610ce3366004615352565b611bff565b610cf0611c09565b604080516001600160a01b03909316835263ffffffff9091166020830152016105f9565b6106866109f2366004615352565b6105ef611c13565b6106ca611c1c565b610686610d4036600461575a565b611c25565b610d58610d533660046153e2565b611c6e565b60408051825165ffffffffffff1681526020928301516001600160d01b031692810192909252016105f9565b610d97610d92366004615352565b611c8b565b6040516105f991906157c7565b5f610dad611cbb565b905090565b5f6001600160e01b03198216635a05180f60e01b1480610dd65750610dd682611ccc565b92915050565b6060610dad611d00565b5f610dd682611d0a565b5f610dfb8383611d22565b9392505050565b5f610dd682611d2d565b610e14611e0e565b7f8b5b16d04624687fcf0d0228f19993c9157c1ed07b41d8d430fd9100eb099fe8610e3e81612025565b7f0000000000000000000000000000000000000000000000000000000000000000610e6881612036565b50505050565b610e76611e0e565b7f07e1e69609602fa637ca8ad165be6c640a29b7619c15f878b21fd2c3e35337e3610ea081612025565b7f0000000000000000000000000000000000000000000000000000000000000000610eca81612036565b505050565b5f610dad612054565b5f610dad612065565b5f610dad6120be565b5f610ef68484846120fb565b949350505050565b5f610dad612107565b610f0f611e0e565b5f516020615ce85f395f51905f52610f2681612025565b7f0000000000000000000000000000000000000000000000000000000000000000610e6881612036565b610f58611e0e565b5f516020615ce85f395f51905f52610f6f81612025565b7f0000000000000000000000000000000000000000000000000000000000000000610e6881612036565b610fa1611e0e565b610fab8282612118565b5050565b5f610dad612148565b610fc0611e0e565b610fab8282612151565b6060610dad612194565b5f610dad612229565b5f610dfb8383612248565b5f5f610ff2612253565b915091509091565b5f610dd6826122a9565b7f000000000000000000000000000000000000000000000000000000000000000061102e81612036565b50565b5f610dad612321565b7f000000000000000000000000000000000000000000000000000000000000000061102e81612036565b6060610dad612350565b5f610dd68261235a565b611080611e0e565b7f8b5b16d04624687fcf0d0228f19993c9157c1ed07b41d8d430fd9100eb099fe8610ea081612025565b5f610dd682612442565b61102e8161246f565b6110c5611e0e565b5f516020615ce85f395f51905f526110dc81612025565b7f0000000000000000000000000000000000000000000000000000000000000000610eca81612036565b5f610dad612478565b5f7f000000000000000000000000000000000000000000000000000000000000000061113a81612036565b5092915050565b5f610dd682612494565b5f610dd68261249e565b61115d611e0e565b5f516020615ce85f395f51905f5261117481612025565b7f0000000000000000000000000000000000000000000000000000000000000000610e6881612036565b6111a6611e0e565b7f2f5f33d4efa36c0ce5fa2371f54a1676ef349db7419e272b6a99193aac80fb3b6111d081612025565b7f0000000000000000000000000000000000000000000000000000000000000000610e6881612036565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb005b6001600160a01b039093165f9081526020939093525050604090205490565b5f60608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100805490915015801561127b57506001810154155b6112cc5760405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a6564000000000000000000000060448201526064015b60405180910390fd5b6112d46124b0565b6112dc61257a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b61130e611e0e565b5f516020615ce85f395f51905f5261132581612025565b7f0000000000000000000000000000000000000000000000000000000000000000610eca81612036565b5f610dd6826125b0565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610ef690846125ba565b5f610dad6125c5565b6060610dad6125ce565b5f610dd6826125d8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156113f85750825b90505f8267ffffffffffffffff1660011480156114145750303b155b905081158015611422575080155b156114405760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561147457845468ff00000000000000001916680100000000000000001785555b61148c6114876040880160208901615352565b6125e2565b61151661149c604088018861583e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506114dd92505050606089018961583e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061267792505050565b61151e6126da565b61158061152e604088018861583e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506040805180820190915260018152603160f81b602082015291506126e29050565b6115886126da565b6115906126da565b6115986126da565b6115a06126da565b6115a86126da565b6115b06126da565b6115c06040870160208801615352565b6001600160a01b03163b5f036115e957604051630ccd248560e21b815260040160405180910390fd5b85608001355f0361160d5760405163b976c98760e01b815260040160405180910390fd5b6201518061162160c0880160a08901615881565b62ffffff16101561165e576040517fff7ad5b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f0680547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790556040805160808082019092525f81525f516020615cc85f395f51905f529160208201906116d9908a0135612754565b6001600160601b031681525f6020820152604001600190525f80805260048301602090815260409182902083518154928501519385015161ffff16600160d81b027fffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff6001600160601b039095166f01000000000000000000000000000000027fffffffffff0000000000000000000000000000000000000000000000000000009094166001600160781b0390921691909117929092179283168217815560608401519092909183917fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091167fffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617600160e81b836002811115611801576118016157b3565b021790555050506080870135600282015561182260c0880160a08901615881565b60088201805462ffffff92909216600160e81b027cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790556118735f61186e60208a018a615352565b61278b565b506118be7f8b5b16d04624687fcf0d0228f19993c9157c1ed07b41d8d430fd9100eb099fe87f33c8cf2b4c3507067cccdaffa7fb5d7b51bd52e3540f05237106f5fda5ee2cee6127e0565b6119087f07e1e69609602fa637ca8ad165be6c640a29b7619c15f878b21fd2c3e35337e37f98375397117c1b9a3a9018ee2eac2f2dd07ab7d29358f069da6d26b39daabf106127e0565b61193f5f516020615ce85f395f51905f527f72c730d8a1126a91f005a19fca19d2357dbd0bebbf9eba0a7e87cfa14ddb51cc6127e0565b6119897f2f5f33d4efa36c0ce5fa2371f54a1676ef349db7419e272b6a99193aac80fb3b7f87b06e62333f55d9563373e813d0fed0f2c91dfcb7d3aa0645f29b282c855db96127e0565b6119d37f3d37afab23e5cac313ed6bbbd4cc033efdc5d534544a422062560607f0a47c917f9cf6d8481549a25033aed87fee00076ea3af519cd0c3632ec49dbd00011ac6cd6127e0565b508315611a1f57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320006020819052604090912060609190610dfb9061285b565b5f610dfb8383612867565b5f610dd682612872565b5f7f0000000000000000000000000000000000000000000000000000000000000000611aa381612036565b509392505050565b611ab3611e0e565b7f3d37afab23e5cac313ed6bbbd4cc033efdc5d534544a422062560607f0a47c9161117481612025565b5f5f5f611ae8612886565b925092509250909192565b611afb611e0e565b5f516020615ce85f395f51905f52611b1281612025565b7f0000000000000000000000000000000000000000000000000000000000000000611b3c81612036565b5050505050565b611a1f8686868686866128e1565b5f610dd6826128ef565b5f610dd682612900565b611b6d611e0e565b7f07e1e69609602fa637ca8ad165be6c640a29b7619c15f878b21fd2c3e35337e3610e3e81612025565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610dfb90612913565b5f610dd68261291c565b611be0611e0e565b610fab828261292f565b5f610dd68261295f565b5f610dfb83836129ad565b5f610dd6826129f8565b5f5f610ff2612a40565b5f610dad612a8a565b5f610dad612aad565b611c2d611e0e565b5f516020615ce85f395f51905f52611c4481612025565b7f0000000000000000000000000000000000000000000000000000000000000000611a1f81612036565b604080518082019091525f8082526020820152610dfb8383612adb565b611cb2604080516080810182525f8082526020820181905291810182905290606082015290565b610dd682612af8565b5f611cc4612bf7565b610dad612c72565b5f6001600160e01b03198216637965db0b60e01b1480610dd657506301ffc9a760e01b6001600160e01b0319831614610dd6565b6060610dad612cca565b5f611d13612bf7565b610dd6825f612cf3565b919050565b5f610dfb8383612d30565b5f611d36612bf7565b5f82611d565f516020615ca85f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611d9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dbe91906158a3565b101590505f5f611dcd83612d51565b91509150611e05611ddb5f90565b611de690600a6159a9565b611df090836159b7565b611dfb8460016159b7565b87919060016130c1565b95945050505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303612023575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633a1a3a1d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e9b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ebf91906158a3565b905077ff00000000000000000000000000000000000000000000008116151580611f01575076ff00000000000000000000000000000000000000000000811615155b80611f23575075ff000000000000000000000000000000000000000000811615155b15611f415760405163ea8e4eb560e01b815260040160405180910390fd5b5f6001600160a01b03821660405163110ac5cb60e21b81526001600160a01b0380831660048301529192505f917f0000000000000000000000000000000000000000000000000000000000000000169063442b172c90602401602060405180830381865afa158015611fb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd991906159ca565b90506001600160a01b038116158015906120055750816001600160a01b0316816001600160a01b031614155b15610eca5760405163ea8e4eb560e01b815260040160405180910390fd5b565b61102e81612031613103565b61310c565b365f5f375f5f365f845af43d5f5f3e808015612050573d5ff35b3d5ffd5b5f61205d612bf7565b610dad61316c565b5f61206e612bf7565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f06545f516020615cc85f395f51905f52906120b890600160501b90046001600160a81b0316613194565b91505090565b5f6120c7612bf7565b507f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f0854600160c01b900464ffffffffff1690565b5f610ef6848484613271565b5f612110612bf7565b610dad61329e565b5f8281525f516020615c885f395f51905f52602052604090206001015461213e81612025565b610e68838361278b565b5f610dad61335b565b612159613103565b6001600160a01b0316816001600160a01b03161461218a5760405163334bd91960e11b815260040160405180910390fd5b610eca8282613384565b606061219e612bf7565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f058054604080516020808402820181019092528281525f516020615cc85f395f51905f52939092909183018282801561221e57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612200575b505050505091505090565b5f610dad5f516020615ca85f395f51905f52546001600160a01b031690565b5f610dfb83836133d0565b5f5f61225d612bf7565b50507f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f03546c0100000000000000000000000081046001600160a01b0316916001600160601b0390911690565b5f5f193063b3d7f6b96122ba613460565b6040518263ffffffff1660e01b81526004016122d891815260200190565b602060405180830381865afa925050508015612311575060408051601f3d908101601f1916820190925261230e918101906158a3565b60015b610dfb5792915050565b50919050565b5f61232a612bf7565b507f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f015490565b6060610dad61347a565b5f612363612bf7565b5f61236e835f612cf3565b90505f816123905f516020615ca85f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156123d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123f891906158a3565b101590505f5f61240783612d51565b909250905061243861241a8360016159b7565b6124255f600a6159a9565b61242f90846159b7565b8891905f6130c1565b9695505050505050565b6001600160a01b038082165f9081525f516020615c685f395f51905f526020526040812054909116610dd6565b61102e816134f2565b5f612481612bf7565b505f516020615cc85f395f51905f525490565b5f610dd682613507565b5f6124a7612bf7565b610dd682613511565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10091612501906159e5565b80601f016020809104026020016040519081016040528092919081815260200182805461252d906159e5565b801561221e5780601f1061254f5761010080835404028352916020019161221e565b820191905f5260205f20905b81548152906001019060200180831161255b5750939695505050505050565b60605f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005b9050806003018054612501906159e5565b5f610dd682613539565b5f610dfb83836135b3565b5f610dad6135d9565b6060610dad6135e2565b5f610dd682613633565b6125ea613691565b5f516020615ca85f395f51905f525f80612603846136df565b9150915081612613576012612615565b805b83547fffffffffffffffffffffff00000000000000000000000000000000000000000016600160a01b60ff929092169190910273ffffffffffffffffffffffffffffffffffffffff1916176001600160a01b0394909416939093179091555050565b61267f613691565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036126cb8482615a5b565b5060048101610e688382615a5b565b612023613691565b6126ea613691565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026127368482615a5b565b50600381016127458382615a5b565b505f8082556001909101555050565b5f6001600160601b03821115612787576040516306dfcc6560e41b815260606004820152602481018390526044016112c3565b5090565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816127b885856137ca565b90508015610ef6575f8581526020839052604090206127d79085613884565b50949350505050565b5f516020615c885f395f51905f525f612813845f9081525f516020615c885f395f51905f52602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b60605f610dfb83613898565b5f610dfb83836138f1565b5f61287b612bf7565b610dd6826001612cf3565b5f5f5f612891612bf7565b50507f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f065464ffffffffff808216936501000000000083049091169250600160501b9091046001600160a81b031690565b611a1f868686868686613908565b5f6128f8612bf7565b610dd6613460565b5f612909612bf7565b610dd6825f6139c4565b5f610dd6825490565b5f612925612bf7565b5f611e05836139f8565b5f8281525f516020615c885f395f51905f52602052604090206001015461295581612025565b610e688383613384565b5f612968612bf7565b5f5f5f612974856139f8565b925092509250611e056129845f90565b61298f90600a6159a9565b61299990846159b7565b6129a48560016159b7565b8391905f6130c1565b6001600160a01b038083165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938516835292905290812054610dfb565b5f612a01612bf7565b6001600160a01b0382165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f07602052604090205460ff16610dd6565b5f5f612a4a612bf7565b50507f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f08546001600160a01b03811691600160a01b90910463ffffffff1690565b5f612a93612bf7565b5f5f516020615cc85f395f51905f525b6002015491505090565b5f612ab6612bf7565b507f000000000000000000000000000000000000000000000000000000000000000090565b604080518082019091525f8082526020820152610dfb8383613af0565b612b1f604080516080810182525f8082526020820181905291810182905290606082015290565b612b27612bf7565b6001600160a01b0382165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f046020908152604091829020825160808101845281546001600160781b03811682526f0100000000000000000000000000000081046001600160601b031693820193909352600160d81b830461ffff16938101939093525f516020615cc85f395f51905f5292916060830190600160e81b900460ff166002811115612bdc57612bdc6157b3565b6002811115612bed57612bed6157b3565b9052509392505050565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f06545f516020615cc85f395f51905f529060ff600160f81b909104166001190161102e5760088101546001600160a01b0316331480612c5557503330145b61102e57604051630622e97b60e51b815260040160405180910390fd5b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f06545f905f516020615cc85f395f51905f5290612cbe90600160501b90046001600160a81b0316613194565b81546120b891906159b7565b60605f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0061259f565b5f610dfb612cff612c72565b612d0a9060016159b7565b612d155f600a6159a9565b612d1d61316c565b612d2791906159b7565b859190856130c1565b5f5f612d3a613103565b9050612d47818585613b0d565b5060019392505050565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f06545f9081905f516020615cc85f395f51905f5290600160501b90046001600160a81b031682612da082613194565b8354612dac91906159b7565b90505f612db761316c565b90507f00000000000000000000000000000000000000000000000000000000000000008015612e07575060088401544290612e04906201518090600160c01b900464ffffffffff166159b7565b10155b8015612e105750865b15612e215790969095509350505050565b60058401545f908190815b81811015612ff2575f886005018281548110612e4a57612e4a615b16565b5f918252602080832091909101546001600160a01b031680835260048c019091526040909120549091506001600160781b03811690600190600160e81b900460ff166002811115612e9d57612e9d6157b3565b14612ea9575050612fea565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015612eed573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1191906158a3565b60405163266d6a8360e11b8152600481018290529091505f906001600160a01b03851690634cdad50690602401602060405180830381865afa158015612f59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f7d91906158a3565b9050826001600160781b0316811115612fb457612fa36001600160781b03841682615b2a565b612fad90896159b7565b9750612fe5565b826001600160781b0316811015612fe557612fd8816001600160781b038516615b2a565b612fe290886159b7565b96505b505050505b600101612e2c565b508282111561302c575f8561300561329e565b61300f9190615b2a565b9050838303818111156130255781900395869003955b50506130b1565b828210156130b15760038701546001600160601b038116906c0100000000000000000000000090046001600160a01b03161580159061307357506001600160601b03811615155b156130af578284035f806130878385613b1a565b91509150805f146130ab5761309c828a6159b7565b98506130a881896159b7565b97505b5050505b505b5092989197509095505050505050565b5f6130ee6130ce83613b56565b80156130e957505f84806130e4576130e4615b3d565b868809115b151590565b6130f9868686613b82565b611e0591906159b7565b5f610dad613c38565b5f8281525f516020615c885f395f51905f52602090815260408083206001600160a01b038516845290915290205460ff16610fab5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016112c3565b5f807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00612aa3565b5f61319d61316c565b5f036131aa57505f919050565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f06545f516020615cc85f395f51905f529065010000000000900464ffffffffff16428111613201575050506001600160a81b031690565b600682015464ffffffffff1642810361321e57505f949350505050565b5f6132298284615b51565b64ffffffffff1690505f8264ffffffffff16426132469190615b2a565b90508161325c826001600160a81b038a16615b6e565b6132669190615b85565b979650505050505050565b5f5f61327b613103565b9050613288858285613c41565b613293858585613c9e565b506001949350505050565b7f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f01545f516020615ca85f395f51905f52545f915f516020615cc85f395f51905f52916001600160a01b03166040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561332d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335191906158a3565b6120b891906159b7565b5f805f516020615ca85f395f51905f5290505f81546120b89190600160a01b900460ff16615b98565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816133b18585613cfb565b90508015610ef6575f8581526020839052604090206127d79085613daa565b5f5f516020615c685f395f51905f52816133e8611391565b90508065ffffffffffff16841061342357604051637669fc0f60e11b81526004810185905265ffffffffffff821660248201526044016112c3565b61344e61342f85613dbe565b6001600160a01b0387165f908152600185016020526040902090613df0565b6001600160d01b031695945050505050565b5f61346961316c565b610dad906001600160d01b03615b2a565b6060613484613ea2565b65ffffffffffff16613494611391565b65ffffffffffff16146134ba576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b5f6134fb613103565b9050610fab8183613eac565b5f610dd682613f40565b5f807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0061121e565b5f5f516020615c685f395f51905f5281613551611391565b90508065ffffffffffff16841061358c57604051637669fc0f60e11b81526004810185905265ffffffffffff821660248201526044016112c3565b6135a261359885613dbe565b6002840190613df0565b6001600160d01b0316949350505050565b5f825f0182815481106135c8576135c8615b16565b905f5260205f200154905092915050565b5f610dad613ea2565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091612501906159e5565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604081205f516020615c685f395f51905f529061368190613f8f565b6001600160d01b03169392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661202357604051631afcd79f60e31b815260040160405180910390fd5b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663313ce56760e01b17905290515f918291829182916001600160a01b0387169161373a91615bb1565b5f60405180830381855afa9150503d805f8114613772576040519150601f19603f3d011682016040523d82523d5f602084013e613777565b606091505b509150915081801561378b57506020815110155b156137be575f818060200190518101906137a591906158a3565b905060ff81116137bc576001969095509350505050565b505b505f9485945092505050565b5f8281525f516020615c885f395f51905f52602081815260408084206001600160a01b038616855290915282205460ff1661387b575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055613831613103565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610dd6565b5f915050610dd6565b5f610dfb836001600160a01b038416613fc9565b6060815f018054806020026020016040519081016040528092919081815260200182805480156138e557602002820191905f5260205f20905b8154815260200190600101908083116138d1575b50505050509050919050565b5f5f6138fb613103565b9050612d47818585613c9e565b8342111561392c57604051632341d78760e11b8152600481018590526024016112c3565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f906139a59061399d9060a00160405160208183030381529060405280519060200120614015565b858585614041565b90506139b1818761406d565b6139bb8188613eac565b50505050505050565b5f610dfb6139d382600a6159a9565b6139db61316c565b6139e591906159b7565b6139ed612c72565b612d279060016159b7565b5f5f5f5f613a0585613511565b90505f613a12825f612cf3565b90505f81613a345f516020615ca85f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015613a78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a9c91906158a3565b101590505f5f613aab83612d51565b90925090505f613ad4613abf8460016159b7565b613aca5f600a6159a9565b61242f90856159b7565b9050613adf816140de565b929a91995091975095505050505050565b604080518082019091525f8082526020820152610dfb83836142bb565b610eca838383600161431c565b5f8080613b3a856001600160601b038616670de0b6b3a7640000846130c1565b90505f613b47825f6139c4565b919350909150505b9250929050565b5f6002826003811115613b6b57613b6b6157b3565b613b759190615bc7565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f03613bb657838281613bac57613bac615b3d565b0492505050610dfb565b808411613bcd57613bcd6003851502601118614412565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f610dad614423565b5f613c4c8484611bf4565b90505f198114610e685781811015613c9057604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016112c3565b610e6884848484035f61431c565b6001600160a01b038316613cc757604051634b637e8f60e11b81525f60048201526024016112c3565b6001600160a01b038216613cf05760405163ec442f0560e01b81525f60048201526024016112c3565b610eca83838361442c565b5f8281525f516020615c885f395f51905f52602081815260408084206001600160a01b038616855290915282205460ff161561387b575f848152602082815260408083206001600160a01b03871684529091529020805460ff19169055613d60613103565b6001600160a01b0316836001600160a01b0316857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001915050610dd6565b5f610dfb836001600160a01b038416614685565b5f65ffffffffffff821115612787576040516306dfcc6560e41b815260306004820152602481018390526044016112c3565b81545f9081816005811115613e4c575f613e098461475f565b613e139085615b2a565b5f8881526020902090915081015465ffffffffffff9081169087161015613e3c57809150613e4a565b613e478160016159b7565b92505b505b5f613e59878785856148c4565b90508015613e9657613e7d87613e70600184615b2a565b5f91825260209091200190565b54660100000000000090046001600160d01b0316613266565b5f979650505050505050565b5f610dad43613dbe565b5f516020615c685f395f51905f525f613ec4846110aa565b6001600160a01b038581165f81815260208690526040808220805473ffffffffffffffffffffffffffffffffffffffff1916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610e688184613f3b8761491b565b614925565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0160205260408120545f516020615c685f395f51905f5290610dfb90614a9b565b80545f908015613fc157613fa883613e70600184615b2a565b54660100000000000090046001600160d01b0316610dfb565b5f9392505050565b5f81815260018301602052604081205461400e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610dd6565b505f610dd6565b5f610dd6614021614acb565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f5f61405188888888614ad4565b9250925092506140618282614b9c565b50909695505050505050565b6001600160a01b0382165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260409020805460018101909155818114610eca576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016112c3565b5f5f516020615cc85f395f51905f528161410c5f516020615ca85f395f51905f52546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015614150573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061417491906158a3565b9050838110156142a75760058201545f5b818110156142a4575f8460050182815481106141a3576141a3615b16565b5f918252602090912001546001600160a01b0316905060016001600160a01b0382165f908152600487016020526040902054600160e81b900460ff1660028111156141f0576141f06157b3565b146141fb575061429c565b60405163ce96cb7760e01b81523060048201525f906001600160a01b0383169063ce96cb7790602401602060405180830381865afa15801561423f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061426391906158a3565b90508488035f818310156142775782614279565b815b905061428581886159b7565b965089871061429757505050506142a4565b505050505b600101614185565b50505b808411156142b3578093505b509192915050565b6040805180820182525f80825260208083018290526001600160a01b03861682527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d019052919091205f516020615c685f395f51905f5290610ef69084614c54565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0385166143665760405163e602df0560e01b81525f60048201526024016112c3565b6001600160a01b03841661438f57604051634a1406b160e11b81525f60048201526024016112c3565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115611b3c57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161440391815260200190565b60405180910390a35050505050565b634e487b715f52806020526024601cfd5b5f610dad614cc4565b614437838383614d7b565b6001600160a01b038316614489575f61444e61316c565b90506001600160d01b0381818082111561448457604051630e58ae9360e11b8152600481019290925260248201526044016112c3565b505050505b614494838383614ec7565b816001600160a01b0316836001600160a01b0316036144b257505050565b6001600160a01b0383161580159061450057506001600160a01b0383165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f07602052604090205460ff165b1561459e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fc4fdc18461453e86613511565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201525f60448201526064015f604051808303815f87803b158015614587575f5ffd5b505af1158015614599573d5f5f3e3d5ffd5b505050505b6001600160a01b038216158015906145ec57506001600160a01b0382165f9081527f557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f07602052604090205460ff165b15610eca577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636fc4fdc18361462a85613511565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201525f60448201526064015f604051808303815f87803b158015614673575f5ffd5b505af11580156139bb573d5f5f3e3d5ffd5b5f818152600183016020526040812054801561387b575f6146a7600183615b2a565b85549091505f906146ba90600190615b2a565b9050808214614719575f865f0182815481106146d8576146d8615b16565b905f5260205f200154905080875f0184815481106146f8576146f8615b16565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061472a5761472a615be8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610dd6565b5f6001821161476c575090565b81600170010000000000000000000000000000000082106147925760809190911c9060401b5b6801000000000000000082106147ad5760409190911c9060201b5b64010000000082106147c45760209190911c9060101b5b6201000082106147d95760109190911c9060081b5b61010082106147ed5760089190911c9060041b5b601082106148005760049190911c9060021b5b6004821061480c5760011b5b600302600190811c9081858161482457614824615b3d565b048201901c9050600181858161483c5761483c615b3d565b048201901c9050600181858161485457614854615b3d565b048201901c9050600181858161486c5761486c615b3d565b048201901c9050600181858161488457614884615b3d565b048201901c9050600181858161489c5761489c615b3d565b048201901c90506148bb8185816148b5576148b5615b3d565b04821190565b90039392505050565b5f5b81831015611aa3575f6148d98484614f38565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff16111561490757809250614915565b6149128160016159b7565b93505b506148c6565b5f610dd682613511565b5f516020615c685f395f51905f526001600160a01b038481169084161480159061494e57505f82115b15610e68576001600160a01b038416156149f7576001600160a01b0384165f9081526001820160205260408120819061499290614f5261498d87614f5d565b614f90565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516149ec929190918252602082015260400190565b60405180910390a250505b6001600160a01b03831615610e68576001600160a01b0383165f90815260018201602052604081208190614a3190614fc861498d87614f5d565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051614a8b929190918252602082015260400190565b60405180910390a2505050505050565b5f63ffffffff821115612787576040516306dfcc6560e41b815260206004820152602481018390526044016112c3565b5f610dad614fd3565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115614b0d57505f91506003905082614b92565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015614b5e573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614b8957505f925060019150829050614b92565b92505f91508190505b9450945094915050565b5f826003811115614baf57614baf6157b3565b03614bb8575050565b6001826003811115614bcc57614bcc6157b3565b03614bea5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115614bfe57614bfe6157b3565b03614c1f5760405163fce698f760e01b8152600481018290526024016112c3565b6003826003811115614c3357614c336157b3565b03610fab576040516335e2f38360e21b8152600481018290526024016112c3565b604080518082019091525f8082526020820152825f018263ffffffff1681548110614c8157614c81615b16565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252660100000000000090046001600160d01b0316918101919091529392505050565b5f336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168103611d1d57604051630c281d0f60e11b81525f60048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906318503a1e906024016040805180830381865afa158015614d57573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113a9190615bfc565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416614dc85781816002015f828254614dbd91906159b7565b90915550614e389050565b6001600160a01b0384165f9081526020829052604090205482811015614e1a5760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016112c3565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316614e56576002810180548390039055614e74565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051614eb991815260200190565b60405180910390a350505050565b5f516020615c685f395f51905f526001600160a01b038416614ef957614ef681600201614fc861498d85614f5d565b50505b6001600160a01b038316614f1d57614f1a81600201614f5261498d85614f5d565b50505b610e68614f29856110aa565b614f32856110aa565b84614925565b5f614f466002848418615b85565b610dfb908484166159b7565b5f610dfb8284615c29565b5f6001600160d01b03821115612787576040516306dfcc6560e41b815260d06004820152602481018390526044016112c3565b5f5f614fbb614f9d611391565b614fb3614fa988613f8f565b868863ffffffff16565b879190615046565b915091505b935093915050565b5f610dfb8284615c48565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614ffd615053565b6150056150ce565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f80614fbb858585615123565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008161507e6124b0565b80519091501561509657805160209091012092915050565b815480156150a5579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816150f961257a565b80519091501561511157805160209091012092915050565b600182015480156150a5579392505050565b82545f9081908015615239575f61513f87613e70600185615b2a565b805490915065ffffffffffff80821691660100000000000090046001600160d01b031690881682111561518557604051632520601d60e01b815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff16036151d857866151ac8a613e70600188615b2a565b80546001600160d01b039290921666010000000000000265ffffffffffff90921691909117905561522b565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f555f8f815291909120945191519092166601000000000000029216919091179101555b9450859350614fc092505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a8152918220955192519093166601000000000000029190931617920191909155905081614fc0565b5f602082840312156152a6575f5ffd5b81356001600160e01b031981168114610dfb575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610dfb60208301846152bd565b5f6020828403121561530d575f5ffd5b5035919050565b6001600160a01b038116811461102e575f5ffd5b5f5f60408385031215615339575f5ffd5b823561534481615314565b946020939093013593505050565b5f60208284031215615362575f5ffd5b8135610dfb81615314565b5f5f5f6060848603121561537f575f5ffd5b833561538a81615314565b9250602084013561539a81615314565b929592945050506040919091013590565b5f5f604083850312156153bc575f5ffd5b82356153c781615314565b915060208301356153d781615314565b809150509250929050565b5f5f604083850312156153f3575f5ffd5b82356153fe81615314565b9150602083013563ffffffff811681146153d7575f5ffd5b5f5f60408385031215615427575f5ffd5b8235915060208301356153d781615314565b602080825282518282018190525f918401906040840190835b818110156154795783516001600160a01b0316835260209384019390920191600101615452565b509095945050505050565b803560ff81168114611d1d575f5ffd5b5f5f604083850312156154a5575f5ffd5b6154ae83615484565b91506154bc60208401615484565b90509250929050565b60ff60f81b8816815260e060208201525f6154e360e08301896152bd565b82810360408401526154f581896152bd565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561554a57835183526020938401939092019160010161552c565b50909b9a5050505050505050505050565b5f6020828403121561556b575f5ffd5b81356001600160601b0381168114610dfb575f5ffd5b5f5f60408385031215615592575f5ffd5b50508035926020909101359150565b5f602082840312156155b1575f5ffd5b813567ffffffffffffffff8111156155c7575f5ffd5b820160c08185031215610dfb575f5ffd5b5f5f5f606084860312156155ea575f5ffd5b8335925060208401356155fc81615314565b9150604084013561560c81615314565b809150509250925092565b5f5f60208385031215615628575f5ffd5b823567ffffffffffffffff81111561563e575f5ffd5b8301601f8101851361564e575f5ffd5b803567ffffffffffffffff811115615664575f5ffd5b8560208260051b8401011115615678575f5ffd5b6020919091019590945092505050565b801515811461102e575f5ffd5b5f5f5f606084860312156156a7575f5ffd5b83356156b281615314565b925060208401356156c281615314565b9150604084013561560c81615688565b5f5f5f5f5f5f60c087890312156156e7575f5ffd5b86356156f281615314565b9550602087013594506040870135935061570e60608801615484565b9598949750929560808101359460a0909101359350915050565b5f5f60408385031215615739575f5ffd5b823561574481615314565b9150602083013561ffff811681146153d7575f5ffd5b5f5f5f5f6080858703121561576d575f5ffd5b843561577881615314565b9350602085013561578881615314565b9250604085013561579881615314565b915060608501356157a881615688565b939692955090935050565b634e487b7160e01b5f52602160045260245ffd5b5f6080820190506001600160781b0383511682526001600160601b03602084015116602083015261ffff604084015116604083015260608301516003811061581d57634e487b7160e01b5f52602160045260245ffd5b8060608401525092915050565b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e19843603018112615853575f5ffd5b83018035915067ffffffffffffffff82111561586d575f5ffd5b602001915036819003821315613b4f575f5ffd5b5f60208284031215615891575f5ffd5b813562ffffff81168114610dfb575f5ffd5b5f602082840312156158b3575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115614fc0578085048111156158ed576158ed6158ba565b60018416156158fb57908102905b60019390931c9280026158d2565b5f8261591757506001610dd6565b8161592357505f610dd6565b816001811461593957600281146159435761595f565b6001915050610dd6565b60ff841115615954576159546158ba565b50506001821b610dd6565b5060208310610133831016604e8410600b8410161715615982575081810a610dd6565b61598e5f1984846158ce565b805f19048211156159a1576159a16158ba565b029392505050565b5f610dfb60ff841683615909565b80820180821115610dd657610dd66158ba565b5f602082840312156159da575f5ffd5b8151610dfb81615314565b600181811c908216806159f957607f821691505b60208210810361231b57634e487b7160e01b5f52602260045260245ffd5b601f821115610eca57805f5260205f20601f840160051c81016020851015615a3c5750805b601f840160051c820191505b81811015611b3c575f8155600101615a48565b815167ffffffffffffffff811115615a7557615a7561582a565b615a8981615a8384546159e5565b84615a17565b6020601f821160018114615abb575f8315615aa45750848201515b5f19600385901b1c1916600184901b178455611b3c565b5f84815260208120601f198516915b82811015615aea5787850151825560209485019460019092019101615aca565b5084821015615b0757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610dd657610dd66158ba565b634e487b7160e01b5f52601260045260245ffd5b64ffffffffff8281168282160390811115610dd657610dd66158ba565b8082028115828204841417610dd657610dd66158ba565b5f82615b9357615b93615b3d565b500490565b60ff8181168382160190811115610dd657610dd66158ba565b5f82518060208501845e5f920191825250919050565b5f60ff831680615bd957615bd9615b3d565b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffd5b5f5f60408385031215615c0d575f5ffd5b8251615c1881615314565b60208401519092506153d781615688565b6001600160d01b038281168282160390811115610dd657610dd66158ba565b6001600160d01b038181168382160190811115610dd657610dd66158ba56fee8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268000773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00557a0cdd38e5249281b5bc89e23dd8e4f8f0223d657d77792700289d81047f009caf679ac226980f33f28188983d1b5ccb7792d02e498c31a7710054d4f07934a2646970667358221220bca54fcf1c1714329d133e43e2bcd3e4f07ff64950d7b81997b3d169bac7076a64736f6c634300081b00330000000000000000000000000c9a3dd6b8f28529d72d7f9ce918d493519ee3830000000000000000000000000d52d06ceb8dcdeeb40cfd9f17489b350dd7f8a3000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fd78c84d07dd4ba02fbc287290d9f2db5c56cded000000000000000000000000fde7a256ecc26a41c52d1bba66c267d600cb265b000000000000000000000000d6266547e3d0ae0548f7888d22dbf94407571d8200000000000000000000000042aeb7951103f080caa1983a5af35185dfffbe130000000000000000000000004fe5a6ee0be736cf7ec34c95a55b9d006e6e6be80000000000000000000000008542f0461e89bfa3324b0911c63f57b9de6e3177