0 txs
0 calls
constructor
constructor((string assetName, string assetSymbol, address underlyingToken, address priceOracleMiddleware, (uint256 marketId, bytes32[] substrates)[] marketSubstratesConfigs, address[] fuses, (uint256 marketId, address fuse)[] balanceFuses, (address feeFactory, uint256 iporDaoManagementFee, uint256 iporDaoPerformanceFee, address iporDaoFeeRecipientAddress, (address recipient, uint256 feeValue)[] recipientManagementFees, (address recipient, uint256 feeValue)[] recipientPerformanceFees) feeConfig, address accessManager, address plasmaVaultBase, uint256 totalSupplyCap, address withdrawManager) initData_)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
authority
viewfunction authority() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_SLIPPAGE_IN_PERCENTAGE
viewfunction DEFAULT_SLIPPAGE_IN_PERCENTAGE() view returns (uint256)
getUnrealizedManagementFee
viewfunction getUnrealizedManagementFee() view returns (uint256)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) 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)
PLASMA_VAULT_BASE
viewfunction PLASMA_VAULT_BASE() 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)
read
viewfunction read(address target, bytes data) view returns (tuple result)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalAssetsInMarket
viewfunction totalAssetsInMarket(uint256 marketId_) view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
claimRewards
nonpayablefunction claimRewards(tuple[] calls_)
deposit
nonpayablefunction deposit(uint256 assets_, address receiver_) returns (uint256)
depositWithPermit
nonpayablefunction depositWithPermit(uint256 assets_, address receiver_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_) returns (uint256)
execute
nonpayablefunction execute(tuple[] calls_)
executeInternal
nonpayablefunction executeInternal(tuple[] calls_)
mint
nonpayablefunction mint(uint256 shares_, address receiver_) returns (uint256)
readInternal
nonpayablefunction readInternal(address target, bytes data) returns (tuple result)
redeem
nonpayablefunction redeem(uint256 shares_, address receiver_, address owner_) returns (uint256)
redeemFromRequest
nonpayablefunction redeemFromRequest(uint256 shares_, address receiver_, address owner_) returns (uint256)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
transfer
nonpayablefunction transfer(address to_, uint256 value_) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from_, address to_, uint256 value_) returns (bool)
updateInternal
nonpayablefunction updateInternal(address, address, uint256)
updateMarketsBalances
nonpayablefunction updateMarketsBalances(uint256[] marketIds_) returns (uint256)
withdraw
nonpayablefunction withdraw(uint256 assets_, address receiver_, address owner_) returns (uint256 assetsToWithdraw)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
AuthorityUpdated
event AuthorityUpdated(address authority)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
Initialized
event Initialized(uint64 version)
ManagementFeeDataConfigured
event ManagementFeeDataConfigured(address feeAccount, uint256 feeInPercentage)
ManagementFeeRealized
event ManagementFeeRealized(uint256 unrealizedFeeInUnderlying, uint256 unrealizedFeeInShares)
MarketBalancesUpdated
event MarketBalancesUpdated(uint256[] marketIds, int256 deltaInUnderlying)
MarketSubstratesGranted
event MarketSubstratesGranted(uint256 marketId, bytes32[] substrates)
PerformanceFeeDataConfigured
event PerformanceFeeDataConfigured(address feeAccount, uint256 feeInPercentage)
PriceOracleMiddlewareChanged
event PriceOracleMiddlewareChanged(address newPriceOracleMiddleware)
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)
WithdrawManagerChanged
event WithdrawManagerChanged(address newWithdrawManager)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
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)
FailedInnerCall
error FailedInnerCall()
HandlerNotFound
error HandlerNotFound()
InvalidInitialization
error InvalidInitialization()
InvalidManagementFee
error InvalidManagementFee(uint256 feeInPercentage)
InvalidPerformanceFee
error InvalidPerformanceFee(uint256 feeInPercentage)
MarketLimitExceeded
error MarketLimitExceeded(uint256 marketId, uint256 balanceInMarket, uint256 limit)
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NoAssetsToDeposit
error NoAssetsToDeposit()
NoAssetsToWithdraw
error NoAssetsToWithdraw()
NoSharesToDeposit
error NoSharesToDeposit()
NoSharesToMint
error NoSharesToMint()
NoSharesToRedeem
error NoSharesToRedeem()
NotInitializing
error NotInitializing()
PermitFailed
error PermitFailed()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedIntToUint
error SafeCastOverflowedIntToUint(int256 value)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnauthorizedCaller
error UnauthorizedCaller()
UnsupportedFuse
error UnsupportedFuse()
UnsupportedMethod
error UnsupportedMethod()
UnsupportedQuoteCurrencyFromOracle
error UnsupportedQuoteCurrencyFromOracle()
WithdrawManagerInvalidSharesToRelease
error WithdrawManagerInvalidSharesToRelease(uint256 sharesToRelease)
WithdrawManagerNotSet
error WithdrawManagerNotSet()
WrongAddress
error WrongAddress()
WrongCaller
error WrongCaller(address caller)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60c060405234801561000f575f80fd5b506040516178a73803806178a783398101604081905261002e91611256565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156100775750825b90505f826001600160401b031660011480156100925750303b155b9050811580156100a0575080155b156100be5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156100ec57845460ff60401b1916680100000000000000001785555b855160208701516100fd9190610513565b604086015161010b90610529565b6101176002600a6114f0565b60a0526101208601516001600160a01b0316608052855161010087015161014088015160405161019f93634a5dc1b760e01b9361015b9391929091906024016114fe565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b039384161790526080516001600160a01b03169161053d16565b505f866060015190506103486001600160a01b0316816001600160a01b031663f4a6e4586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610214919061154b565b6001600160a01b03161461023b57604051630dee4f2f60e41b815260040160405180910390fd5b6060870151610249906105b2565b610269633e3a86e060e01b8860a0015160405160240161015b9190611564565b505f5b8760c00151518110156102f3576102ea630c63abc660e01b8960c00151838151811061029a5761029a6115af565b60200260200101515f01518a60c0015184815181106102bb576102bb6115af565b60200260200101516020015160405160240161015b9291909182526001600160a01b0316602082015260400190565b5060010161026c565b505f5b87608001515181101561035c576103548860800151828151811061031c5761031c6115af565b60200260200101515f01518960800151838151811061033d5761033d6115af565b60200260200101516020015161062760201b60201c565b6001016102f6565b505f8760e001515f01516001600160a01b031663738beeaa6040518060e001604052808b61010001516001600160a01b03168152602001306001600160a01b031681526020018b60e001516020015181526020018b60e001516040015181526020018b60e00151606001516001600160a01b031681526020018b60e001516080015181526020018b60e0015160a001518152506040518263ffffffff1660e01b815260040161040b9190611612565b60c0604051808303815f875af1158015610427573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044b9190611695565b905061046581604001518260a0015161077360201b60201c565b61047d8160600151826080015161086c60201b60201c565b610485610957565b6101608801516001600160a01b03166104b1576040516302067b8560e41b815260040160405180910390fd5b6101608801516104c0906109a3565b5050831561050857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050506118c1565b61051b610a11565b6105258282610a61565b5050565b610531610a11565b61053a81610aca565b50565b60605f80846001600160a01b031684604051610559919061170a565b5f60405180830381855af49150503d805f8114610591576040519150601f19603f3d011682016040523d82523d5f602084013e610596565b606091505b5090925090506105a7858383610b4d565b925050505b92915050565b807f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a0080546001600160a01b0319166001600160a01b0392831617905560405190821681527fd51f0f0ead29844497f2889430c7143324b01211d610174de544ac915ae5943f906020015b60405180910390a150565b5f8281527f78e40624004925a4ef6749756748b1deddc674477302d5b7fe18e5335cde39006020526040902061065c81610bac565b5f82516001600160401b0381111561067657610676610db2565b60405190808252806020026020018201604052801561069f578160200160208202803683370190505b5090505f5b835181101561071d576001835f015f8684815181106106c5576106c56115af565b602002602001015181526020019081526020015f20819055508381815181106106f0576106f06115af565b602002602001015182828151811061070a5761070a6115af565b60209081029190910101526001016106a4565b5080516107339060018401906020840190610d5e565b507f7e2fec298d6e81dab091490fc6ab01dc37a9077786c1d533a01cdc6a8e0f42638484604051610765929190611720565b60405180910390a150505050565b6001600160a01b03821661079a57604051630d23cf4160e11b815260040160405180910390fd5b6113888111156107c557604051630a7e67f960e21b8152600481018290526024015b60405180910390fd5b7f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e0528840080546001600160a01b0319166001600160a01b03841617815561080882610bfd565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527fb51da3e1921b4e807ca7fadcf4582ef9ebbabde509ec7cecd222ca1fd4375df591015b60405180910390a1505050565b6001600160a01b03821661089357604051630d23cf4160e11b815260040160405180910390fd5b6101f48111156108b9576040516324f8f43160e11b8152600481018290526024016107bc565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0080546001600160a01b0319166001600160a01b0384161781556108fc82610bfd565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527f72a8ee4b89f4194ad7e618624c280d66eb07d10b8cd84ab0376c16534413aa40910161085f565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0061098142610c2f565b815463ffffffff91909116600160b01b0263ffffffff60b01b19909116179055565b807fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e1180546001600160a01b0319166001600160a01b0392831617905560405190821681527fd8f38238faf978f3ebd926ef7a8ea95baf4119bb290941e49c523f093ea30d949060200161061c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610a5f57604051631afcd79f60e31b815260040160405180910390fd5b565b610a69610a11565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610ab584826117f0565b5060048101610ac483826117f0565b50505050565b610ad2610a11565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f80610afe84610c5f565b9150915081610b0e576012610b10565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b606082610b6257610b5d82610d35565b610ba5565b8151158015610b7957506001600160a01b0384163b155b15610ba257604051639996b31560e01b81526001600160a01b03851660048201526024016107bc565b50805b9392505050565b60018101545f5b81811015610bf8575f835f015f856001018481548110610bd557610bd56115af565b5f9182526020808320909101548352820192909252604001902055600101610bb3565b505050565b5f61ffff821115610c2b576040516306dfcc6560e41b815260106004820152602481018390526044016107bc565b5090565b5f63ffffffff821115610c2b576040516306dfcc6560e41b815260206004820152602481018390526044016107bc565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691610ca59161170a565b5f60405180830381855afa9150503d805f8114610cdd576040519150601f19603f3d011682016040523d82523d5f602084013e610ce2565b606091505b5091509150818015610cf657506020815110155b15610d29575f81806020019051810190610d1091906118aa565b905060ff8111610d27576001969095509350505050565b505b505f9485945092505050565b805115610d455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b828054828255905f5260205f20908101928215610d97579160200282015b82811115610d97578251825591602001919060010190610d7c565b50610c2b9291505b80821115610c2b575f8155600101610d9f565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715610de857610de8610db2565b60405290565b60405160c081016001600160401b0381118282101715610de857610de8610db2565b60405161018081016001600160401b0381118282101715610de857610de8610db2565b604051601f8201601f191681016001600160401b0381118282101715610e5b57610e5b610db2565b604052919050565b5f82601f830112610e72575f80fd5b81516001600160401b03811115610e8b57610e8b610db2565b610e9e601f8201601f1916602001610e33565b818152846020838601011115610eb2575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610ee4575f80fd5b919050565b5f6001600160401b03821115610f0157610f01610db2565b5060051b60200190565b5f82601f830112610f1a575f80fd5b8151610f2d610f2882610ee9565b610e33565b8082825260208201915060208360051b860101925085831115610f4e575f80fd5b602085015b838110156110335780516001600160401b03811115610f70575f80fd5b86016040818903601f19011215610f85575f80fd5b610f8d610dc6565b6020820151815260408201516001600160401b03811115610fac575f80fd5b60208184010192505088601f830112610fc3575f80fd5b8151610fd1610f2882610ee9565b8082825260208201915060208360051b86010192508b831115610ff2575f80fd5b6020850194505b82851015611014578451825260209485019490910190610ff9565b8060208501525050508085525050602083019250602081019050610f53565b5095945050505050565b5f82601f83011261104c575f80fd5b815161105a610f2882610ee9565b8082825260208201915060208360051b86010192508583111561107b575f80fd5b602085015b838110156110335761109181610ece565b835260209283019201611080565b5f82601f8301126110ae575f80fd5b81516110bc610f2882610ee9565b8082825260208201915060208360061b8601019250858311156110dd575f80fd5b602085015b8381101561103357604081880312156110f9575f80fd5b611101610dc6565b8151815261111160208301610ece565b6020820152808452506020830192506040810190506110e2565b5f82601f83011261113a575f80fd5b8151611148610f2882610ee9565b8082825260208201915060208360061b860101925085831115611169575f80fd5b602085015b838110156110335760408188031215611185575f80fd5b61118d610dc6565b61119682610ece565b815260208281015181830152908452929092019160400161116e565b5f60c082840312156111c2575f80fd5b6111ca610dee565b90506111d582610ece565b815260208281015190820152604080830151908201526111f760608301610ece565b606082015260808201516001600160401b03811115611214575f80fd5b6112208482850161112b565b60808301525060a08201516001600160401b0381111561123e575f80fd5b61124a8482850161112b565b60a08301525092915050565b5f60208284031215611266575f80fd5b81516001600160401b0381111561127b575f80fd5b8201610180818503121561128d575f80fd5b611295610e10565b81516001600160401b038111156112aa575f80fd5b6112b686828501610e63565b82525060208201516001600160401b038111156112d1575f80fd5b6112dd86828501610e63565b6020830152506112ef60408301610ece565b604082015261130060608301610ece565b606082015260808201516001600160401b0381111561131d575f80fd5b61132986828501610f0b565b60808301525060a08201516001600160401b03811115611347575f80fd5b6113538682850161103d565b60a08301525060c08201516001600160401b03811115611371575f80fd5b61137d8682850161109f565b60c08301525060e08201516001600160401b0381111561139b575f80fd5b6113a7868285016111b2565b60e0830152506113ba6101008301610ece565b6101008201526113cd6101208301610ece565b61012082015261014082810151908201526113eb6101608301610ece565b610160820152949350505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156114485780850481111561142c5761142c6113f9565b600184161561143a57908102905b60019390931c928002611411565b935093915050565b5f8261145e575060016105ac565b8161146a57505f6105ac565b8160018114611480576002811461148a576114a6565b60019150506105ac565b60ff84111561149b5761149b6113f9565b50506001821b6105ac565b5060208310610133831016604e8410600b84101617156114c9575081810a6105ac565b6114d55f19848461140d565b805f19048211156114e8576114e86113f9565b029392505050565b5f610ba560ff841683611450565b606081525f84518060608401528060208701608085015e5f60808285018101919091526001600160a01b03959095166020840152604083019390935250601f909101601f19160101919050565b5f6020828403121561155b575f80fd5b610ba582610ece565b602080825282518282018190525f918401906040840190835b818110156115a45783516001600160a01b031683526020938401939092019160010161157d565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561160857815180516001600160a01b0316875260209081015181880152604090960195909101906001016115d5565b5093949350505050565b6020815260018060a01b03825116602082015260018060a01b036020830151166040820152604082015160608201526060820151608082015260018060a01b0360808301511660a08201525f60a083015160e060c08401526116786101008401826115c3565b905060c0840151601f198483030160e08501526105a782826115c3565b5f60c08284031280156116a6575f80fd5b506116af610dee565b6116b883610ece565b81526116c660208401610ece565b60208201526116d760408401610ece565b60408201526116e860608401610ece565b60608201526080838101519082015260a0928301519281019290925250919050565b5f82518060208501845e5f920191825250919050565b5f60408201848352604060208401528084518083526060850191506020860192505f5b81811015611761578351835260209384019390920191600101611743565b50909695505050505050565b600181811c9082168061178157607f821691505b60208210810361179f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610bf857805f5260205f20601f840160051c810160208510156117ca5750805b601f840160051c820191505b818110156117e9575f81556001016117d6565b5050505050565b81516001600160401b0381111561180957611809610db2565b61181d81611817845461176d565b846117a5565b6020601f82116001811461184f575f83156118385750848201515b5f19600385901b1c1916600184901b1784556117e9565b5f84815260208120601f198516915b8281101561187e578785015182556020948501946001909201910161185e565b508482101561189b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156118ba575f80fd5b5051919050565b60805160a051615fa26119055f395f81816124610152818161249c01528181613cd30152613d1001525f81816103610152818161040301526149470152615fa25ff3fe608060405234801561000f575f80fd5b50600436106102d1575f3560e01c806394bf804d11610184578063c63d75b6116100e1578063d905777e11610095578063e9a2e7781161006f578063e9a2e77814610734578063ef8b30f71461066b578063f538e56214610747576102d1565b8063d905777e146106b7578063dd62ed3e146106ca578063e3efd95f14610721576102d1565b8063c74b5211116100c6578063c74b52111461067e578063ce96cb7714610691578063d79f44eb146106a4576102d1565b8063c63d75b614610658578063c6e6f5921461066b576102d1565b8063b3d7f6b911610138578063ba0876521161011d578063ba0876521461062a578063baae8abf1461063d578063bf7e214f14610650576102d1565b8063b3d7f6b914610604578063b460af9414610617576102d1565b806395d89b411161016957806395d89b41146105d6578063a64099d2146105de578063a9059cbb146105f1576102d1565b806394bf804d146105a35780639569bf28146105b6576102d1565b806332293ccc1161023257806350921b23116101e657806370a08231116101cb57806370a08231146105285780637a9e5e4b1461056f5780638fb3603714610582576102d1565b806350921b23146105025780636e553f6514610515576102d1565b806338d52e0f1161021757806338d52e0f146104d4578063402d267d146104dc5780634cdad506146104ef576102d1565b806332293ccc146104ac5780633887fd78146104c1576102d1565b80630a28a4771161028957806323b872dd1161026e57806323b872dd146104775780633032403a1461048a578063313ce56714610492576102d1565b80630a28a4771461043d57806318160ddd14610450576102d1565b806307a2d13a116102ba57806307a2d13a146103c8578063095ea7b3146103db5780630971a9d0146103fe576102d1565b806301e1d1141461039857806306fdde03146103b3575b5f3660606103007f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab66005460011490565b156103215761030d61074f565b5060408051602081019091525f815261038d565b61038a5f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692915050610906565b90505b915050805190602001f35b6103a061097a565b6040519081526020015b60405180910390f35b6103bb6109b2565b6040516103aa919061531f565b6103a06103d6366004615331565b610a85565b6103ee6103e936600461535c565b610a90565b60405190151581526020016103aa565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103aa565b6103a061044b366004615331565b610ab1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546103a0565b6103ee610485366004615386565b610b82565b6103a0610ba0565b61049a610bb6565b60405160ff90911681526020016103aa565b6104bf6104ba366004615386565b610bbf565b005b6103a06104cf366004615331565b610bf1565b610425610c23565b6103a06104ea3660046153c4565b610c57565b6103a06104fd366004615331565b610cab565b6103a06105103660046153ef565b610d79565b6103a0610523366004615445565b610f2b565b6103a06105363660046153c4565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6104bf61057d3660046153c4565b610f74565b61058a61103c565b6040516001600160e01b031990911681526020016103aa565b6103a06105b1366004615445565b61109e565b6105c96105c436600461552b565b611124565b6040516103aa91906155b8565b6103bb611187565b6103a06105ec3660046155d2565b6111d8565b6103ee6105ff36600461535c565b611338565b6103a0610612366004615331565b61134e565b6103a06106253660046155d2565b61135a565b6103a06106383660046155d2565b6116f1565b6104bf61064b366004615659565b61179d565b610425611acc565b6103a06106663660046153c4565b611af4565b6103a0610679366004615331565b611b45565b6104bf61068c366004615659565b611b50565b6103a061069f3660046153c4565b611d92565b6105c96106b236600461552b565b611dd3565b6103a06106c53660046153c4565b611e99565b6103a06106d8366004615698565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104bf61072f366004615659565b611ed5565b6103a0610742366004615659565b611fa4565b6103a0600281565b604080516bffffffffffffffffffffffff193360601b166020808301919091525f80356001600160e01b0319166034840152835180840360180181526038909301845282519282019290922082527fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e00905220546001600160a01b031680610802576040517f4bf4de4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61084c5f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b0386169291505061201e565b905080515f0361085a575050565b5f8180602001905181019061086f9190615711565b9050306001600160a01b031663c74b5211826060015180602001905181019061089891906157ad565b6040518263ffffffff1660e01b81526004016108b491906158be565b5f604051808303815f87803b1580156108cb575f80fd5b505af11580156108dd573d5f803e3d5ffd5b50505060208201516040830151835161090193506001600160a01b0316919061202b565b505050565b60605f80846001600160a01b031684604051610922919061595f565b5f60405180830381855af49150503d805f811461095a576040519150601f19603f3d011682016040523d82523d5f602084013e61095f565b606091505b509150915061096f858383612107565b925050505b92915050565b5f8061098461217c565b90505f610990826122fb565b90508181106109a1575f9250505090565b6109ab8183615989565b9250505090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610a039061599c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2f9061599c565b8015610a7a5780601f10610a5157610100808354040283529160200191610a7a565b820191905f5260205f20905b815481529060010190602001808311610a5d57829003601f168201915b505050505091505090565b5f610974825f612414565b5f80610a9a6124c1565b9050610aa78185856124ca565b5060019392505050565b7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e11545f906001600160a01b03168015610b72575f816001600160a01b0316631540aa896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4591906159d4565b90508015610b7057610b68610b59856124d7565b670de0b6b3a7640000836124e3565b949350505050565b505b610b7b836124d7565b9392505050565b5f610b95610b8e6124c1565b5f366125bb565b610b68848484612b5e565b5f610bb1610bac61217c565b6122fb565b905090565b5f610bb1612b8b565b6040517f1b517b1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee6006020526040812054610974565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005b546001600160a01b031692915050565b5f80610c61612bc8565b90505f610c8c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b9050818110610c9e57505f9392505050565b610b686103d68284615989565b7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e11545f906001600160a01b03168015610d70575f816001600160a01b0316631540aa896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3f91906159d4565b90508015610d6e57610b686103d685610d6084670de0b6b3a7640000615989565b670de0b6b3a76400006124e3565b505b610b7b83610a85565b5f610d82612bf1565b610d8d610b8e6124c1565b610d95610c23565b6001600160a01b031663d505accf610dab6124c1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018a90526064810188905260ff8716608482015260a4810186905260c4810185905260e4015f604051808303815f87803b158015610e14575f80fd5b505af1925050508015610e25575060015b610eec5786610e32610c23565b6001600160a01b031663dd62ed3e610e486124c1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb491906159d4565b1015610eec576040517fb78cb0dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ef68787612c72565b9050610f2160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b9695505050505050565b5f610f34612bf1565b610f3f610b8e6124c1565b610f498383612c72565b905061097460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f610f7d6124c1565b9050610f87611acc565b6001600160a01b0316816001600160a01b031614610fe1576040517f068ca9d80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b816001600160a01b03163b5f0361102f576040517fc2f31e5e0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610fd8565b61103882612d21565b5050565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080545f9190600160a01b900460ff16611076575f611098565b7f8fb36037000000000000000000000000000000000000000000000000000000005b91505090565b5f6110a7612bf1565b6110b2610b8e6124c1565b825f036110eb576040517f01aeea5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661111257604051630d23cf4160e11b815260040160405180910390fd5b61111a612dac565b610f498383612f06565b60408051602081019091526060815233301461116c576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61117f6001600160a01b03841683610906565b815292915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610a039061599c565b5f6111e4610b8e6124c1565b5f7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e11546040517f5aa42e1c0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820188905290911690635aa42e1c906044016020604051808303815f875af115801561126d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129191906159fa565b9050806112cd576040517fa124f38900000000000000000000000000000000000000000000000000000000815260048101869052602401610fd8565b5f6112d784611e99565b90508086111561132c576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810187905260448101829052606401610fd8565b610f218686865f612f85565b5f611344610b8e6124c1565b610b7b838361327f565b5f610974826001612414565b5f611363612bf1565b61136e610b8e6124c1565b835f036113a7576040517fbb464a5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831615806113c457506001600160a01b038216155b156113e257604051630d23cf4160e11b815260040160405180910390fd5b6113ea612dac565b5f6113f361097a565b90505f7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e1154604080517fdc71003900000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921692505f91839163dc7100399160048083019260209291908290030181865afa15801561147a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149e91906159d4565b90505f81156114da576127106114b383610a85565b6114bf90612711615a13565b6114c99190615a3e565b6114d39089615a51565b90506114e8565b6114e5600a89615a51565b90505b611561816114f4610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611538573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155c91906159d4565b613296565b61156a84613564565b5f61157487611d92565b9050808911156115c9576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152602481018a905260448101829052606401610fd8565b5f6115d38a611b45565b6040517fd8b3b0b4000000000000000000000000000000000000000000000000000000008152600481018290529091505f906001600160a01b0387169063d8b3b0b4906024016020604051808303815f875af1158015611635573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165991906159d4565b905080156116a95761166a81610a85565b611674908c615989565b97506116936116816124c1565b8b8b8b61168e8688615989565b6137b9565b61169d8982613880565b505050505050506116c8565b6116bd6116b46124c1565b8b8b8e866137b9565b8a9750505050505050505b610b7b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f6116fa612bf1565b611705610b8e6124c1565b5f61170f83611e99565b905080851115611764576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610fd8565b6117718585856001612f85565b915050610b7b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6117a5612bf1565b6117b0610b8e6124c1565b805f8167ffffffffffffffff8111156117cb576117cb615473565b6040519080825280602002602001820160405280156117f4578160200160208202803683370190505b5090505f805f61180261097a565b905061182d60017f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b5f5b85811015611a63576118a788888381811061184c5761184c615a64565b905060200281019061185e9190615a78565b61186c9060208101906153c4565b6001600160a01b03165f9081527f48932b860eb451ad240d4fe2b46522e5a0ac079d201fe50d4e0be078c75b54006020526040902054151590565b6118dd576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8787828181106118ef576118ef615a64565b90506020028101906119019190615a78565b61190f9060208101906153c4565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196e91906159d4565b925061197a85846138cd565b15155f036119ae578285858151811061199557611995615a64565b6020908102919091010152836119aa81615ab4565b9450505b611a5a8888838181106119c3576119c3615a64565b90506020028101906119d59190615a78565b6119e3906020810190615acc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c92508b9150859050818110611a2b57611a2b615a64565b9050602002810190611a3d9190615a78565b611a4b9060208101906153c4565b6001600160a01b031690610906565b5060010161182f565b50611a8c5f7f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b611a9584613932565b611a9e81613564565b505050505061103860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f807ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00610c47565b5f80611afe612bc8565b90505f611b297f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b9050818110611b3b57505f9392505050565b610b688183615989565b5f610974825f613c99565b303314611b8b576040517f29507dbf000000000000000000000000000000000000000000000000000000008152336004820152602401610fd8565b805f8167ffffffffffffffff811115611ba657611ba6615473565b604051908082528060200260200182016040528015611bcf578160200160208202803683370190505b5090505f805f5b84811015611d8057611bf387878381811061184c5761184c615a64565b611c29576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b868682818110611c3b57611c3b615a64565b9050602002810190611c4d9190615a78565b611c5b9060208101906153c4565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cba91906159d4565b9150611cc684836138cd565b15155f03611cfa5781848481518110611ce157611ce1615a64565b602090810291909101015282611cf681615ab4565b9350505b611d77878783818110611d0f57611d0f615a64565b9050602002810190611d219190615a78565b611d2f906020810190615acc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b92508a9150859050818110611a2b57611a2b615a64565b50600101611bd6565b50611d8a83613932565b505050505050565b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610974905f612414565b6040805160208101909152606081526001600160a01b038316611e22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611e838484604051602401611e39929190615b2d565b60408051601f198184030181529190526020810180516001600160e01b03167f9569bf28000000000000000000000000000000000000000000000000000000001790523090613d35565b905080806020019051810190610b689190615b4e565b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610974565b611edd612bf1565b611ee8610b8e6124c1565b805f5b81811015611f7957611f70848483818110611f0857611f08615a64565b9050602002810190611f1a9190615a78565b611f28906020810190615acc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250879150859050818110611a2b57611a2b615a64565b50600101611eeb565b505061103860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f611fb0610b8e6124c1565b5f829003611fc757611fc061097a565b9050610974565b5f611fd061097a565b905061200d8484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061393292505050565b61201681613564565b610b6861097a565b6060610b7b83835f613d89565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167f095ea7b3000000000000000000000000000000000000000000000000000000001790526120958482613e31565b612101576040516001600160a01b0384811660248301525f60448301526120f791869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613ece565b6121018482613ece565b50505050565b60608261211c5761211782613f48565b610b7b565b815115801561213357506001600160a01b0384163b155b15612175576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610fd8565b5080610b7b565b5f80612186613f8d565b90506001600160a01b0381161561228357806001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121f791906159d4565b6121ff613fbf565b612207610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561224b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061226f91906159d4565b6122799190615a51565b6110989190615a51565b61228b613fbf565b612293610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156122d7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227991906159d4565b5f8061238e604080516060810182525f80825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f006040805160608101825291546001600160a01b0381168352600160a01b810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b6020810151909150429061ffff1615806123b05750604082015163ffffffff16155b806123c55750816040015163ffffffff168111155b156123d357505f9392505050565b610b68826040015163ffffffff16826123ec9190615989565b6123f69086615a13565b602084015161ffff1661240f6127106301e13380615a13565b6124e3565b5f8061243e7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b905080156124945761248f61245161097a565b61245c906001615a51565b6124867f000000000000000000000000000000000000000000000000000000000000000084615a51565b86919086613fe6565b610b68565b610b688460017f000000000000000000000000000000000000000000000000000000000000000086613fe6565b5f610bb1614035565b610901838383600161405b565b5f610974826001613c99565b5f838302815f1985870982811083820303915050805f036125175783828161250d5761250d615a2a565b0492505050610b7b565b808411612550576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6125c96004828486615bd8565b6125d291615bff565b90505f806001600160e01b031983167f23b872dd0000000000000000000000000000000000000000000000000000000003612744575f6126153660048184615bd8565b8101906126229190615386565b5050905061262e611acc565b60405163077d973760e41b81526001600160a01b0383811660048301523060248301526001600160e01b03198716604483015291909116906377d973709060640160408051808303815f875af115801561268a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ae9190615c34565b50506126b8611acc565b60405163077d973760e41b81526001600160a01b0389811660048301523060248301526001600160e01b03198716604483015291909116906377d973709060640160408051808303815f875af1158015612714573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127389190615c34565b9093509150612a299050565b7f6e553f65000000000000000000000000000000000000000000000000000000006001600160e01b0319841614806127a557507f94bf804d000000000000000000000000000000000000000000000000000000006001600160e01b03198416145b15612865575f6127b83660048184615bd8565b8101906127c59190615445565b9150506127d0611acc565b60405163077d973760e41b81526001600160a01b0383811660048301523060248301526001600160e01b03198716604483015291909116906377d973709060640160408051808303815f875af115801561282c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128509190615c34565b505061273861285d611acc565b883087614184565b6001600160e01b031983167f50921b2300000000000000000000000000000000000000000000000000000000036128c0575f6128a43660048184615bd8565b8101906128b191906153ef565b505050509150506127d0611acc565b7fba087652000000000000000000000000000000000000000000000000000000006001600160e01b03198416148061292157507fb460af94000000000000000000000000000000000000000000000000000000006001600160e01b03198416145b1561294d575f6129343660048184615bd8565b81019061294191906155d2565b9250505061262e611acc565b6001600160e01b031983167fa9059cbb0000000000000000000000000000000000000000000000000000000003612a1057612986611acc565b60405163077d973760e41b81526001600160a01b0388811660048301523060248301526001600160e01b03198616604483015291909116906377d973709060640160408051808303815f875af11580156129e2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a069190615c34565b9092509050612a29565b612a23612a1b611acc565b873086614184565b90925090505b81612b555763ffffffff811615612b18577ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b178155612a8f611acc565b6001600160a01b03166394c7d7ee8888886040518463ffffffff1660e01b8152600401612abe93929190615c66565b5f604051808303815f87803b158015612ad5575f80fd5b505af1158015612ae7573d5f803e3d5ffd5b505082547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690925550612b559050565b6040517f068ca9d80000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610fd8565b611d8a836142a5565b5f80612b686124c1565b9050612b75858285614360565b612b8085858561440d565b506001949350505050565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e009050600281546110989190600160a01b900460ff16615ca4565b5f7f0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d005b54919050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612c6c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f825f03612cac576040517f182b250f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216612cd357604051630d23cf4160e11b815260040160405180910390fd5b612cdb612dac565b5f612ce6848461449c565b9050805f03610b7b576040517f8b34d30a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b5f612e3e604080516060810182525f80825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f006040805160608101825291546001600160a01b0381168352600160a01b810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b90505f612e49610ba0565b9050612e5361451b565b5f612e5d82611b45565b9050805f03612e6b57505050565b612e9460017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b8251612ea09082614592565b612ec85f7faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b60408051838152602081018390527fbb92eb7521ac4e9e56f7e75ea06a10cbc121c444e5d175fff5e8e0bc9e804937910160405180910390a1505050565b5f80612f1183611af4565b905080841115612f66576040517f284ff6670000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810185905260448101829052606401610fd8565b5f612f708561134e565b9050610b68612f7d6124c1565b8583886145df565b5f845f03612fbf576040517ff10cc93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384161580612fdc57506001600160a01b038316155b15612ffa57604051630d23cf4160e11b815260040160405180910390fd5b613002612dac565b5f805f61300d61097a565b7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e1154604080517fdc71003900000000000000000000000000000000000000000000000000000000815290519293506001600160a01b03909116915f916130bb91849163dc7100399160048083019260209291908290030181865afa158015613097573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d691906159d4565b90505f5b600a81101561316a576130d18b610a85565b95506130db610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561311f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061314391906159d4565b9450613162826131528861466f565b61315c9190615a51565b86613296565b6001016130bf565b5061317483613564565b866131a2576131828a610a85565b955061319861318f6124c1565b8a8a898e6137b9565b5050505050610b68565b6040517fd8b3b0b4000000000000000000000000000000000000000000000000000000008152600481018b90525f906001600160a01b0384169063d8b3b0b4906024016020604051808303815f875af1158015613201573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322591906159d4565b9050805f03613258576132378b610a85565b965061324d6132446124c1565b8b8b8a8f6137b9565b505050505050610b68565b5f6132648c8c8c61468f565b90506132708a83613880565b9b9a5050505050505050505050565b5f806132896124c1565b9050610aa781858561440d565b815f036132a1575050565b5f818310610901575f8060605f6132b661470f565b90505f815167ffffffffffffffff8111156132d3576132d3615473565b6040519080825280602002602001820160405280156132fc578160200160208202803683370190505b5090506133098789615989565b82519096505f90815b881580159061332057508181105b1561354e5761334885828151811061333a5761333a615a64565b60200260200101518261478b565b9550885f1b865f8151811061335f5761335f615a64565b6020026020010181815250506133f58660405160240161337f9190615cbd565b60408051601f198184030181529190526020810180516001600160e01b03167fbe1946da0000000000000000000000000000000000000000000000000000000017905286518790849081106133d6576133d6615a64565b60200260200101516001600160a01b031661090690919063ffffffff16565b506133fe610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015613442573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061346691906159d4565b9250828b11156134815761347a838c615989565b9850613485565b5f98505b84818151811061349757613497615a64565b60200260200101516001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134fe91906159d4565b965061350a84886138cd565b15155f0361353e578684898151811061352557613525615a64565b60209081029190910101528761353a81615ab4565b9850505b61354781615ab4565b9050613312565b5061355883613932565b50505050505050505050565b5f61356d61097a565b90508181101561357b575050565b5f6135db6040805180820182525f80825260209182015281518083019092527f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e05288400546001600160a01b038116835261ffff600160a01b909104169082015290565b90505f6135f76135e9610bb6565b6103d69060ff16600a615de2565b90505f80835f01516001600160a01b031663ea26266c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561363a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061365e9190615ded565b6001600160a01b0316639617bcca6136758561484e565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254602088015160026136a6610bb6565b6136b09190615e08565b6040516001600160e01b031960e087901b1681526fffffffffffffffffffffffffffffffff9094166004850152602484019290925261ffff16604483015260ff16606482015260840160408051808303815f875af1158015613714573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137389190615e21565b90925090506001600160a01b0382161580613751575080155b1561375e57505050505050565b61378760017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b6137918282614592565b611d8a5f7faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e006001600160a01b03868116908516146137f8576137f8848784614360565b6138028483613880565b8054613818906001600160a01b031686856148a7565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051613870929190918252602082015260400190565b60405180910390a4505050505050565b6001600160a01b0382166138c2576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610fd8565b611038825f836148d8565b5f805b835181101561392b578381815181106138eb576138eb615a64565b60200260200101515f031561392b578284828151811061390d5761390d615a64565b602002602001015103613923576001915061392b565b6001016138d0565b5092915050565b5f61394f60405180604001604052805f8152602001606081525090565b5f805f61395b8661496d565b80519091505f8061396a614ba6565b6001600160a01b031663b3596f07613980610c23565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa1580156139c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139e59190615e4d565b915091508267ffffffffffffffff811115613a0257613a02615473565b604051908082528060200260200182016040528015613a4657816020015b604080518082019091525f8082526020820152815260200190600190039081613a205790505b5060208801525f5b83811015613c3257848181518110613a6857613a68615a64565b60200260200101515f0315613c3257613acd858281518110613a8c57613a8c615a64565b60200260200101515f9081527f150144dd6af711bac4392499881ec6649090601bd196a5ece5174c1400b1f70060205260409020546001600160a01b031690565b6040805160048152602481019091526020810180516001600160e01b03167f722713f700000000000000000000000000000000000000000000000000000000179052909750613b26906001600160a01b03891690610906565b806020019051810190613b3991906159d4565b9850848181518110613b4d57613b4d615a64565b602002602001015188602001518281518110613b6b57613b6b615a64565b602090810291909101015152613bb4613b98613b8884600a615de2565b613b92908c615a13565b85614bcd565b6002613ba2610bb6565b613bac9190615e08565b60ff16614bd8565b88602001518281518110613bca57613bca615a64565b60200260200101516020018181525050613c1e858281518110613bef57613bef615a64565b602002602001015189602001518381518110613c0d57613c0d615a64565b602002602001015160200151614c30565b613c289087615e6f565b9550600101613a4e565b508415613c4257613c4285614c7e565b613c4a61217c565b8752613c5587614d13565b7ff1adf92ee604e0c353dfd4481bacd575b0419a97b473374d7822e0c3cdfb29548486604051613c86929190615e96565b60405180910390a1505050505050505050565b5f80613cc37f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90508015613d0b5761248f613cf87f000000000000000000000000000000000000000000000000000000000000000083615a51565b613d0061097a565b612486906001615a51565b610b687f000000000000000000000000000000000000000000000000000000000000000085615a13565b60605f80846001600160a01b031684604051613d51919061595f565b5f60405180830381855afa9150503d805f811461095a576040519150601f19603f3d011682016040523d82523d5f602084013e61095f565b606081471015613dc7576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610fd8565b5f80856001600160a01b03168486604051613de2919061595f565b5f6040518083038185875af1925050503d805f8114613e1c576040519150601f19603f3d011682016040523d82523d5f602084013e613e21565b606091505b5091509150610f21868383612107565b5f805f846001600160a01b031684604051613e4c919061595f565b5f604051808303815f865af19150503d805f8114613e85576040519150601f19603f3d011682016040523d82523d5f602084013e613e8a565b606091505b5091509150818015613eb4575080511580613eb4575080806020019051810190613eb491906159fa565b801561096f5750505050506001600160a01b03163b151590565b5f613ee26001600160a01b0384168361201e565b905080515f14158015613f06575080806020019051810190613f0491906159fa565b155b15610901576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610fd8565b805115613f585780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f7f08c469289c3f85d9b575f3ae9be6831541ff770a06ea135aa343a4de7c962d005b546001600160a01b0316919050565b5f7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a77300612beb565b5f80613ff38686866124e3565b9050613ffe83614e96565b801561401957505f848061401457614014615a2a565b868809115b1561402c57614029600182615a51565b90505b95945050505050565b5f8061403f614ec2565b90506001600160a01b038116614056573391505090565b919050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0385166140be576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610fd8565b6001600160a01b038416614100576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610fd8565b6001600160a01b038086165f9081526001830160209081526040808320938816835292905220839055811561417d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161417491815260200190565b60405180910390a35b5050505050565b6040516001600160a01b03848116602483015283811660448301526001600160e01b0319831660648301525f9182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b03167fb7009613000000000000000000000000000000000000000000000000000000001790525161420b919061595f565b5f60405180830381855afa9150503d805f8114614243576040519150601f19603f3d011682016040523d82523d5f602084013e614248565b606091505b5091509150811561429a57604081511061427a57808060200190518101906142709190615c34565b909450925061429a565b602081511061429a578080602001905181019061429791906159fa565b93505b505094509492505050565b6001600160e01b031981165f9081527fd334d8b26e68f82b7df26f2f64b6ffd2aaae5e2fc0e8c144c4b3598dcddd4b0060205260409020546001600160a01b0316806142ef575050565b604080516001600160e01b031984166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167f2dc7895200000000000000000000000000000000000000000000000000000000179052610901906001600160a01b03831690610906565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811461210157818110156143ff576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610fd8565b61210184848484035f61405b565b6001600160a01b03831661444f576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610fd8565b6001600160a01b038216614491576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610fd8565b6109018383836148d8565b5f806144a783610c57565b9050808411156144fc576040517f79012fb20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810185905260448101829052606401610fd8565b5f61450685611b45565b9050610b686145136124c1565b8587846145df565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0061454542614eea565b815463ffffffff91909116760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff909116179055565b6001600160a01b0382166145d4576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610fd8565b6110385f83836148d8565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e008054614617906001600160a01b0316863086614f33565b6146218483614592565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051614174929190918252602082015260400190565b5f61468561467e600284615a13565b6064614bcd565b6109749083615a51565b5f8061469a83611e99565b9050808511156146ef576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610fd8565b5f6146f986610cab565b905061402c6147066124c1565b8686848a6137b9565b60607fd243afa3da07e6bdec20fdd573a17f99411aa8a62ae64ca2c426d3a86ae0ac0080546040805160208084028201810190925282815292919083018282801561478157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311614763575b5050505050905090565b60607f45a704819a9dcb1bb5b8cff129eda642cf0e926a9ef104e27aa53f1d1fa47b006040516bffffffffffffffffffffffff19606086901b166020820152603481018490525f906054016040516020818303038152906040528051906020012081526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561484157602002820191905f5260205f20905b81548152602001906001019080831161482d575b5050505050905092915050565b5f6fffffffffffffffffffffffffffffffff8211156148a3576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401610fd8565b5090565b6040516001600160a01b0383811660248301526044820183905261090191859182169063a9059cbb906064016120c5565b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092019092526020810180516001600160e01b03167f32293ccc00000000000000000000000000000000000000000000000000000000179052612101917f00000000000000000000000000000000000000000000000000000000000000001690610906565b80516060905f819003614981575090919050565b5f61498d826002615a13565b67ffffffffffffffff8111156149a5576149a5615473565b6040519080825280602002602001820160405280156149ce578160200160208202803683370190505b509050835f60605b825115614b92576149e8856002615a13565b67ffffffffffffffff811115614a0057614a00615473565b604051908082528060200260200182016040528015614a29578160200160208202803683370190505b5090505f805b8451811015614b8057614a5b86868381518110614a4e57614a4e615a64565b60200260200101516138cd565b614b785783865103614a8157614a7e8687516002614a799190615a13565b614f6c565b95505b848181518110614a9357614a93615a64565b6020026020010151868581518110614aad57614aad615a64565b6020908102919091010152614ac184615ab4565b93505f614ae6868381518110614ad957614ad9615a64565b6020026020010151615006565b5190508015614b76575f5b81811015614b745783855103614b1657614b138586516002614a799190615a13565b94505b614b2b878481518110614ad957614ad9615a64565b8181518110614b3c57614b3c615a64565b6020026020010151858581518110614b5657614b56615a64565b6020908102919091010152614b6a84615ab4565b9350600101614af1565b505b505b600101614a2f565b50614b8a82615084565b9350506149d6565b614b9b84615084565b979650505050505050565b5f7f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a00613fb0565b5f610b7b8284615a3e565b5f60128203614be8575081610974565b6012821115614c1157614bfc601283615989565b614c0790600a615de2565b611fc09084615a13565b611fc083614c20846012615989565b614c2b90600a615de2565b614bcd565b5f8281527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee60060205260408120805490839055614c6b8161520e565b614c748461520e565b610b689190615ee2565b5f811215614cd257614c97614c9282615f01565b61526c565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a7730080545f90614cc7908490615989565b90915550613f8a9050565b614cdb8161526c565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a7730080545f90614d0b908490615a51565b909155505050565b5f80527fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf0006020527ff1a5acf64f330322c7b96c9822a41f340e067e2cefe46839a37cd61f2a91150c54614d635750565b6020810151515f805b8281101561210157614ddc7fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf0005f015f86602001518481518110614db157614db1615a64565b60200260200101515f015181526020019081526020015f2054855f0151670de0b6b3a76400006124e3565b915083602001518181518110614df457614df4615a64565b602002602001015160200151821015614e8e5783602001518181518110614e1d57614e1d615a64565b60200260200101515f015184602001518281518110614e3e57614e3e615a64565b60209081029190910181015101516040517f8f56989d0000000000000000000000000000000000000000000000000000000081526004810192909252602482015260448101839052606401610fd8565b600101614d6c565b5f6002826003811115614eab57614eab615f37565b614eb59190615f4b565b60ff166001149050919050565b5f807f68262fe08792a71a690eb5eb2de15df1b0f463dd786bf92bdbd5f0f0d1ae8b00610c47565b5f63ffffffff8211156148a3576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526020600482015260248101839052604401610fd8565b6040516001600160a01b0384811660248301528381166044830152606482018390526121019186918216906323b872dd906084016120c5565b60605f8267ffffffffffffffff811115614f8857614f88615473565b604051908082528060200260200182016040528015614fb1578160200160208202803683370190505b5090505f5b8451811015614ffe57848181518110614fd157614fd1615a64565b6020026020010151828281518110614feb57614feb615a64565b6020908102919091010152600101614fb6565b509392505050565b5f8181527f82411e549329f2815579116a6c5e60bff72686c93ab5dba4d06242cfaf968900602090815260409182902080548351818402810184019094528084526060939283018282801561507857602002820191905f5260205f20905b815481526020019060010190808311615064575b50505050509050919050565b60605f825167ffffffffffffffff8111156150a1576150a1615473565b6040519080825280602002602001820160405280156150ca578160200160208202803683370190505b5090505f805b8451811015615175578481815181106150eb576150eb615a64565b60200260200101515f1415801561512357506151218386838151811061511357615113615a64565b6020026020010151846152aa565b155b1561516d5784818151811061513a5761513a615a64565b602002602001015183838151811061515457615154615a64565b60209081029190910101528161516981615ab4565b9250505b6001016150d0565b505f8167ffffffffffffffff81111561519057615190615473565b6040519080825280602002602001820160405280156151b9578160200160208202803683370190505b5090505f5b82811015615205578381815181106151d8576151d8615a64565b60200260200101518282815181106151f2576151f2615a64565b60209081029190910101526001016151be565b50949350505050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156148a3576040517f24775e0600000000000000000000000000000000000000000000000000000000815260048101839052602401610fd8565b5f808212156148a3576040517fa8ce443200000000000000000000000000000000000000000000000000000000815260048101839052602401610fd8565b5f805b828110156152e757838582815181106152c8576152c8615a64565b6020026020010151036152df576001915050610b7b565b6001016152ad565b505f949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610b7b60208301846152f1565b5f60208284031215615341575f80fd5b5035919050565b6001600160a01b0381168114613f8a575f80fd5b5f806040838503121561536d575f80fd5b823561537881615348565b946020939093013593505050565b5f805f60608486031215615398575f80fd5b83356153a381615348565b925060208401356153b381615348565b929592945050506040919091013590565b5f602082840312156153d4575f80fd5b8135610b7b81615348565b803560ff81168114614056575f80fd5b5f805f805f8060c08789031215615404575f80fd5b86359550602087013561541681615348565b94506040870135935061542b606088016153df565b9598949750929560808101359460a0909101359350915050565b5f8060408385031215615456575f80fd5b82359150602083013561546881615348565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156154aa576154aa615473565b60405290565b6040805190810167ffffffffffffffff811182821017156154aa576154aa615473565b604051601f8201601f1916810167ffffffffffffffff811182821017156154fc576154fc615473565b604052919050565b5f67ffffffffffffffff82111561551d5761551d615473565b50601f01601f191660200190565b5f806040838503121561553c575f80fd5b823561554781615348565b9150602083013567ffffffffffffffff811115615562575f80fd5b8301601f81018513615572575f80fd5b803561558561558082615504565b6154d3565b818152866020838501011115615599575f80fd5b816020840160208301375f602083830101528093505050509250929050565b602081525f8251602080840152610b6860408401826152f1565b5f805f606084860312156155e4575f80fd5b8335925060208401356155f681615348565b9150604084013561560681615348565b809150509250925092565b5f8083601f840112615621575f80fd5b50813567ffffffffffffffff811115615638575f80fd5b6020830191508360208260051b8501011115615652575f80fd5b9250929050565b5f806020838503121561566a575f80fd5b823567ffffffffffffffff811115615680575f80fd5b61568c85828601615611565b90969095509350505050565b5f80604083850312156156a9575f80fd5b82356156b481615348565b9150602083013561546881615348565b5f82601f8301126156d3575f80fd5b81516156e161558082615504565b8181528460208386010111156156f5575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215615721575f80fd5b815167ffffffffffffffff811115615737575f80fd5b820160808185031215615748575f80fd5b615750615487565b815161575b81615348565b8152602082015161576b81615348565b602082015260408281015190820152606082015167ffffffffffffffff811115615793575f80fd5b61579f868285016156c4565b606083015250949350505050565b5f602082840312156157bd575f80fd5b815167ffffffffffffffff8111156157d3575f80fd5b8201601f810184136157e3575f80fd5b805167ffffffffffffffff8111156157fd576157fd615473565b8060051b61580d602082016154d3565b91825260208184018101929081019087841115615828575f80fd5b6020850192505b83831015614b9b57825167ffffffffffffffff81111561584d575f80fd5b85016040818a03601f19011215615862575f80fd5b61586a6154b0565b602082015161587881615348565b8152604082015167ffffffffffffffff811115615893575f80fd5b6158a28b6020838601016156c4565b602083015250808452505060208201915060208301925061582f565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015615953577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261593d60408701826152f1565b95505060209384019391909101906001016158e4565b50929695505050505050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561097457610974615975565b600181811c908216806159b057607f821691505b6020821081036159ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156159e4575f80fd5b5051919050565b80518015158114614056575f80fd5b5f60208284031215615a0a575f80fd5b610b7b826159eb565b808202811582820484141761097457610974615975565b634e487b7160e01b5f52601260045260245ffd5b5f82615a4c57615a4c615a2a565b500490565b8082018082111561097457610974615975565b634e487b7160e01b5f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112615aaa575f80fd5b9190910192915050565b5f5f198203615ac557615ac5615975565b5060010190565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615aff575f80fd5b83018035915067ffffffffffffffff821115615b19575f80fd5b602001915036819003821315615652575f80fd5b6001600160a01b0383168152604060208201525f610b6860408301846152f1565b5f60208284031215615b5e575f80fd5b815167ffffffffffffffff811115615b74575f80fd5b820160208185031215615b85575f80fd5b6040516020810167ffffffffffffffff81118282101715615ba857615ba8615473565b604052815167ffffffffffffffff811115615bc1575f80fd5b615bcd868285016156c4565b825250949350505050565b5f8085851115615be6575f80fd5b83861115615bf2575f80fd5b5050820193919092039150565b80356001600160e01b0319811690600484101561392b576001600160e01b0319808560040360031b1b82161691505092915050565b5f8060408385031215615c45575f80fd5b615c4e836159eb565b9150602083015163ffffffff81168114615468575f80fd5b6001600160a01b038416815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b60ff818116838216019081111561097457610974615975565b602080825282518282018190525f918401906040840190835b81811015615cf4578351835260209384019390920191600101615cd6565b509095945050505050565b6001815b6001841115615d3a57808504811115615d1e57615d1e615975565b6001841615615d2c57908102905b60019390931c928002615d03565b935093915050565b5f82615d5057506001610974565b81615d5c57505f610974565b8160018114615d725760028114615d7c57615d98565b6001915050610974565b60ff841115615d8d57615d8d615975565b50506001821b610974565b5060208310610133831016604e8410600b8410161715615dbb575081810a610974565b615dc75f198484615cff565b805f1904821115615dda57615dda615975565b029392505050565b5f610b7b8383615d42565b5f60208284031215615dfd575f80fd5b8151610b7b81615348565b60ff828116828216039081111561097457610974615975565b5f8060408385031215615e32575f80fd5b8251615e3d81615348565b6020939093015192949293505050565b5f8060408385031215615e5e575f80fd5b505080516020909101519092909150565b8082018281125f831280158216821582161715615e8e57615e8e615975565b505092915050565b604080825283519082018190525f9060208501906060840190835b81811015615ecf578351835260209384019390920191600101615eb1565b5050602093909301939093525092915050565b8181035f83128015838313168383128216171561392b5761392b615975565b5f7f80000000000000000000000000000000000000000000000000000000000000008203615f3157615f31615975565b505f0390565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680615f5d57615f5d615a2a565b8060ff8416069150509291505056fea2646970667358221220b8b8ebc539a2abd0da10db0e75438dd6cb2b8fa67efb38886b66c2143af4d7dc64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000c1cba3fcea344f92d9239c08c0568f6f2f0ee452000000000000000000000000157ba7c03eb9853900d3602200a58d0361655e2700000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000041cfe273c51e2c1391f9efa5ce7236810323eadc0000000000000000000000003ba9022735c7d570ad99563b428e0e122cb0e1ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000001dfffd97de619f9e1a7e8d3640b97ab0448b8d62000000000000000000000000000000000000000000000000000000000000001049504f5220577374455448204261736500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6970777374455448667573696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008aad082f04d04d1db2e92160baa630e31c22c0730000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000341d2459606feb164a986767cb72ddd8230744fe0000000000000000000000008e95e58677759d1328ad36f316a3796a693c783e000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000f6a9bd8f6dc537675d499ac1ca14f2c55d8b556900000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000