801 txs
1.5k calls
constructor
constructor((address asset, string name, string symbol, uint16 managementFee, uint16 performanceFee, uint16 oracleFee, uint24 sharesLockTime, address hurdleRateOracle, address superPositions, address treasury, address signerRelayer, address owner) config)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (uint256)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256 result)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256 result)
claimableDepositRequest
viewfunction claimableDepositRequest(address controller) view returns (uint256)
claimableRedeemRequest
viewfunction claimableRedeemRequest(address controller) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256 assets)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256 shares)
convertToSuperPositions
viewfunction convertToSuperPositions(uint256 superformId, uint256 assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32 result)
DST_CHAINS
viewfunction DST_CHAINS(uint256) view returns (uint64)
dustThreshold
viewfunction dustThreshold() view returns (uint256)
EMERGENCY_ADMIN_ROLE
viewfunction EMERGENCY_ADMIN_ROLE() view returns (uint256)
emergencyShutdown
viewfunction emergencyShutdown() view returns (bool)
gateway
viewfunction gateway() view returns (address)
getVault
viewfunction getVault(uint256 superformId) view returns (tuple vault)
hasAllRoles
viewfunction hasAllRoles(address user, uint256 roles) view returns (bool)
hasAnyRole
viewfunction hasAnyRole(address user, uint256 roles) view returns (bool)
hurdleRate
viewfunction hurdleRate() view returns (uint256)
isOperator
viewfunction isOperator(address controller, address operator) view returns (bool)
isVaultListed
viewfunction isVaultListed(address vaultAddress) view returns (bool)
isVaultListed
viewfunction isVaultListed(uint256 superformId) view returns (bool)
lastFeesCharged
viewfunction lastFeesCharged() view returns (uint256)
lastRedeem
viewfunction lastRedeem(address controller) view returns (uint256)
lastReport
viewfunction lastReport() view returns (uint256)
localWithdrawalQueue
viewfunction localWithdrawalQueue(uint256) view returns (uint256)
managementFee
viewfunction managementFee() view returns (uint16)
managementFeeExempt
viewfunction managementFeeExempt(address controller) view returns (uint256)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (uint256)
MAX_BPS
viewfunction MAX_BPS() view returns (uint256)
MAX_TIME
viewfunction MAX_TIME() view returns (uint256)
maxDeposit
viewfunction maxDeposit(address to) view returns (uint256 assets)
maxMint
viewfunction maxMint(address to) view returns (uint256 shares)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256 shares)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256 assets)
N_CHAINS
viewfunction N_CHAINS() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256 result)
ORACLE_ROLE
viewfunction ORACLE_ROLE() view returns (uint256)
oracleFee
viewfunction oracleFee() view returns (uint16)
oracleFeeExempt
viewfunction oracleFeeExempt(address controller) view returns (uint256)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
pendingDepositRequest
viewfunction pendingDepositRequest(address controller) view returns (uint256)
pendingProcessedShares
viewfunction pendingProcessedShares(address controller) view returns (uint256)
pendingRedeemRequest
viewfunction pendingRedeemRequest(address controller) view returns (uint256)
performanceFee
viewfunction performanceFee() view returns (uint16)
performanceFeeExempt
viewfunction performanceFeeExempt(address controller) view returns (uint256)
positions
viewfunction positions(address) view returns (uint256 averageEntryPrice)
previewDeposit
purefunction previewDeposit(uint256 assets) pure returns (uint256 shares)
previewMint
purefunction previewMint(uint256 shares) pure returns (uint256 assets)
previewRedeem
purefunction previewRedeem(uint256 shares) pure returns (uint256 assets)
previewWithdraw
purefunction previewWithdraw(uint256 assets) pure returns (uint256 shares)
RELAYER_ROLE
viewfunction RELAYER_ROLE() view returns (uint256)
rolesOf
viewfunction rolesOf(address user) view returns (uint256 roles)
SECS_PER_YEAR
viewfunction SECS_PER_YEAR() view returns (uint256)
sharePrice
viewfunction sharePrice() view returns (uint256)
sharePriceWaterMark
viewfunction sharePriceWaterMark() view returns (uint256)
sharesLockTime
viewfunction sharesLockTime() view returns (uint24)
signerRelayer
viewfunction signerRelayer() view returns (address)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool isSupported)
symbol
viewfunction symbol() view returns (string)
THIS_CHAIN_ID
viewfunction THIS_CHAIN_ID() view returns (uint64)
totalAssets
viewfunction totalAssets() view returns (uint256 assets)
totalDebt
viewfunction totalDebt() view returns (uint256 assets)
totalDeposits
viewfunction totalDeposits() view returns (uint256 assets)
totalIdle
viewfunction totalIdle() view returns (uint256 assets)
totalLocalAssets
viewfunction totalLocalAssets() view returns (uint256 assets)
totalSupply
viewfunction totalSupply() view returns (uint256 result)
totalWithdrawableAssets
viewfunction totalWithdrawableAssets() view returns (uint256 assets)
totalXChainAssets
viewfunction totalXChainAssets() view returns (uint256 assets)
treasury
viewfunction treasury() view returns (address)
vaults
viewfunction vaults(uint256) view returns (uint32 chainId, uint256 superformId, address oracle, uint8 decimals, uint128 totalDebt, address vaultAddress)
WITHDRAWAL_QUEUE_SIZE
viewfunction WITHDRAWAL_QUEUE_SIZE() view returns (uint256)
xChainWithdrawalQueue
viewfunction xChainWithdrawalQueue(uint256) view returns (uint256)
addFunction
nonpayablefunction addFunction(bytes4 selector, address implementation, bool forceOverride)
addFunctions
nonpayablefunction addFunctions(bytes4[] selectors, address implementation, bool forceOverride)
addVault
nonpayablefunction addVault(uint32 chainId, uint256 superformId, address vault, uint8 vaultDecimals, address oracle)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
chargeGlobalFees
nonpayablefunction chargeGlobalFees() returns (uint256)
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
deposit
nonpayablefunction deposit(uint256 assets, address to, address controller) returns (uint256 shares)
deposit
nonpayablefunction deposit(uint256 assets, address to) returns (uint256 shares)
donate
nonpayablefunction donate(uint256 assets)
grantRoles
payablefunction grantRoles(address user, uint256 roles) payable
mint
nonpayablefunction mint(uint256 shares, address to, address controller) returns (uint256 assets)
mint
nonpayablefunction mint(uint256 shares, address to) returns (uint256 assets)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[])
onERC1155BatchReceived
nonpayablefunction onERC1155BatchReceived(address operator, address from, uint256[] superformIds, uint256[] values, bytes data) returns (bytes4)
onERC1155Received
nonpayablefunction onERC1155Received(address operator, address from, uint256 superformId, uint256 value, bytes data) returns (bytes4)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
rearrangeWithdrawalQueue
nonpayablefunction rearrangeWithdrawalQueue(uint8 queueType, uint256[30] newOrder)
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address controller) returns (uint256 assets)
removeFunction
nonpayablefunction removeFunction(bytes4 selector)
removeFunctions
nonpayablefunction removeFunctions(bytes4[] selectors)
removeVault
nonpayablefunction removeVault(uint256 superformId)
renounceOwnership
payablefunction renounceOwnership() payable
renounceRoles
payablefunction renounceRoles(uint256 roles) payable
requestDeposit
nonpayablefunction requestDeposit(uint256 assets, address controller, address owner) returns (uint256 requestId)
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
requestRedeem
nonpayablefunction requestRedeem(uint256 shares, address controller, address owner) returns (uint256 requestId)
revokeRoles
payablefunction revokeRoles(address user, uint256 roles) payable
setOperator
nonpayablefunction setOperator(address operator, bool approved) returns (bool success)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address controller) returns (uint256 shares)
events
AddVault
event AddVault(uint64 indexed chainId, address vault)
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
AssessFees
event AssessFees(address indexed controller, uint256 managementFees, uint256 performanceFees, uint256 oracleFees)
Deposit
event Deposit(address indexed by, address indexed owner, uint256 assets, uint256 shares)
DepositRequest
event DepositRequest(address indexed controller, address indexed owner, uint256 indexed requestId, address source, uint256 assets)
EmergencyShutdown
event EmergencyShutdown(bool enabled)
FulfillDepositRequest
event FulfillDepositRequest(address indexed controller, uint256 assets, uint256 shares)
FulfillRedeemRequest
event FulfillRedeemRequest(address indexed controller, uint256 shares, uint256 assets)
OperatorSet
event OperatorSet(address indexed controller, address indexed operator, bool approved)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
RedeemRequest
event RedeemRequest(address indexed controller, address indexed owner, uint256 indexed requestId, address source, uint256 shares)
RemoveVault
event RemoveVault(uint64 indexed chainId, address vault)
RolesUpdated
event RolesUpdated(address indexed user, uint256 indexed roles)
SetManagementFee
event SetManagementFee(uint16 fee)
SetOracleFee
event SetOracleFee(uint16 fee)
SetPerformanceFee
event SetPerformanceFee(uint16 fee)
SetSharesLockTime
event SetSharesLockTime(uint24 time)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
TreasuryUpdated
event TreasuryUpdated(address indexed treasury)
Withdraw
event Withdraw(address indexed by, address indexed to, address indexed owner, uint256 assets, uint256 shares)
errors
AllowanceOverflow
error AllowanceOverflow()
AllowanceUnderflow
error AllowanceUnderflow()
AlreadyInitialized
error AlreadyInitialized()
DelegateCallNotAllowed
error DelegateCallNotAllowed()
DepositMoreThanMax
error DepositMoreThanMax()
DuplicateVaultInOrder
error DuplicateVaultInOrder()
InsufficientAllowance
error InsufficientAllowance()
InsufficientAvailableAssets
error InsufficientAvailableAssets()
InsufficientBalance
error InsufficientBalance()
InvalidController
error InvalidController()
InvalidOperator
error InvalidOperator()
InvalidPermit
error InvalidPermit()
InvalidQueueType
error InvalidQueueType()
InvalidSuperformId
error InvalidSuperformId()
InvalidVaultAddress
error InvalidVaultAddress()
InvalidZeroAddress
error InvalidZeroAddress()
InvalidZeroAssets
error InvalidZeroAssets()
InvalidZeroShares
error InvalidZeroShares()
MaxQueueSizeExceeded
error MaxQueueSizeExceeded()
MintMoreThanMax
error MintMoreThanMax()
MissingVaultFromCurrentQueue
error MissingVaultFromCurrentQueue()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NewVaultNotInCurrentQueue
error NewVaultNotInCurrentQueue()
NoHandoverRequest
error NoHandoverRequest()
PermitExpired
error PermitExpired()
RedeemMoreThanMax
error RedeemMoreThanMax()
RedeemNotProcessed
error RedeemNotProcessed()
ReentrantCall
error ReentrantCall()
RequestNotSettled
error RequestNotSettled()
SharesBalanceNotZero
error SharesBalanceNotZero()
SharesLocked
error SharesLocked()
StaleSharePrice
error StaleSharePrice()
TotalSupplyOverflow
error TotalSupplyOverflow()
Unauthorized
error Unauthorized()
VaultAlreadyListed
error VaultAlreadyListed()
VaultCountMismatch
error VaultCountMismatch()
VaultShutdown
error VaultShutdown()
WithdrawMoreThanMax
error WithdrawMoreThanMax()
creation bytecode
0x608060405234610831576154e48038038061001981610835565b928339810190602081830312610831578051906001600160401b038211610831570190610180828203126108315760405161018081016001600160401b038111828210176106da5760405261006d8361085a565b815260208301516001600160401b038111610831578261008e91850161086e565b60208201908152604084015190926001600160401b038211610831576100b591850161086e565b90604081019182526100c9606085016108d7565b606082019081526100dc608086016108d7565b91608081019283526100f060a087016108d7565b60a0820190815260c08701519262ffffff841684036108315760c0830193845260e0880151956001600160a01b03871687036108315760e084019687526101008901516001600160a01b0381168103610831576101008501526101566101208a0161085a565b9061012085019182526101816101606101726101408d0161085a565b9b61014088019c8d520161085a565b610160860190815260016005556202a30060075560405190999060e081016001600160401b038111828210176106da57604052600181526089602082015260386040820152600a6060820152612105608082015261a4b160a082015261a86a60c08201525f5b600181106107e857505f905f5b600381106107b757505060525560017f4fa563f6ad0f2ba943d6492a5a9c8ec6e039cc68444fb93b0b51ea1d78a61ef855307fa203c8cf3ff5695cb1e2caee14320584cc3e0e4b039b8fa3ae49b5e0568c699d558551600b80546001600160a01b0319166001600160a01b0392909216919091179055518051906001600160401b0382116106da57600e5490600182811c921680156107ad575b60208310146106bc5781601f84931161075f575b50602090601f83116001146106f9575f926106ee575b50508160011b915f199060031b1c191617600e555b518051906001600160401b0382116106da57600f54600181811c911680156106d0575b60208210146106bc57601f8111610663575b50602090601f83116001146105f35793601c9383602098945f98946004988a926105e8575b50508160011b9189199060031b1c191617600f555b51600a8054600160581b600160f81b031916605892831b600160581b600160f81b031617808255821c6001600160a01b039081168952878a526040808a2030808c52908c52818b20805460ff1916600190811790915593549151938452909469ffffff000000000000009466ffff00000000009464ffff0000009462ffff00949289901c16907fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267908f90a35160081b169b5160181b16935160281b16985160381b169869ffffff00000000000000199166ffffffffffff001916171617978789881717600a5542604d5560018060a01b0390511660018060a01b0319604c541617604c5560018060a01b0390511663313ce56784525afa5f51906101008210601f3d11161680156105dd5760ff91025b1660ff1993909316171717600a55600680546001600160401b0346166001600160401b03199091161790555f5b6007810361058b575042604e5580516001600160a01b0316638b78c6d8198190555f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a360018060a01b03905116638b78c6d8600c525f526020600c206001815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a351600c80546001600160a01b0319166001600160a01b0392909216919091179055600a5460ff90811690811161057757604d811161057757600a0a604f55604051614be790816108fd8239f35b634e487b7160e01b5f52601160045260245ffd5b60078110156105c95760018060401b038160021c6051015460c08360061b161c165f5260576020528060405f20555f19811461057757600101610499565b634e487b7160e01b5f52603260045260245ffd5b505060ff601261046c565b015190505f80610327565b90601f19831691600f5f52815f20925f5b81811061064b5750845f989460049894601c989460209c9860019510610633575b505050811b01600f5561033c565b01518a1960f88460031b161c191690555f8080610625565b92936020600181928786015181550195019301610604565b600f5f526106ac907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802601f850160051c810191602086106106b2575b601f0160051c01906108e6565b5f610302565b909150819061069f565b634e487b7160e01b5f52602260045260245ffd5b90607f16906102f0565b634e487b7160e01b5f52604160045260245ffd5b015190505f806102b8565b600e5f9081528281209350601f198516905b818110610747575090846001959493921061072f575b505050811b01600e556102cd565b01515f1960f88460031b161c191690555f8080610721565b9293602060018192878601518155019501930161070b565b600e5f526107a7907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd601f850160051c810191602086106106b257601f0160051c01906108e6565b5f6102a2565b91607f169161028e565b81519192909160019160209161ffff16600685901b90811b6001600160401b0390911b1990911617930191016101f4565b5f805b60048110610801575060518201556001016101e7565b835160209094019361ffff16600682901b90811b6001600160401b0390911b1990921691909117906001016107eb565b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176106da57604052565b51906001600160a01b038216820361083157565b81601f82011215610831578051906001600160401b0382116106da5761089d601f8301601f1916602001610835565b9282845260208383010111610831575f5b8281106108c257505060205f918301015290565b806020809284010151828287010152016108ae565b519061ffff8216820361083157565b8181106108f1575050565b5f81556001016108e656fe60806040526004361061449c575f3560e01c806288d3e51461052757806301afcf6f146106c157806301e1d114146106bc57806301ffc9a7146106b757806302ba2830146106b257806306fdde03146106ad57806307a2d13a146106a857806307e2cea5146106a3578063081d89111461069e578063095ea7b3146106995780630a28a477146104fa578063116191b61461069457806318160ddd1461068f578063183a4f6e1461068a5780631a1b4cbc146106855780631a8bdc95146106805780631b6991c71461067b5780631c10893f146106765780631cd64df41461067157806323b872dd1461066c5780632569296214610667578063262abe7714610662578063269499841461065d57806328998af0146106585780632de94807146106535780632e2d29841461064e5780632e5f47011461064957806330b88eef14610644578063313ce5671461063f5780633403c2fc1461063a5780633644e5151461063557806338d52e0f1461063057806339378cc31461062b578063402d267d1461057c57806346497776146106265780634a4ee7b1146106215780634cdad506146104fa5780634f2a07851461061c5780635088017414610617578063514e62fc1461061257806353dc1dd31461060d57806354d1f13d14610608578063558a72971461060357806355f57510146105fe57806360e65389146105f957806361d027b3146105f45780636e553f65146105ef5780636e76fc8f146105ea57806370a08231146105e5578063715018a6146105e057806375b238fc146105db5780637d41c86e146105d65780637d882097146105d15780637ecebe00146105cc5780638297f431146105c757806385b77f45146105c257806387269729146105bd57806387788782146105b85780638c64ea4a146105b35780638da5cb5b146105ae578063926d7d7f146105a95780639403b634146105a457806394bf804d1461059f57806395d89b411461059a5780639aa7df9414610595578063a6f7f5d614610590578063a9059cbb1461058b578063aa8e79de14610586578063ac9650d814610581578063aff947c41461057c578063b3d7f6b9146104fa578063b460af9414610577578063b6363cf214610572578063ba0876521461056d578063bbc5d53d14610568578063bbe875de14610563578063bc197c811461055e578063c0a9444c14610559578063c0d5f3c114610554578063c3535b521461054f578063c37029891461054a578063c46bb80e14610545578063c63d75b614610540578063c6e6f5921461053b578063ce96cb7714610536578063d45d189c14610531578063d505accf1461052c578063d905777e14610527578063da39b3e714610522578063dd62ed3e1461051d578063e30ec4fa14610518578063e4128b7114610513578063e8462e8f1461050e578063eaadd97614610509578063ec87621c14610504578063eeda387f146104ff578063ef8b30f7146104fa578063f04e283e146104f5578063f14faf6f146104f0578063f23a6e61146104eb578063f28d67c8146104e6578063f2fde38b146104e1578063f480a76e146104dc578063f8ffd889146104d7578063f9cd3ceb146104d2578063fa80c79f146104cd578063fc7b9c18146104c8578063fd967f47146104c35763fee81cf40361449c57613331565b613315565b6132f5565b613027565b613003565b612f90565b612f68565b612f29565b612ef2565b612caa565b612c42565b612bf1565b610947565b612b06565b612aeb565b61286b565b61284e565b612822565b612808565b6127dd565b6127c4565b6106db565b612623565b612608565b6125e3565b6125c5565b61258a565b612547565b61250d565b6124f0565b6124d6565b61249b565b6123ec565b612278565b61223d565b61217f565b612136565b61203c565b611015565b611faa565b611d2a565b611cb6565b611c92565b611c6c565b611b89565b611b5d565b611a1e565b611a03565b6119d7565b61194e565b61192a565b611900565b611818565b6117fe565b6117c8565b611793565b6115e6565b6115cb565b611582565b61154d565b611532565b611506565b6114da565b6114b4565b611479565b6113c8565b611384565b611349565b611305565b611107565b611099565b61106d565b611050565b610fda565b610fb2565b610f22565b610efd565b610ed8565b610e27565b610de4565b610dcb565b610d6a565b610d4c565b610d2f565b610cf4565b610cab565b610bcd565b610b88565b610b22565b610ac7565b610aad565b6109c3565b6109a9565b610984565b61095c565b6108d8565b6108bb565b6108a0565b610882565b610857565b6107f5565b6107c4565b610798565b61076c565b6001600160a01b038116036106d757565b5f80fd5b346106d75760203660031901126106d757602061071a6004356106fd816106c6565b6001600160a01b03165f9081526003602052604090206001015490565b604051908152f35b634e487b7160e01b5f52603260045260245ffd5b601e81101561074757602e01905f90565b610722565b601e81101561074757601001905f90565b601e8210156107475701905f90565b346106d75760203660031901126106d757600435601e8110156106d75760209060100154604051908152f35b346106d7575f3660031901126106d757602061071a6133b2565b6001600160e01b03198116036106d757565b346106d75760203660031901126106d75760206107eb6004356107e6816107b2565b61347e565b6040519015158152f35b346106d7575f3660031901126106d7576020604051601e8152f35b9190916020815282518060208301525f5b818110610841575060409293505f838284010152601f8019910116010190565b8060208092870101516040828601015201610821565b346106d7575f3660031901126106d75761087e6108726134a0565b60405191829182610810565b0390f35b346106d75760203660031901126106d757602061071a600435613563565b346106d7575f3660031901126106d757602060405160048152f35b346106d7575f3660031901126106d7576020604e54604051908152f35b346106d75760403660031901126106d7576004356108f5816106c6565b60243590602052637f5e9f20600c52335f52806034600c20555f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b346106d75760203660031901126106d7575f80fd5b346106d7575f3660031901126106d757600d546040516001600160a01b039091168152602090f35b346106d7575f3660031901126106d75760206805345cdf77eb68f44c54604051908152f35b60203660031901126106d7576109c1600435336144e1565b005b346106d75760403660031901126106d75761087e610a9d600435602435905f52605460205260405f2090610a8b610a7b600460405194610a02866122c7565b805463ffffffff1686526001810154602087015260028101546001600160a01b0381166040880152610a4690610a3c905b60a01c60ff1690565b60ff166060880152565b610a6d610a5d60038301546001600160801b031690565b6001600160801b03166080880152565b01546001600160a01b031690565b6001600160a01b031660a0840152565b600b546001600160a01b031691613c9a565b6040519081529081906020820190565b346106d7575f3660031901126106d757602061071a613601565b346106d75760203660031901126106d757600435610ae4816107b2565b610afb5f80516020614b5283398151915254613f80565b6001600160e01b0319165f908152605d6020526040902080546001600160a01b0319169055005b60403660031901126106d757600435610b3a816106c6565b60243590610b46613f99565b638b78c6d8600c525f526020600c2090815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3005b346106d75760403660031901126106d7576020610bc3600435610baa816106c6565b602435918291638b78c6d8600c525f526020600c205490565b1614604051908152f35b346106d75760603660031901126106d757600435610bea816106c6565b602435610bf6816106c6565b604435908260601b33602052637f5e9f208117600c526034600c209081549160018301610c87575b506387a211a2915017600c526020600c208054808411610c7a5783900390555f526020600c20818154019055602052600c5160601c9060018060a01b03165f80516020614b92833981519152602080a360405160018152602090f35b63f4d678b85f526004601cfd5b828511610c9e57846387a211a2930390555f610c1e565b6313be252b5f526004601cfd5b5f3660031901126106d75763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b346106d75760203660031901126106d757600435610d11816106c6565b60018060a01b03165f526059602052602060405f2054604051908152f35b346106d7575f3660031901126106d7576020600754604051908152f35b346106d7575f3660031901126106d75760206040516301e185588152f35b346106d75760203660031901126106d757602061071a600435610d8c816106c6565b638b78c6d8600c525f526020600c205490565b60609060031901126106d75760043590602435610dbb816106c6565b90604435610dc8816106c6565b90565b346106d757602061071a610dde36610d9f565b91613694565b346106d7575f3660031901126106d757602062ffffff600a5460381c16604051908152f35b6044359081151582036106d757565b6024359081151582036106d757565b346106d75760603660031901126106d757600435610e44816107b2565b602435610e50816106c6565b610e58610e09565b610e6f5f80516020614b5283398151915254613f80565b15610ead575b6001600160e01b03199091165f908152605d6020526040902080546001600160a01b0319166001600160a01b03909216919091179055005b6001600160e01b031982165f908152605d60205260409020546001600160a01b031615610e75575f80fd5b346106d7575f3660031901126106d7576020610ef2613737565b60ff60405191168152f35b346106d7575f3660031901126106d757602060ff600a5460501c166040519015158152f35b346106d7575f3660031901126106d75760a0610f3c6134a0565b60208151910120604051907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f825260208201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66040820152466060820152306080820152206040518091602082019082520390f35b346106d7575f3660031901126106d757600b546040516001600160a01b039091168152602090f35b346106d75760203660031901126106d757600435610ff7816106c6565b60018060a01b03165f52605a602052602060405f2054604051908152f35b346106d75760203660031901126106d757600435611032816106c6565b60018060a01b03165f526002602052602060405f2054604051908152f35b346106d7575f3660031901126106d7576020604f54604051908152f35b60403660031901126106d7576109c1600435611088816106c6565b60243590611094613f99565b6144e1565b346106d75760203660031901126106d75760206107eb6004356110bb816106c6565b6001600160a01b03165f90815260556020526040902054151590565b6004359060ff821682036106d757565b6084359060ff821682036106d757565b6064359060ff821682036106d757565b346106d7576103e03660031901126106d7576111216110d7565b366103e4116106d75760ff90611135613f58565b16806112e8575060105b611147613748565b61114f613748565b905f915f905f5b601e811061129d57505f5b601e81106112235750818403611214575f5b8481106111bf57855f5b601e811061118757005b806111b961119660019361377f565b356111a1838661075d565b90919082549060031b91821b915f19901b1916179055565b0161117d565b5f805b8481106111e7575b50156111d857600101611173565b6322b7fecd60e11b5f5260045ffd5b6111f1838761376b565b516111fc828661376b565b511461120a576001016111c2565b505060015f6111ca565b632b95a05560e21b5f5260045ffd5b61122c8161377f565b3561123a575b600101611161565b5f5b83811061126c57508061125060019261377f565b3561126461125d866135f3565b958561376b565b529050611232565b611276818461376b565b516112808361377f565b351461128e5760010161123c565b63e6491cc960e01b5f5260045ffd5b806112b76112ad6001938961075d565b90549060031b1c90565b6112c2575b01611156565b6112cf6112ad828961075d565b6112e26112db886135f3565b978761376b565b526112bc565b6001036112f657602e61113f565b631d3a143360e21b5f5260045ffd5b346106d75760403660031901126106d7576020600435611324816106c6565b61133e60243591638b78c6d8600c525f526020600c205490565b161515604051908152f35b346106d75760203660031901126106d757600435611366816106c6565b60018060a01b03165f526001602052602060405f2054604051908152f35b5f3660031901126106d75763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b346106d75760403660031901126106d7576004356113e5816106c6565b6113ed610e18565b6001600160a01b0382169133831461146a57335f9081526004602090815260408083206001600160a01b039094168352929052209015159060ff1981541660ff83161790556040519081527fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa26760203392a360405160018152602090f35b63ccea9e6f60e01b5f5260045ffd5b346106d75760203660031901126106d757600435611496816106c6565b60018060a01b03165f526008602052602060405f2054604051908152f35b346106d7575f3660031901126106d75760206001600160401b0360065416604051908152f35b346106d7575f3660031901126106d757600a5460405160589190911c6001600160a01b03168152602090f35b346106d75760403660031901126106d757602061071a60043560243561152b816106c6565b3391613694565b346106d7575f3660031901126106d757602060405160028152f35b346106d75760203660031901126106d757602061071a60043561156f816106c6565b6387a211a2600c525f526020600c205490565b5f3660031901126106d757611595613f99565b5f638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f638b78c6d81955005b346106d7575f3660031901126106d757602060405160018152f35b346106d7576115f436610d9f565b6115ff929192613fa8565b600a549060ff8260501c16611784576001600160a01b0384165f81815260536020526040902054909260381c62ffffff16810190811061177f574210611770578215611761576001600160a01b0381165f90815260046020908152604080832033845290915290205460ff161561175957915b6387a211a28360601b17600c526020600c2090815490818111610c7a575f957f1fdc681a13d8c5da54e301c7ce6542dcde4581e4725043fdab2db12ddc574506938261174b940390553087526020600c2082815401905581602052600c5160601c9560018060a01b031695865f80516020614b92833981519152602080a3611732611717836117118460018060a01b03165f52600160205260405f2090565b546133a5565b6001600160a01b039092165f90815260016020526040902090565b5560408051338152602081019290925290918291820190565b0390a46040515f8152602090f35b503391611672565b635a870a2560e01b5f5260045ffd5b637a1cb75d60e01b5f5260045ffd5b613381565b6310e126e160e21b5f5260045ffd5b346106d7575f3660031901126106d7576009546001600160801b0381169060801c810180911161177f57602090604051908152f35b346106d75760203660031901126106d7576004356117e5816106c6565b6338377508600c525f52602080600c2054604051908152f35b346106d7575f3660031901126106d757602061071a6137a2565b346106d75761182636610d9f565b61182e613fa8565b60ff600a5460501c16611784576001600160a01b03169133830361146a5780156118f157600b5461186d908290309033906001600160a01b0316614367565b6001600160a01b0382165f81815260208190526040902054909382820191821061177f575f858152602081815260408083209490945583513381529081018590526118e69691937fbb58420bb8ce44e11b84e214cc0de10ce5e7c24d0355b2815c3d758b514cae7291a46118e081613926565b916140e0565b6040515f8152602090f35b63eb2b582f60e01b5f5260045ffd5b346106d7575f3660031901126106d757602061071a611925611920613737565b6137fd565b613563565b346106d7575f3660031901126106d757602061ffff600a5460181c16604051908152f35b346106d75760203660031901126106d757600480355f9081526054602090815260409182902080546001820154600283015460038401549390960154855163ffffffff9093168352938201526001600160a01b038086169482019490945260a094851c60ff1660608201526001600160801b03909116608082015291169181019190915260c090f35b346106d7575f3660031901126106d757638b78c6d819546040516001600160a01b039091168152602090f35b346106d7575f3660031901126106d757602060405160108152f35b346106d75760203660031901126106d7576004355f60a0604051611a41816122c7565b82815282602082015282604082015282606082015282608082015201525f52605460205261087e60405f20611af7611ae7600460405193611a81856122c7565b805463ffffffff1685526001810154602086015260028101546001600160a01b0381166040870152611ac090611ab690610a33565b60ff166060870152565b610a6d611ad760038301546001600160801b031690565b6001600160801b03166080870152565b6001600160a01b031660a0830152565b6040519182918291909160a060c082019363ffffffff815116835260208101516020840152600180831b03604082015116604084015260ff60608201511660608401526001600160801b03608082015116608084015281600180821b0391015116910152565b346106d75760403660031901126106d757602061071a600435602435611b82816106c6565b3391613952565b346106d7575f3660031901126106d7576040515f600f548060011c9060018116908115611c62575b602083108214611c4e578285526020850191908115611c355750600114611be3575b61087e8461087281860382612302565b600f5f9081529250907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8025b818410611c215750500161087282611bd3565b805484840152602090930192600101611c0e565b60ff191682525090151560051b01905061087282611bd3565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611bb1565b346106d7575f3660031901126106d75760206001600160801b0360095416604051908152f35b346106d7575f3660031901126106d757602061ffff600a5460081c16604051908152f35b346106d75760403660031901126106d757600435611cd3816106c6565b602435906387a211a2600c52335f526020600c208054808411610c7a5783900390555f526020600c20818154019055602052600c5160601c335f80516020614b92833981519152602080a360405160018152602090f35b346106d7575f3660031901126106d757611d42613f58565b61087e611d53611925611920613737565b604f5490611d63604e544261380e565b91611d8d611d6f6133b2565b916805345cdf77eb68f44c5490611d87611920613737565b91613bc7565b90611d98848261381b565b92611df3611dc2611dca611dc2600a549761ffff611dbb8a61ffff9060081c1690565b1690613b43565b612710900490565b95611ded611de6611ddb8a8861381b565b9260281c61ffff1690565b61ffff1690565b90613b43565b92611dfe84866133a5565b95611e2682611e185f96611e12898b6133a5565b906133a5565b611e2142604e55565b613851565b915f8313611ecb575b5050505083611ea4575b604051925f52602052604052307fa443e1db11cb46c65620e8e21d4830a6b9b444fa4c350f0dd0024b8a5a6b6ef560605fa26040525f606052611e80611925611920613737565b80604f5410611e9b575b506040519081529081906020820190565b604f555f611e8a565b600a54611ec69060581c6001600160a01b0316611ec086613926565b90614193565b611e39565b611eec91611ee7611dc292611ee19a979a6137a2565b9061381b565b613b43565b91604f541080611f43575b611f12575b505083611f08916133a5565b925f808080611e2f565b611f08929550611f28611f3b92611dc29261380e565b600a54611ee19060181c61ffff16611de6565b93905f611efc565b50818111611ef7565b9181601f840112156106d7578235916001600160401b0383116106d7576020808501948460051b0101116106d757565b60206003198201126106d757600435906001600160401b0382116106d757611fa691600401611f4c565b9091565b346106d757611fb836611f7c565b9060205f528160205281156120375760409160051b9081818437818301915b83518201935f602060408401968035918291018837389087305af41561202f578160208267ffffffffffffffe094603f945201953d90523d5f606083013e3d01011690828410156120285790611fd7565b604082015ff35b3d5f803e3d5ffd5b60405ff35b346106d75761204a36610d9f565b612055929192613fa8565b6002600554146121045760026005556001600160a01b0381165f9081526003602052604090206001015461208890613563565b82116120f55761087e926120df9261209f83614526565b60018060a01b0383165f5260036020526120d960405f208260206040516120c5816122e7565b600184549485835201549182910152614a77565b90614717565b6001600555604051908152918291506020820190565b6324da507f60e21b5f5260045ffd5b6337ed32e85f526004601cfd5b60409060031901126106d757600435612129816106c6565b90602435610dc8816106c6565b346106d757602060ff61217361214b36612111565b6001600160a01b039182165f9081526004865260408082209290931681526020919091522090565b54166040519015158152f35b346106d75761218d36610d9f565b612198929192613fa8565b6002600554146121045760026005556001600160a01b0381165f90815260036020526040902060010154821161222e5761087e92612218926121d983614526565b60018060a01b0383165f52600360205261221360208260405f206040516121ff816122e7565b600182549283835201549384910152613bc7565b614717565b5060016005556040519081529081906020820190565b63232b212d60e11b5f5260045ffd5b346106d75760203660031901126106d75760043561225a816106c6565b60018060a01b03165f52605c602052602060405f2054604051908152f35b346106d75760203660031901126106d757600435612295816106c6565b60018060a01b03165f526058602052602060405f2054604051908152f35b634e487b7160e01b5f52604160045260245ffd5b60c081019081106001600160401b038211176122e257604052565b6122b3565b604081019081106001600160401b038211176122e257604052565b90601f801991011681019081106001600160401b038211176122e257604052565b6001600160401b0381116122e25760051b60200190565b9080601f830112156106d757813561235181612323565b9261235f6040519485612302565b81845260208085019260051b8201019283116106d757602001905b8282106123875750505090565b813581526020918201910161237a565b81601f820112156106d7578035906001600160401b0382116122e257604051926123cb601f8401601f191660200185612302565b828452602083830101116106d757815f926020809301838601378301015290565b346106d75760a03660031901126106d7576124086004356106c6565b602435612414816106c6565b6044356001600160401b0381116106d75761243390369060040161233a565b506064356001600160401b0381116106d75761245390369060040161233a565b506084356001600160401b0381116106d75761087e9161247a612480923690600401612397565b5061387e565b6040516001600160e01b031990911681529081906020820190565b346106d75760203660031901126106d7576004356124b8816106c6565b60018060a01b03165f52605b602052602060405f2054604051908152f35b346106d7575f3660031901126106d757602061071a61390a565b346106d7575f3660031901126106d7576020604d54604051908152f35b346106d75760203660031901126106d75760043561252a816106c6565b60018060a01b03165f525f602052602060405f2054604051908152f35b346106d75760203660031901126106d75760043560078110156106d7576051600282901c015460405160069290921b60c0161c6001600160401b03168152602090f35b346106d75760203660031901126106d7576004356125a7816106c6565b60018060a01b03165f526002602052602061071a60405f2054613926565b346106d75760203660031901126106d757602061071a600435613926565b346106d75760203660031901126106d757602061071a6119256004356106fd816106c6565b346106d7575f3660031901126106d757602060405160078152f35b346106d75760e03660031901126106d757600435612640816106c6565b60243561264c816106c6565b60643560443561265a6110e7565b9260a4359160c43561266a6134a0565b60208151910120938542116127b75760c0966040519860018060a01b031697889560018060a01b03169965383775081901600e52865f526020600c2098895480997f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452602084019081528d604085017fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc68152606086019b468d52608087019330855260a08820602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988525252888a525260a082015220604e526042602c205f5260ff1660205260405260605260208060805f60015afa93853d51036127aa577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594602094019055856303faf4f960a51b176040526034602c2055a3005b63ddafbaef5f526004601cfd5b631a15a3cc5f526004601cfd5b346106d757602061071a6127d736610d9f565b91613952565b346106d7576127eb36612111565b602052637f5e9f20600c525f5260206034600c2054604051908152f35b346106d7575f3660031901126106d757602061071a613a0c565b346106d75760203660031901126106d757600435601e8110156106d757602090602e0154604051908152f35b346106d7575f3660031901126106d7576020605054604051908152f35b346106d75760203660031901126106d757600435612887613f58565b8015612adc576128a76128a2825f52605460205260405f2090565b61358f565b906128db6128c86128c36128a2845f52605460205260405f2090565b613d56565b600b546001600160a01b03169084613e16565b60505410612acd5761291160a06129026128f9855163ffffffff1690565b63ffffffff1690565b9301516001600160a01b031690565b612943612926835f52605460205260405f2090565b60045f918281558260018201558260028201558260038201550155565b6001600160a01b0381165f908152605560205260408120556001600160401b036129846129786006546001600160401b031690565b6001600160401b031690565b9316928303612a4e57612995613abe565b915f5b601e81036129ee575b5050600b545f80516020614b7283398151915292506129e991906129cf9082906001600160a01b03166142f7565b6040516001600160a01b0390911681529081906020820190565b0390a2005b816129f98286613791565b5114612a0d57612a08906135f3565b612998565b5f80516020614b7283398151915293506129e9929150612a2f612a3f9161074c565b8154905f199060031b1b19169055565b612a47614275565b905f6129a1565b612a56613a88565b915f5b601e8103612a7d575b50505f80516020614b7283398151915291506129e9906129cf565b81612a888286613791565b5114612a9c57612a97906135f3565b612a59565b5f80516020614b7283398151915293506129e9929150612a2f612abe91610736565b612ac66141f3565b905f612a62565b6304fcd38f60e11b5f5260045ffd5b634620307560e11b5f5260045ffd5b346106d7575f3660031901126106d757602060405160088152f35b346106d75760603660031901126106d7576004356001600160401b0381116106d757612b36903690600401611f4c565b9060243591612b44836106c6565b612b4c610e09565b15905f5b818110612b5957005b612b64818386613af4565b3590612b6f826107b2565b83612b875f80516020614b5283398151915254613f80565b612bc6575b6001600160e01b03199091165f908152605d6020526040902080546001600160a01b0319166001600160a01b038716179055600101612b50565b6001600160e01b031982165f908152605d60205260409020546001600160a01b031615612b8c575f80fd5b60203660031901126106d757600435612c09816106c6565b612c11613f99565b63389a75e1600c52805f526020600c209081544211612c35575f6109c192556140a3565b636f5e88185f526004601cfd5b346106d75760203660031901126106d757612c76600435612c718160018060a01b03600b541630903390614367565b6143b3565b6001600160801b03612c8d60095492828416613b23565b6fffffffffffffffffffffffffffffffff19909216911617600955005b346106d75760a03660031901126106d757612cc66004356106c6565b602435612cd2816106c6565b604435906084356001600160401b0381116106d757612cf5903690600401612397565b600d54612d12906001600160a01b03165b6001600160a01b031690565b6040516330c8472f60e01b8152602081600481855afa908115612eed575f91612ebe575b506001600160a01b03163303612eb0578151928315159182612e99575b5050612d6c575b60405163f23a6e6160e01b8152602090f35b602080612d7d938301019101613b04565b6001600160a01b0390911691908015612d5a576003612e10612e0183612e3d96612dda612dbf612daf612e23986143b3565b60095460801c613b23565b613b23565b6001600160801b036009549181199060801b16911617600955565b612df4612dee83612de96133b2565b61380e565b836143d8565b81612e45575b50506143b3565b935f52605460205260405f2090565b0191612dba83546001600160801b031690565b6001600160801b03166001600160801b0319825416179055565b5f8080612d5a565b81612e8b612e7083612e6a612e929660018060a01b03165f52605c60205260405f2090565b546143fb565b6001600160a01b039092165f908152605c6020526040902090565b5530614193565b5f80612dfa565b6001600160a01b0391821691161490505f80612d53565b6282b42960e81b5f5260045ffd5b612ee0915060203d602011612ee6575b612ed88183612302565b810190613869565b5f612d36565b503d612ece565b613376565b346106d75760203660031901126106d7576004355f526054602052602060018060a01b03600460405f200154161515604051908152f35b60203660031901126106d757600435612f41816106c6565b612f49613f99565b8060601b15612f5b576109c1906140a3565b637448fbae5f526004601cfd5b346106d7575f3660031901126106d757600c546040516001600160a01b039091168152602090f35b346106d757612f9e36611f7c565b5f5b818110612fa957005b80612fb76001928486613af4565b35612fc1816107b2565b612fd85f80516020614b5283398151915254613f80565b6001600160e01b0319165f908152605d6020526040902080546001600160a01b031916905501612fa0565b346106d7575f3660031901126106d757602061ffff600a5460281c16604051908152f35b346106d75760a03660031901126106d75760043563ffffffff8116908181036106d7576024356044359161305a836106c6565b6130626110f7565b9060843590613070826106c6565b613078613f58565b8315612adc576001600160a01b0385165f908152605560205260409020546132e657613161926130cc61314d926130b7875f52605460205260405f2090565b9063ffffffff1663ffffffff19825416179055565b8460016130e1825f52605460205260405f2090565b015561311b8660046130fb885f52605460205260405f2090565b0180546001600160a01b0319166001600160a01b03909216919091179055565b600261312f865f52605460205260405f2090565b01805460ff60a01b191660a09290921b60ff60a01b16919091179055565b60026130fb845f52605460205260405f2090565b6131766128a2825f52605460205260405f2090565b600b546001600160c01b039161319f9161319a91906001600160a01b03169061440b565b614484565b16156106d7576001600160a01b0382165f9081526055602052604090208190555f906131d66129786006546001600160401b031690565b8403613292576131e4613abe565b905f5b601e810361325a575b5050600b5461320a915083906001600160a01b0316614335565b1561324b576040516001600160a01b0390911681527f1b8616e576455c2ad2ef0e238b4dee43e6cf788f75312282b76436860ebb54189080602081016129e9565b6315ebf63560e01b5f5260045ffd5b6132648184613791565b511561327857613273906135f3565b6131e7565b61328893506111a191925061074c565b60015f80806131f0565b61329a613a88565b905f5b601e81036132ae575b50505061320a565b6132b88184613791565b51156132cc576132c7906135f3565b61329d565b6132dc93506111a1919250610736565b60015f80806132a6565b6385e999a960e01b5f5260045ffd5b346106d7575f3660031901126106d757602060095460801c604051908152f35b346106d7575f3660031901126106d75760206040516127108152f35b346106d75760203660031901126106d75760043561334e816106c6565b63389a75e1600c525f52602080600c2054604051908152f35b908160209103126106d7575190565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b9062015180820180921161177f57565b9190820180921161177f57565b600d546133c7906001600160a01b0316612d06565b60405163f08c58a360e01b815290602082600481845afa918215612eed575f92613459575b50602060049160405192838092631f4814f160e11b82525afa8015612eed57610dc892613420925f92613428575b506133a5565b611e1261390a565b61344b91925060203d602011613452575b6134438183612302565b810190613367565b905f61341a565b503d613439565b6004919250613476602091823d8411613452576134438183612302565b9291506133ec565b5f91906001600160e01b031916630271189760e51b1461349a57565b60019150565b604051905f600e548060011c91600182168015613559575b602084108114611c4e578386528592602084019190811561354057506001146134eb575b506134e992500383612302565b565b600e5f90815291507fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5b84831061352957506134e99350015f6134dc565b805482840152869350602090920191600101613515565b60ff19168252506134e993151560051b0190505f6134dc565b92607f16926134b8565b61356b6133b2565b906001820180921161177f57610dc89160016805345cdf77eb68f44c540191613bc7565b906134e960405161359f816122c7565b835463ffffffff1681526001840154602082015260028401546001600160a01b038116604083015260a090811c60ff16606083015290938491906135e590600490611ac0565b6001600160a01b0316910152565b5f19811461177f5760010190565b6001600160801b03600954165f60018060a01b03600b54165b601e820361362757505090565b909161364d6128a26136388561074c565b90549060031b1c5f52605460205260405f2090565b60a08101516001600160a01b03161561368d57828161366e61367493613d56565b90613ec6565b810180911161177f5761368790926135f3565b9061361a565b5091505090565b61369c613fa8565b60ff600a5460501c16611784576136c0826387a211a2600c525f526020600c205490565b926136ca81614526565b6001600160a01b0381165f8181526002602052604090205490919083116137285761371a81610dc895613723945f52600260205261371460405f208760206040516120c5816122e7565b86614573565b50948591613fea565b614071565b63b3c61a8360e01b5f5260045ffd5b60ff600a541660ff811161177f5790565b6040516103e0919061375a8382612302565b601e815291601f1901366020840137565b80518210156107475760209160051b010190565b601e8110156107475760051b60240190565b90601e8110156107475760051b0190565b604c54600b546040516337cef79160e01b81526001600160a01b0391821660048201529160209183916024918391165afa908115612eed575f916137e4575090565b610dc8915060203d602011613452576134438183612302565b60ff16604d811161177f57600a0a90565b9190820391821161177f57565b8181029291811591840414171561177f57565b634e487b7160e01b5f52601260045260245ffd5b811561384c570490565b61382e565b81810392915f13801582851316918412161761177f57565b908160209103126106d75751610dc8816106c6565b600d54613893906001600160a01b0316612d06565b6040516330c8472f60e01b8152602081600481855afa908115612eed575f916138eb575b506001600160a01b03163303612eb0576001600160a01b03166001600160a01b0390911603612eb05763bc197c8160e01b90565b613904915060203d602011612ee657612ed88183612302565b5f6138b7565b613912613601565b61391a613a0c565b810180911161177f5790565b6805345cdf77eb68f44c54906001820180921161177f57610dc891600161394b6133b2565b0191613bc7565b61395a613fa8565b60ff600a5460501c166117845761397e826387a211a2600c525f526020600c205490565b61398784614526565b60018060a01b03841692835f5260026020526139a660405f2054613926565b83116139fd57846139ec916139f4955f526002602052846139e760208260405f206040516139d3816122e7565b600182549283835201549384910152614a77565b614573565b949050613fea565b610dc881614071565b636a69595960e01b5f5260045ffd5b600b545f9081906001600160a01b03165b601e8203613a2a57505090565b9091601e83101561074757613a4e6128a284602e01545f52605460205260405f2090565b60a08101516001600160a01b03161561368d57828161366e613a6f93613d56565b810180911161177f57613a8290926135f3565b90613a1d565b60405190602e5f835b601e8210613aa8575050506134e96103c083612302565b6001602081928554815201930191019091613a91565b6040519060105f835b601e8210613ade575050506134e96103c083612302565b6001602081928554815201930191019091613ac7565b91908110156107475760051b0190565b91908260409103126106d75760208251613b1d816106c6565b92015190565b906001600160801b03809116911601906001600160801b03821161177f57565b818102916301e1855881838504148315170215613b665750506301e18558900490565b6301e18558905f1981840984811085019003920990806301e185581115613bba57828211900360fd1b910360031c177f5818d3326caead725855951d54e4399ccd4bcf973323e6dcb93283828fae4a030290565b63ae47f7025f526004601cfd5b81810292918115828504821417830215613be2575050900490565b82905f1981840985811086019003920990825f0383169281811115613bba5783900480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f0304019211900302170290565b91908260409103126106d757602082519201516001600160401b03811681036106d75790565b63ffffffff90911681526001600160a01b0391821660208201529116604082015260600190565b604080820151613ce594929392906001600160a01b03165b845163ffffffff1660a08601516001600160a01b0316845163a6c0cacd60e01b8152978894859384939060048501613c73565b03915afa908115612eed57610dc8935f92613d16575b50611ee16119206060613d119495015160ff1690565b613842565b613d1192506119206060613d44611ee19360403d604011613d4f575b613d3c8183612302565b810190613c4d565b509450613cfb915050565b503d613d32565b805163ffffffff1663ffffffff613d786129786006546001600160401b031690565b911603613dcc5760a00151613d9790612d06906001600160a01b031681565b6040516370a0823160e01b81523060048201529060209082908180602481015b03915afa908115612eed575f916137e4575090565b600d54613db7916020918290613dea906001600160a01b0316612d06565b910151604051627eeac760e11b8152306004820152602481019190915292839190829081906044820190565b604080820151613e369492939290613cb2906001600160a01b0316612d06565b03915afa8015612eed575f935f91613e95575b506001600160401b03613e5c9116613395565b4211613e86576119206060613e77613e8093610dc89661381b565b93015160ff1690565b90613842565b6367fbea6760e01b5f5260045ffd5b6001600160401b039450613e5c9150613ebc9060403d604011613d4f57613d3c8183612302565b9490949150613e49565b60408082015192939192613f1192906001600160a01b0316845163ffffffff1660a08601516001600160a01b0316845163a6c0cacd60e01b8152958694859384939060048501613c73565b03915afa928315612eed576060613e7761192092610dc896613e80955f91613f3a575b5061381b565b613f53915060403d604011613d4f57613d3c8183612302565b613f34565b638b78c6d8600c52335f5260086020600c20541615613f7357565b6382b429005f526004601cfd5b638b78c6d8600c52335f526020600c20541615613f7357565b638b78c6d819543303613f7357565b7fa203c8cf3ff5695cb1e2caee14320584cc3e0e4b039b8fa3ae49b5e0568c699d546001600160a01b03163003613fdb57565b6306c4a1c760e11b5f5260045ffd5b908281019081811161177f57806140195750506001600160a01b03165f90815260536020526040902042915055565b6001600160a01b0383165f9081526053602052604090205461403b919061381b565b811561384c578161404e9104934261381b565b04820180921161177f576001600160a01b03165f90815260536020526040902055565b61407a906143b3565b6001600160801b0361409160095492828416613b23565b16906001600160801b03191617600955565b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955565b919060018060a01b03831692835f525f60205260405f205482810390811161177f575f85815260208181526040808320939093556001600160a01b0384168252600290522080549183830180931161177f579190556001600160a01b03165f90815260026020526040902060010191825481810180911161177f579092556040805191825260208201929092527f08562633d873a499107ccd684aa5e3268254ef69d0a498414e3091ebd3f21da49190a2565b6805345cdf77eb68f44c548281019081106141e6576805345cdf77eb68f44c556387a211a2600c525f526020600c20818154019055602052600c5160601c5f5f80516020614b92833981519152602080a3565b63e5cfe9575f526004601cfd5b5f805b601e8210614202575050565b61420d82602e61075d565b90549060031b1c80155f1461422b57506001809101915b01906141f6565b90918261423c575b60019150614224565b82810381811161177f576001926111a161425792602e61075d565b61426281602e61075d565b8154905f199060031b1b19169055614233565b5f805b601e8210614284575050565b61428f82601061075d565b90549060031b1c80155f146142ad57506001809101915b0190614278565b9091826142be575b600191506142a6565b82810381811161177f576001926111a16142d992601061075d565b6142e481601061075d565b8154905f199060031b1b191690556142b5565b604460105f80936020956014528160345263095ea7b360601b82525af13d1560015f5114171615614328575f603452565b633e3f8f735f526004601cfd5b604460105f8093602095601452811960345263095ea7b360601b82525af13d1560015f5114171615614328575f603452565b601c5f60649281946020966040519860605260405260601b602c526323b872dd60601b600c525af13d1560015f51141716156143a6575f606052604052565b637939f4245f526004601cfd5b600160801b8110156143cb576001600160801b031690565b6335278d125f526004601cfd5b6805345cdf77eb68f44c546001810180911161177f576001610dc8930191613bc7565b90810390811115610dc857505f90565b604081810151825160a090930151825163a6c0cacd60e01b815294929385936001600160a01b03938416938593849361445293929091169063ffffffff1660048501613c73565b03915afa908115612eed575f91614467575090565b614480915060403d604011613d4f57613d3c8183612302565b5090565b600160c01b8110156143cb576001600160c01b031690565b5f80356001600160e01b0319168152605d60205260409020546001600160a01b031680156106d7575f8091368280378136915af43d5f803e156144dd573d5ff35b3d5ffd5b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b60018060a01b031680331415908161454f575b5061454057565b6336abb4df60e11b5f5260045ffd5b5f90815260046020908152604080832033845290915281205460ff16159150614539565b6001600160a01b0384165f908152600860205260409020549392919061459d611925611920613737565b946145b5856387a211a2600c525f526020600c205490565b9080158015614671575b1561461f5750506001600160a01b0384165f908152600860205260409020611fa69590555b6001600160a01b0384165f908152605b6020526040902054614a9a576001600160a01b0384165f908152605b60205260409020429055614a9a565b61462c614633918361381b565b968461381b565b860180961161177f5782810180911161177f57801561384c57611fa6950461466b8560018060a01b03165f52600860205260405f2090565b556145e4565b5081156145bf565b6040519061016082018281106001600160401b038211176122e2576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b81810292915f8212600160ff1b82141661177f57818405149015171561177f57565b811561384c57600160ff1b81145f1983141661177f570590565b9193929093614724614679565b6001600160a01b0383165f908152600860205260409020548152614746613737565b61474f906137fd565b61475890613563565b936020820194855261477a8460018060a01b03165f52600360205260405f2090565b805482900390556001600160a01b0384165f90815260036020908152604080832060010180548b90039055605b909152902054604e546147c59181811091811891909102184261380e565b606083019081526001600160a01b0385165f818152605b60209081526040808320429055605882528083205460808801908152848452605983528184205460a08901908152948452605a9092529091205460c08601908152835190989193929190614830908661381b565b600a5492516148479061ffff600886901c166143fb565b61485091613b43565b6127109004986101008701998a52835161486a908761381b565b905161487e9061ffff602886901c166143fb565b61488791613b43565b6127109004946101208701958087528a51906148a2916133a5565b6148ab9161380e565b91895186516148b9916133a5565b916101408801928351906148cc916133a5565b83528c88516148da916146db565b6148e2613737565b6148eb906137fd565b6148f4916146fd565b6148fe9085613851565b8060408a01525f8113966149299660e0986149f2575b505050508151806149c7575b5050519061380e565b956149458786614940600b5460018060a01b031690565b614b13565b5192015190519160405194865f528860205260018060a01b0316809460018060a01b0316817ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db60405fa45f526020526040527fa443e1db11cb46c65620e8e21d4830a6b9b444fa4c350f0dd0024b8a5a6b6ef560605fa26040525f6060529190565b6149e191611ec09060581c6001600160a01b031691613926565b6149eb8151614071565b5f80614920565b611dc2614a1291614a0a614a046137a2565b8a61381b565b905190613b43565b9251604f541080614a6e575b614a3f575b505050614a348588015183516133a5565b82525f808080614914565b611ee1614a52614a6294611dc29461380e565b9151601886901c61ffff166143fb565b858801525f8080614a23565b50828211614a1e565b929190614a85828286613bc7565b9309614a8d57565b90600101908115613bba57565b6001600160a01b0384165f908152600260205260409020805482900381556001018054839003905593929091614ad08382614193565b5f85815260208490526001600160a01b0391821692909116907fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d790604090a39190565b60105f604492602095829560145260345263a9059cbb60601b82525af13d1560015f5114171615614b44575f603452565b6390b8ec185f526004601cfdfe4fa563f6ad0f2ba943d6492a5a9c8ec6e039cc68444fb93b0b51ea1d78a61ef8fe2c9cdff8e05bcb98a4bc73fdac81de1c6c8e4bb8e5dd21cc0225f54c486068ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208b26845be20a84accc331483aed546e44a598d731d6acbe16b8c29361a14be7a64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda02913000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000007d0000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000000000000000000000000000005edd8bd98d96404a2387c2fd37b48d363df6780300000000000000000000000001df6fb6a28a89d6bfa53b2b3f20644abf4176780000000000000000000000005000ba796fd84a0f929af80cfe27301f0358f2680000000000000000000000007927d05e20e8f3fdd4a1a5599dab89d939cb2005000000000000000000000000762fdc3b613e4e7cd3c96df8d0908d52632522dc00000000000000000000000000000000000000000000000000000000000000106d61784150592055534420536861726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b6d61785553447368617265000000000000000000000000000000000000000000