4 txs
8 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 owner_, 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)
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)
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()
NoSharesToMint
error NoSharesToMint()
NoSharesToRedeem
error NoSharesToRedeem()
NotInitializing
error NotInitializing()
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()
WithdrawIsNotAllowed
error WithdrawIsNotAllowed(address caller, uint256 requested)
WrongAddress
error WrongAddress()
WrongCaller
error WrongCaller(address caller)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a060405234801561000f575f80fd5b5060405161720a38038061720a83398101604081905261002e91611219565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156100775750825b90505f826001600160401b031660011480156100925750303b155b9050811580156100a0575080155b156100be5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156100ec57845460ff60401b1916680100000000000000001785555b855160208701516100fd91906104d8565b604086015161010b906104ee565b6101208601516001600160a01b0316608052855161010087015161014088015160405161019093634a5dc1b760e01b9361014c9391929091906024016113bc565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b039384161790526080516001600160a01b03169161050216565b505f866060015190506103486001600160a01b0316816001600160a01b031663f4a6e4586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102059190611409565b6001600160a01b03161461022c57604051630dee4f2f60e41b815260040160405180910390fd5b606087015161023a90610575565b61025a633e3a86e060e01b8860a0015160405160240161014c9190611422565b505f5b8760c00151518110156102e4576102db630c63abc660e01b8960c00151838151811061028b5761028b61146d565b60200260200101515f01518a60c0015184815181106102ac576102ac61146d565b60200260200101516020015160405160240161014c9291909182526001600160a01b0316602082015260400190565b5060010161025d565b505f5b87608001515181101561034d576103458860800151828151811061030d5761030d61146d565b60200260200101515f01518960800151838151811061032e5761032e61146d565b6020026020010151602001516105ea60201b60201c565b6001016102e7565b505f8760e001515f01516001600160a01b031663738beeaa6040518060e001604052808b61010001516001600160a01b03168152602001306001600160a01b031681526020018b60e001516020015181526020018b60e001516040015181526020018b60e00151606001516001600160a01b031681526020018b60e001516080015181526020018b60e0015160a001518152506040518263ffffffff1660e01b81526004016103fc91906114d0565b60c0604051808303815f875af1158015610418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043c9190611553565b905061045681604001518260a0015161073660201b60201c565b61046e8160600151826080015161082f60201b60201c565b61047661091a565b61016088015161048590610966565b505083156104cd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505061177f565b6104e06109d4565b6104ea8282610a24565b5050565b6104f66109d4565b6104ff81610a8d565b50565b60605f80846001600160a01b03168460405161051e91906115c8565b5f60405180830381855af49150503d805f8114610556576040519150601f19603f3d011682016040523d82523d5f602084013e61055b565b606091505b50909250905061056c858383610b10565b95945050505050565b807f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a0080546001600160a01b0319166001600160a01b0392831617905560405190821681527fd51f0f0ead29844497f2889430c7143324b01211d610174de544ac915ae5943f906020015b60405180910390a150565b5f8281527f78e40624004925a4ef6749756748b1deddc674477302d5b7fe18e5335cde39006020526040902061061f81610b6f565b5f82516001600160401b0381111561063957610639610d75565b604051908082528060200260200182016040528015610662578160200160208202803683370190505b5090505f5b83518110156106e0576001835f015f8684815181106106885761068861146d565b602002602001015181526020019081526020015f20819055508381815181106106b3576106b361146d565b60200260200101518282815181106106cd576106cd61146d565b6020908102919091010152600101610667565b5080516106f69060018401906020840190610d21565b507f7e2fec298d6e81dab091490fc6ab01dc37a9077786c1d533a01cdc6a8e0f426384846040516107289291906115de565b60405180910390a150505050565b6001600160a01b03821661075d57604051630d23cf4160e11b815260040160405180910390fd5b61138881111561078857604051630a7e67f960e21b8152600481018290526024015b60405180910390fd5b7f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e0528840080546001600160a01b0319166001600160a01b0384161781556107cb82610bc0565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527fb51da3e1921b4e807ca7fadcf4582ef9ebbabde509ec7cecd222ca1fd4375df591015b60405180910390a1505050565b6001600160a01b03821661085657604051630d23cf4160e11b815260040160405180910390fd5b6101f481111561087c576040516324f8f43160e11b81526004810182905260240161077f565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0080546001600160a01b0319166001600160a01b0384161781556108bf82610bc0565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527f72a8ee4b89f4194ad7e618624c280d66eb07d10b8cd84ab0376c16534413aa409101610822565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0061094442610bf2565b815463ffffffff91909116600160b01b0263ffffffff60b01b19909116179055565b807fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e1180546001600160a01b0319166001600160a01b0392831617905560405190821681527fd8f38238faf978f3ebd926ef7a8ea95baf4119bb290941e49c523f093ea30d94906020016105df565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610a2257604051631afcd79f60e31b815260040160405180910390fd5b565b610a2c6109d4565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610a7884826116ae565b5060048101610a8783826116ae565b50505050565b610a956109d4565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f80610ac184610c22565b9150915081610ad1576012610ad3565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b606082610b2557610b2082610cf8565b610b68565b8151158015610b3c57506001600160a01b0384163b155b15610b6557604051639996b31560e01b81526001600160a01b038516600482015260240161077f565b50805b9392505050565b60018101545f5b81811015610bbb575f835f015f856001018481548110610b9857610b9861146d565b5f9182526020808320909101548352820192909252604001902055600101610b76565b505050565b5f61ffff821115610bee576040516306dfcc6560e41b8152601060048201526024810183905260440161077f565b5090565b5f63ffffffff821115610bee576040516306dfcc6560e41b8152602060048201526024810183905260440161077f565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691610c68916115c8565b5f60405180830381855afa9150503d805f8114610ca0576040519150601f19603f3d011682016040523d82523d5f602084013e610ca5565b606091505b5091509150818015610cb957506020815110155b15610cec575f81806020019051810190610cd39190611768565b905060ff8111610cea576001969095509350505050565b505b505f9485945092505050565b805115610d085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b828054828255905f5260205f20908101928215610d5a579160200282015b82811115610d5a578251825591602001919060010190610d3f565b50610bee9291505b80821115610bee575f8155600101610d62565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715610dab57610dab610d75565b60405290565b60405160c081016001600160401b0381118282101715610dab57610dab610d75565b60405161018081016001600160401b0381118282101715610dab57610dab610d75565b604051601f8201601f191681016001600160401b0381118282101715610e1e57610e1e610d75565b604052919050565b5f82601f830112610e35575f80fd5b81516001600160401b03811115610e4e57610e4e610d75565b610e61601f8201601f1916602001610df6565b818152846020838601011115610e75575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610ea7575f80fd5b919050565b5f6001600160401b03821115610ec457610ec4610d75565b5060051b60200190565b5f82601f830112610edd575f80fd5b8151610ef0610eeb82610eac565b610df6565b8082825260208201915060208360051b860101925085831115610f11575f80fd5b602085015b83811015610ff65780516001600160401b03811115610f33575f80fd5b86016040818903601f19011215610f48575f80fd5b610f50610d89565b6020820151815260408201516001600160401b03811115610f6f575f80fd5b60208184010192505088601f830112610f86575f80fd5b8151610f94610eeb82610eac565b8082825260208201915060208360051b86010192508b831115610fb5575f80fd5b6020850194505b82851015610fd7578451825260209485019490910190610fbc565b8060208501525050508085525050602083019250602081019050610f16565b5095945050505050565b5f82601f83011261100f575f80fd5b815161101d610eeb82610eac565b8082825260208201915060208360051b86010192508583111561103e575f80fd5b602085015b83811015610ff65761105481610e91565b835260209283019201611043565b5f82601f830112611071575f80fd5b815161107f610eeb82610eac565b8082825260208201915060208360061b8601019250858311156110a0575f80fd5b602085015b83811015610ff657604081880312156110bc575f80fd5b6110c4610d89565b815181526110d460208301610e91565b6020820152808452506020830192506040810190506110a5565b5f82601f8301126110fd575f80fd5b815161110b610eeb82610eac565b8082825260208201915060208360061b86010192508583111561112c575f80fd5b602085015b83811015610ff65760408188031215611148575f80fd5b611150610d89565b61115982610e91565b8152602082810151818301529084529290920191604001611131565b5f60c08284031215611185575f80fd5b61118d610db1565b905061119882610e91565b815260208281015190820152604080830151908201526111ba60608301610e91565b606082015260808201516001600160401b038111156111d7575f80fd5b6111e3848285016110ee565b60808301525060a08201516001600160401b03811115611201575f80fd5b61120d848285016110ee565b60a08301525092915050565b5f60208284031215611229575f80fd5b81516001600160401b0381111561123e575f80fd5b82016101808185031215611250575f80fd5b611258610dd3565b81516001600160401b0381111561126d575f80fd5b61127986828501610e26565b82525060208201516001600160401b03811115611294575f80fd5b6112a086828501610e26565b6020830152506112b260408301610e91565b60408201526112c360608301610e91565b606082015260808201516001600160401b038111156112e0575f80fd5b6112ec86828501610ece565b60808301525060a08201516001600160401b0381111561130a575f80fd5b61131686828501611000565b60a08301525060c08201516001600160401b03811115611334575f80fd5b61134086828501611062565b60c08301525060e08201516001600160401b0381111561135e575f80fd5b61136a86828501611175565b60e08301525061137d6101008301610e91565b6101008201526113906101208301610e91565b61012082015261014082810151908201526113ae6101608301610e91565b610160820152949350505050565b606081525f84518060608401528060208701608085015e5f60808285018101919091526001600160a01b03959095166020840152604083019390935250601f909101601f19160101919050565b5f60208284031215611419575f80fd5b610b6882610e91565b602080825282518282018190525f918401906040840190835b818110156114625783516001600160a01b031683526020938401939092019160010161143b565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156114c657815180516001600160a01b031687526020908101518188015260409096019590910190600101611493565b5093949350505050565b6020815260018060a01b03825116602082015260018060a01b036020830151166040820152604082015160608201526060820151608082015260018060a01b0360808301511660a08201525f60a083015160e060c0840152611536610100840182611481565b905060c0840151601f198483030160e085015261056c8282611481565b5f60c0828403128015611564575f80fd5b5061156d610db1565b61157683610e91565b815261158460208401610e91565b602082015261159560408401610e91565b60408201526115a660608401610e91565b60608201526080838101519082015260a0928301519281019290925250919050565b5f82518060208501845e5f920191825250919050565b5f60408201848352604060208401528084518083526060850191506020860192505f5b8181101561161f578351835260209384019390920191600101611601565b50909695505050505050565b600181811c9082168061163f57607f821691505b60208210810361165d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610bbb57805f5260205f20601f840160051c810160208510156116885750805b601f840160051c820191505b818110156116a7575f8155600101611694565b5050505050565b81516001600160401b038111156116c7576116c7610d75565b6116db816116d5845461162b565b84611663565b6020601f82116001811461170d575f83156116f65750848201515b5f19600385901b1c1916600184901b1784556116a7565b5f84815260208120601f198516915b8281101561173c578785015182556020948501946001909201910161171c565b508482101561175957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f60208284031215611778575f80fd5b5051919050565b608051615a656117a55f395f8181610356015281816103f801526148100152615a655ff3fe608060405234801561000f575f80fd5b50600436106102c6575f3560e01c806394bf804d11610179578063c6e6f592116100d6578063dd62ed3e1161008a578063e9a2e7781161006f578063e9a2e7781461071b578063ef8b30f714610652578063f538e5621461072e576102c6565b8063dd62ed3e146106b1578063e3efd95f14610708576102c6565b8063ce96cb77116100bb578063ce96cb7714610678578063d79f44eb1461068b578063d905777e1461069e576102c6565b8063c6e6f59214610652578063c74b521114610665576102c6565b8063b460af941161012d578063baae8abf11610112578063baae8abf14610624578063bf7e214f14610637578063c63d75b61461063f576102c6565b8063b460af94146105fe578063ba08765214610611576102c6565b806395d89b411161015e57806395d89b41146105d0578063a9059cbb146105d8578063b3d7f6b9146105eb576102c6565b806394bf804d1461059d5780639569bf28146105b0576102c6565b806332293ccc116102275780634cdad506116101db57806370a08231116101c057806370a082311461050a5780637a9e5e4b146105515780638fb3603714610564576102c6565b80634cdad506146103bd5780636e553f65146104f7576102c6565b806338d52e0f1161020c57806338d52e0f146104c95780634021a874146104d1578063402d267d146104e4576102c6565b806332293ccc146104a15780633887fd78146104b6576102c6565b80630a28a4771161027e57806323b872dd1161026357806323b872dd1461046c5780633032403a1461047f578063313ce56714610487576102c6565b80630a28a4771461043257806318160ddd14610445576102c6565b806307a2d13a116102af57806307a2d13a146103bd578063095ea7b3146103d05780630971a9d0146103f3576102c6565b806301e1d1141461038d57806306fdde03146103a8575b5f3660606102f57f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab66005460011490565b1561031657610302610736565b5060408051602081019091525f8152610382565b61037f5f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692915050610918565b90505b915050805190602001f35b61039561098c565b6040519081526020015b60405180910390f35b6103b06109c4565b60405161039f9190614ced565b6103956103cb366004614cff565b610a97565b6103e36103de366004614d2a565b610aa2565b604051901515815260200161039f565b61041a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039f565b610395610440366004614cff565b610ac3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610395565b6103e361047a366004614d54565b610acf565b610395610af7565b61048f610b0d565b60405160ff909116815260200161039f565b6104b46104af366004614d54565b610b16565b005b6103956104c4366004614cff565b610b48565b61041a610b7a565b6103956104df366004614d92565b610bae565b6103956104f2366004614e03565b610ca6565b610395610505366004614e1e565b610d02565b610395610518366004614e03565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6104b461055f366004614e03565b610d4b565b61056c610e13565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161039f565b6103956105ab366004614e1e565b610e86565b6105c36105be366004614f1d565b610f25565b60405161039f9190614faa565b6103b0610f88565b6103e36105e6366004614d2a565b610fd9565b6103956105f9366004614cff565b610fef565b61039561060c366004614fc4565b610ffb565b61039561061f366004614fc4565b61118b565b6104b461063236600461504b565b611347565b61041a611676565b61039561064d366004614e03565b61169e565b610395610660366004614cff565b6116ef565b6104b461067336600461504b565b6116fa565b610395610686366004614e03565b61193c565b6105c3610699366004614f1d565b61197d565b6103956106ac366004614e03565b611a58565b6103956106bf36600461508a565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104b461071636600461504b565b611a94565b61039561072936600461504b565b611b63565b610395600281565b604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020808301919091525f80357fffffffff00000000000000000000000000000000000000000000000000000000166034840152835180840360180181526038909301845282519282019290922082527fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e00905220546001600160a01b031680610814576040517f4bf4de4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61085e5f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b03861692915050611bd1565b905080515f0361086c575050565b5f818060200190518101906108819190615103565b9050306001600160a01b031663c74b521182606001518060200190518101906108aa919061519f565b6040518263ffffffff1660e01b81526004016108c691906152b0565b5f604051808303815f87803b1580156108dd575f80fd5b505af11580156108ef573d5f803e3d5ffd5b50505060208201516040830151835161091393506001600160a01b03169190611bde565b505050565b60605f80846001600160a01b0316846040516109349190615351565b5f60405180830381855af49150503d805f811461096c576040519150601f19603f3d011682016040523d82523d5f602084013e610971565b606091505b5091509150610981858383611ce4565b925050505b92915050565b5f80610996611d59565b90505f6109a282611f0a565b90508181106109b3575f9250505090565b6109bd8183615394565b9250505090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610a15906153a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a41906153a7565b8015610a8c5780601f10610a6357610100808354040283529160200191610a8c565b820191905f5260205f20905b815481529060010190602001808311610a6f57829003601f168201915b505050505091505090565b5f610986825f61202b565b5f80610aac612083565b9050610ab981858561208c565b5060019392505050565b5f610986826001612099565b5f610ae2610adb612083565b5f366120e8565b610aed8484846127f5565b90505b9392505050565b5f610b08610b03611d59565b611f0a565b905090565b5f610b08612822565b6040517f1b517b1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee6006020526040812054610986565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005b546001600160a01b031692915050565b5f610bb7612870565b610bc2610adb612083565b610bca610b7a565b6040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152306024830152604482018b90526064820188905260ff8716608483015260a4820186905260c48201859052919091169063d505accf9060e4015f604051808303815f87803b158015610c50575f80fd5b505af1158015610c62573d5f803e3d5ffd5b50505050610c7088876128f1565b9050610c9b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b979650505050505050565b5f80610cb061297d565b90505f610cdb7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b9050818110610ced57505f9392505050565b610cfa6103cb8284615394565b949350505050565b5f610d0b612870565b610d16610adb612083565b610d2083836128f1565b905061098660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f610d54612083565b9050610d5e611676565b6001600160a01b0316816001600160a01b031614610db8576040517f068ca9d80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b816001600160a01b03163b5f03610e06576040517fc2f31e5e0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610daf565b610e0f826129a6565b5050565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080545f919074010000000000000000000000000000000000000000900460ff16610e5e575f610e80565b7f8fb36037000000000000000000000000000000000000000000000000000000005b91505090565b5f610e8f612870565b610e9a610adb612083565b825f03610ed3576040517f01aeea5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610f13576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f1b612a31565b610d208383612b9c565b604080516020810190915260608152333014610f6d576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f806001600160a01b03841683610918565b815292915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610a15906153a7565b5f610fe5610adb612083565b610af08383612c1b565b5f61098682600161202b565b5f611004612870565b61100f610adb612083565b835f03611048576040517fbb464a5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316158061106557506001600160a01b038216155b1561109c576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110a4612a31565b5f6110ad61098c565b905061114b6110bd600a876153f8565b6110c5610b7a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611122573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611146919061540b565b612c32565b61115481612f2e565b61115f85858561302d565b915050610af060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f611194612870565b61119f610adb612083565b835f036111d8576040517ff10cc93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831615806111f557506001600160a01b038216155b1561122c576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611234612a31565b5f805f61123f61098c565b90505f5b600a8110156113045761125588610a97565b935061125f610b7a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156112bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e0919061540b565b925083831015611304576112fc6112f6856130b6565b84612c32565b600101611243565b5061130e81612f2e565b6113198787876130d6565b9350505050610af060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61134f612870565b61135a610adb612083565b805f8167ffffffffffffffff81111561137557611375614e4c565b60405190808252806020026020018201604052801561139e578160200160208202803683370190505b5090505f805f6113ac61098c565b90506113d760017f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b5f5b8581101561160d576114518888838181106113f6576113f6615422565b9050602002810190611408919061544f565b611416906020810190614e03565b6001600160a01b03165f9081527f48932b860eb451ad240d4fe2b46522e5a0ac079d201fe50d4e0be078c75b54006020526040902054151590565b611487576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87878281811061149957611499615422565b90506020028101906114ab919061544f565b6114b9906020810190614e03565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611518919061540b565b92506115248584613156565b15155f03611558578285858151811061153f5761153f615422565b6020908102919091010152836115548161548b565b9450505b61160488888381811061156d5761156d615422565b905060200281019061157f919061544f565b61158d9060208101906154c2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c92508b91508590508181106115d5576115d5615422565b90506020028101906115e7919061544f565b6115f5906020810190614e03565b6001600160a01b031690610918565b506001016113d9565b506116365f7f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b61163f846131bb565b61164881612f2e565b5050505050610e0f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f807ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00610b9e565b5f806116a861297d565b90505f6116d37f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90508181106116e557505f9392505050565b610cfa8183615394565b5f610986825f612099565b303314611735576040517f29507dbf000000000000000000000000000000000000000000000000000000008152336004820152602401610daf565b805f8167ffffffffffffffff81111561175057611750614e4c565b604051908082528060200260200182016040528015611779578160200160208202803683370190505b5090505f805f5b8481101561192a5761179d8787838181106113f6576113f6615422565b6117d3576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8686828181106117e5576117e5615422565b90506020028101906117f7919061544f565b611805906020810190614e03565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015611840573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611864919061540b565b91506118708483613156565b15155f036118a4578184848151811061188b5761188b615422565b6020908102919091010152826118a08161548b565b9350505b6119218787838181106118b9576118b9615422565b90506020028101906118cb919061544f565b6118d99060208101906154c2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b92508a91508590508181106115d5576115d5615422565b50600101611780565b50611934836131bb565b505050505050565b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610986905f61202b565b6040805160208101909152606081526001600160a01b0383166119cc576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611a4284846040516024016119e3929190615523565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9569bf2800000000000000000000000000000000000000000000000000000000179052309061354f565b905080806020019051810190610cfa9190615544565b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610986565b611a9c612870565b611aa7610adb612083565b805f5b81811015611b3857611b2f848483818110611ac757611ac7615422565b9050602002810190611ad9919061544f565b611ae79060208101906154c2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892508791508590508181106115d5576115d5615422565b50600101611aaa565b5050610e0f60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f818103611b7a57611b7361098c565b9050610986565b5f611b8361098c565b9050611bc08484808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506131bb92505050565b611bc981612f2e565b610cfa61098c565b6060610af083835f6135a3565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611c5d8482613655565b611cde576040516001600160a01b0384811660248301525f6044830152611cd491869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506136f2565b611cde84826136f2565b50505050565b606082611cf957611cf48261376c565b610af0565b8151158015611d1057506001600160a01b0384163b155b15611d52576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610daf565b5080610af0565b5f80611d636137b1565b90506001600160a01b03811615611e7957806001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd4919061540b565b611ddc6137e3565b611de4610b7a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611e41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e65919061540b565b611e6f91906153f8565b610e8091906153f8565b611e816137e3565b611e89610b7a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611ee6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6f919061540b565b5f80611fae604080516060810182525f80825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f006040805160608101825291546001600160a01b038116835274010000000000000000000000000000000000000000810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b6020810151909150429061ffff161580611fd05750604082015163ffffffff16155b80611fe55750816040015163ffffffff168111155b15611ff357505f9392505050565b610cfa61201a85846040015163ffffffff16846120109190615394565b6301e1338061380a565b836020015161ffff1661271061380a565b5f610af061203761098c565b6120429060016153f8565b61204e6002600a6156ef565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025461207a91906153f8565b85919085613901565b5f610b08613944565b610913838383600161396a565b5f610af06120a96002600a6156ef565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546120d591906153f8565b6120dd61098c565b61207a9060016153f8565b5f6120f660048284866156fd565b6120ff91615724565b90505f80807fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e11546001600160a01b03169050801580159061218157507fb460af94000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008516145b156123285761218e611676565b6040517f77d973700000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008716604483015291909116906377d973709060640160408051808303815f875af115801561221b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061223f9190615798565b90935091505f61224d613a93565b6040517f533543f20000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152602482018390529192509083169063533543f2906044016020604051808303815f875af11580156122b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122da91906157ca565b612322576040517f7199992a0000000000000000000000000000000000000000000000000000000081526001600160a01b038916600482015260248101829052604401610daf565b506126a6565b6001600160a01b0381161580159061238157507fba087652000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008516145b156124505761238e611676565b6040517f77d973700000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008716604483015291909116906377d973709060640160408051808303815f875af115801561241b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243f9190615798565b90935091505f61224d6103cb613a93565b7f6e553f65000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000851614806124e157507f94bf804d000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008516145b8061252d57507f4021a874000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008516145b8061257957507fba087652000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008516145b806125c557507fb460af94000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008516145b1561268d576125d2611676565b6040517f77d973700000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301523060248301527fffffffff000000000000000000000000000000000000000000000000000000008716604483015291909116906377d973709060640160408051808303815f875af115801561265f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126839190615798565b90935091506126a6565b6126a0612698611676565b883087613ab8565b90935091505b826127e35763ffffffff8216156127a6577ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017815561271d611676565b6001600160a01b03166394c7d7ee8989896040518463ffffffff1660e01b815260040161274c939291906157e3565b5f604051808303815f87803b158015612763575f80fd5b505af1158015612775573d5f803e3d5ffd5b505082547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16909255506127e39050565b6040517f068ca9d80000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152602401610daf565b6127ec84613c06565b50505050505050565b5f806127ff612083565b905061280c858285613cd3565b612817858585613d9f565b506001949350505050565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e00905060028154610e80919074010000000000000000000000000000000000000000900460ff16615821565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016128eb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f825f0361292b576040517f182b250f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661296b576040517f1a479e8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612973612a31565b610af08383613e2e565b5f7f0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d005b54919050565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b5f612ad4604080516060810182525f80825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f006040805160608101825291546001600160a01b038116835274010000000000000000000000000000000000000000810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b90505f612adf610af7565b9050612ae9613ead565b5f612af3826116ef565b9050805f03612b0157505050565b612b2a60017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b8251612b369082613f24565b612b5e5f7faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b60408051838152602081018390527fbb92eb7521ac4e9e56f7e75ea06a10cbc121c444e5d175fff5e8e0bc9e804937910160405180910390a1505050565b5f80612ba78361169e565b905080841115612bfc576040517f284ff6670000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810185905260448101829052606401610daf565b5f612c0685610fef565b9050610cfa612c13612083565b858388613f71565b5f80612c25612083565b9050610ab9818585613d9f565b815f03612c3d575050565b5f818310610913575f8060605f612c52614001565b90505f815167ffffffffffffffff811115612c6f57612c6f614e4c565b604051908082528060200260200182016040528015612c98578160200160208202803683370190505b509050612ca58789615394565b82519096505f90815b8815801590612cbc57508181105b15612f1857612ce4858281518110612cd657612cd6615422565b60200260200101518261407d565b9550885f1b865f81518110612cfb57612cfb615422565b602002602001018181525050612da686604051602401612d1b919061583a565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbe1946da000000000000000000000000000000000000000000000000000000001790528651879084908110612d8757612d87615422565b60200260200101516001600160a01b031661091890919063ffffffff16565b50612daf610b7a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612e0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e30919061540b565b9250828b1115612e4b57612e44838c615394565b9850612e4f565b5f98505b848181518110612e6157612e61615422565b60200260200101516001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ea4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ec8919061540b565b9650612ed48488613156565b15155f03612f085786848981518110612eef57612eef615422565b602090810291909101015287612f048161548b565b9850505b612f118161548b565b9050612cae565b50612f22836131bb565b50505050505050505050565b5f612f3761098c565b905081811015612f45575050565b5f612fb66040805180820182525f80825260209182015281518083019092527f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e05288400546001600160a01b038116835261ffff74010000000000000000000000000000000000000000909104169082015290565b90505f612fc661201a8585615394565b9050612ff160017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b815161300590613000836116ef565b613f24565b611cde5f7faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b5f806130388361193c565b90508085111561308d576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610daf565b5f61309786610ac3565b90506130ad6130a4612083565b86868985614153565b95945050505050565b5f6130cc6130c560028461587c565b606461421a565b61098690836153f8565b5f806130e183611a58565b905080851115613136576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401610daf565b5f61314086610a97565b90506130ad61314d612083565b8686848a614153565b5f805b83518110156131b45783818151811061317457613174615422565b60200260200101515f03156131b4578284828151811061319657613196615422565b6020026020010151036131ac57600191506131b4565b600101613159565b5092915050565b5f6131d860405180604001604052805f8152602001606081525090565b5f805f6131e486614225565b80519091505f806131f3614453565b6001600160a01b031663b3596f07613209610b7a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa158015613262573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132869190615893565b915091508267ffffffffffffffff8111156132a3576132a3614e4c565b6040519080825280602002602001820160405280156132e757816020015b604080518082019091525f80825260208201528152602001906001900390816132c15790505b5060208801525f5b838110156134e85784818151811061330957613309615422565b60200260200101515f03156134e85761336e85828151811061332d5761332d615422565b60200260200101515f9081527f150144dd6af711bac4392499881ec6649090601bd196a5ece5174c1400b1f70060205260409020546001600160a01b031690565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f722713f7000000000000000000000000000000000000000000000000000000001790529097506133dc906001600160a01b03891690610918565b8060200190518101906133ef919061540b565b985084818151811061340357613403615422565b60200260200101518860200151828151811061342157613421615422565b60209081029190910101515261346a61344e61343e84600a6158b5565b613448908c61587c565b8561421a565b6002613458610b0d565b61346291906158c0565b60ff1661447a565b8860200151828151811061348057613480615422565b602002602001015160200181815250506134d48582815181106134a5576134a5615422565b6020026020010151896020015183815181106134c3576134c3615422565b6020026020010151602001516144d2565b6134de90876158d9565b95506001016132ef565b5084156134f8576134f885614520565b613500611d59565b875261350b876145b5565b7ff1adf92ee604e0c353dfd4481bacd575b0419a97b473374d7822e0c3cdfb2954848660405161353c929190615900565b60405180910390a1505050505050505050565b60605f80846001600160a01b03168460405161356b9190615351565b5f60405180830381855afa9150503d805f811461096c576040519150601f19603f3d011682016040523d82523d5f602084013e610971565b6060814710156135e1576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610daf565b5f80856001600160a01b031684866040516135fc9190615351565b5f6040518083038185875af1925050503d805f8114613636576040519150601f19603f3d011682016040523d82523d5f602084013e61363b565b606091505b509150915061364b868383611ce4565b9695505050505050565b5f805f846001600160a01b0316846040516136709190615351565b5f604051808303815f865af19150503d805f81146136a9576040519150601f19603f3d011682016040523d82523d5f602084013e6136ae565b606091505b50915091508180156136d85750805115806136d85750808060200190518101906136d891906157ca565b80156109815750505050506001600160a01b03163b151590565b5f6137066001600160a01b03841683611bd1565b905080515f1415801561372a57508080602001905181019061372891906157ca565b155b15610913576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610daf565b80511561377c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f7f08c469289c3f85d9b575f3ae9be6831541ff770a06ea135aa343a4de7c962d005b546001600160a01b0316919050565b5f7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a773006129a0565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f0361385d578382816138535761385361594c565b0492505050610af0565b808411613896576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8061390e86868661380a565b905061391983614738565b801561393457505f848061392f5761392f61594c565b868809115b156130ad5761364b6001826153f8565b5f8061394e614764565b90506001600160a01b038116613965573391505090565b919050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0385166139cd576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610daf565b6001600160a01b038416613a0f576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610daf565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115613a8c57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051613a8391815260200190565b60405180910390a35b5050505050565b5f80613aa236600481846156fd565b810190613aaf9190614fc4565b50909392505050565b6040516001600160a01b03848116602483015283811660448301527fffffffff00000000000000000000000000000000000000000000000000000000831660648301525f9182918291829189169060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb70096130000000000000000000000000000000000000000000000000000000017905251613b6c9190615351565b5f60405180830381855afa9150503d805f8114613ba4576040519150601f19603f3d011682016040523d82523d5f602084013e613ba9565b606091505b50915091508115613bfb576040815110613bdb5780806020019051810190613bd19190615798565b9094509250613bfb565b6020815110613bfb5780806020019051810190613bf891906157ca565b93505b505094509492505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165f9081527fd334d8b26e68f82b7df26f2f64b6ffd2aaae5e2fc0e8c144c4b3598dcddd4b0060205260409020546001600160a01b031680613c68575050565b6040805160048152602481019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc040622600000000000000000000000000000000000000000000000000000000179052610913906001600160a01b03831690610918565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611cde5781811015613d91576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610daf565b611cde84848484035f61396a565b6001600160a01b038316613de1576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610daf565b6001600160a01b038216613e23576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610daf565b61091383838361478c565b5f80613e3983610ca6565b905080841115613e8e576040517f79012fb20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810185905260448101829052606401610daf565b5f613e98856116ef565b9050610cfa613ea5612083565b858784613f71565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f00613ed742614836565b815463ffffffff91909116760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff909116179055565b6001600160a01b038216613f66576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610daf565b610e0f5f838361478c565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e008054613fa9906001600160a01b0316863086614883565b613fb38483613f24565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051613a83929190918252602082015260400190565b60607fd243afa3da07e6bdec20fdd573a17f99411aa8a62ae64ca2c426d3a86ae0ac0080546040805160208084028201810190925282815292919083018282801561407357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311614055575b5050505050905090565b60607f45a704819a9dcb1bb5b8cff129eda642cf0e926a9ef104e27aa53f1d1fa47b006040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152603481018490525f906054016040516020818303038152906040528051906020012081526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561414657602002820191905f5260205f20905b815481526020019060010190808311614132575b5050505050905092915050565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e006001600160a01b038681169085161461419257614192848784613cd3565b61419c84836148bc565b80546141b2906001600160a01b03168685614909565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db868660405161420a929190918252602082015260400190565b60405180910390a4505050505050565b5f610af08284615979565b80516060905f819003614239575090919050565b5f61424582600261587c565b67ffffffffffffffff81111561425d5761425d614e4c565b604051908082528060200260200182016040528015614286578160200160208202803683370190505b509050835f60605b82511561444a576142a085600261587c565b67ffffffffffffffff8111156142b8576142b8614e4c565b6040519080825280602002602001820160405280156142e1578160200160208202803683370190505b5090505f805b8451811015614438576143138686838151811061430657614306615422565b6020026020010151613156565b6144305783865103614339576143368687516002614331919061587c565b61493a565b95505b84818151811061434b5761434b615422565b602002602001015186858151811061436557614365615422565b60209081029190910101526143798461548b565b93505f61439e86838151811061439157614391615422565b60200260200101516149d4565b519050801561442e575f5b8181101561442c57838551036143ce576143cb8586516002614331919061587c565b94505b6143e387848151811061439157614391615422565b81815181106143f4576143f4615422565b602002602001015185858151811061440e5761440e615422565b60209081029190910101526144228461548b565b93506001016143a9565b505b505b6001016142e7565b5061444282614a52565b93505061428e565b610c9b84614a52565b5f7f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a006137d4565b5f6012820361448a575081610986565b60128211156144b35761449e601283615394565b6144a99060126158b5565b611b73908461587c565b611b73836144c2846012615394565b6144cd90600a6158b5565b61421a565b5f8281527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee6006020526040812080549083905561450d81614bdc565b61451684614bdc565b610cfa919061598c565b5f81121561457457614539614534826159ab565b614c3a565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a7730080545f90614569908490615394565b909155506137ae9050565b61457d81614c3a565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a7730080545f906145ad9084906153f8565b909155505050565b5f80527fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf0006020527ff1a5acf64f330322c7b96c9822a41f340e067e2cefe46839a37cd61f2a91150c546146055750565b6020810151515f805b82811015611cde5761467e7fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf0005f015f8660200151848151811061465357614653615422565b60200260200101515f015181526020019081526020015f2054855f0151670de0b6b3a764000061380a565b91508360200151818151811061469657614696615422565b60200260200101516020015182101561473057836020015181815181106146bf576146bf615422565b60200260200101515f0151846020015182815181106146e0576146e0615422565b60209081029190910181015101516040517f8f56989d0000000000000000000000000000000000000000000000000000000081526004810192909252602482015260448101839052606401610daf565b60010161460e565b5f600282600381111561474d5761474d6159e1565b6147579190615a0e565b60ff166001149050919050565b5f807f68262fe08792a71a690eb5eb2de15df1b0f463dd786bf92bdbd5f0f0d1ae8b00610b9e565b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092019092526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f32293ccc00000000000000000000000000000000000000000000000000000000179052611cde917f00000000000000000000000000000000000000000000000000000000000000001690610918565b5f63ffffffff82111561487f576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526020600482015260248101839052604401610daf565b5090565b6040516001600160a01b038481166024830152838116604483015260648201839052611cde9186918216906323b872dd90608401611c8d565b6001600160a01b0382166148fe576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610daf565b610e0f825f8361478c565b6040516001600160a01b0383811660248301526044820183905261091391859182169063a9059cbb90606401611c8d565b60605f8267ffffffffffffffff81111561495657614956614e4c565b60405190808252806020026020018201604052801561497f578160200160208202803683370190505b5090505f5b84518110156149cc5784818151811061499f5761499f615422565b60200260200101518282815181106149b9576149b9615422565b6020908102919091010152600101614984565b509392505050565b5f8181527f82411e549329f2815579116a6c5e60bff72686c93ab5dba4d06242cfaf9689006020908152604091829020805483518184028101840190945280845260609392830182828015614a4657602002820191905f5260205f20905b815481526020019060010190808311614a32575b50505050509050919050565b60605f825167ffffffffffffffff811115614a6f57614a6f614e4c565b604051908082528060200260200182016040528015614a98578160200160208202803683370190505b5090505f805b8451811015614b4357848181518110614ab957614ab9615422565b60200260200101515f14158015614af15750614aef83868381518110614ae157614ae1615422565b602002602001015184614c78565b155b15614b3b57848181518110614b0857614b08615422565b6020026020010151838381518110614b2257614b22615422565b602090810291909101015281614b378161548b565b9250505b600101614a9e565b505f8167ffffffffffffffff811115614b5e57614b5e614e4c565b604051908082528060200260200182016040528015614b87578160200160208202803683370190505b5090505f5b82811015614bd357838181518110614ba657614ba6615422565b6020026020010151828281518110614bc057614bc0615422565b6020908102919091010152600101614b8c565b50949350505050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561487f576040517f24775e0600000000000000000000000000000000000000000000000000000000815260048101839052602401610daf565b5f8082121561487f576040517fa8ce443200000000000000000000000000000000000000000000000000000000815260048101839052602401610daf565b5f805b82811015614cb55783858281518110614c9657614c96615422565b602002602001015103614cad576001915050610af0565b600101614c7b565b505f949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610af06020830184614cbf565b5f60208284031215614d0f575f80fd5b5035919050565b6001600160a01b03811681146137ae575f80fd5b5f8060408385031215614d3b575f80fd5b8235614d4681614d16565b946020939093013593505050565b5f805f60608486031215614d66575f80fd5b8335614d7181614d16565b92506020840135614d8181614d16565b929592945050506040919091013590565b5f805f805f805f60e0888a031215614da8575f80fd5b873596506020880135614dba81614d16565b95506040880135614dca81614d16565b945060608801359350608088013560ff81168114614de6575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f60208284031215614e13575f80fd5b8135610af081614d16565b5f8060408385031215614e2f575f80fd5b823591506020830135614e4181614d16565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715614e9c57614e9c614e4c565b60405290565b6040805190810167ffffffffffffffff81118282101715614e9c57614e9c614e4c565b604051601f8201601f1916810167ffffffffffffffff81118282101715614eee57614eee614e4c565b604052919050565b5f67ffffffffffffffff821115614f0f57614f0f614e4c565b50601f01601f191660200190565b5f8060408385031215614f2e575f80fd5b8235614f3981614d16565b9150602083013567ffffffffffffffff811115614f54575f80fd5b8301601f81018513614f64575f80fd5b8035614f77614f7282614ef6565b614ec5565b818152866020838501011115614f8b575f80fd5b816020840160208301375f602083830101528093505050509250929050565b602081525f8251602080840152610cfa6040840182614cbf565b5f805f60608486031215614fd6575f80fd5b833592506020840135614fe881614d16565b91506040840135614ff881614d16565b809150509250925092565b5f8083601f840112615013575f80fd5b50813567ffffffffffffffff81111561502a575f80fd5b6020830191508360208260051b8501011115615044575f80fd5b9250929050565b5f806020838503121561505c575f80fd5b823567ffffffffffffffff811115615072575f80fd5b61507e85828601615003565b90969095509350505050565b5f806040838503121561509b575f80fd5b82356150a681614d16565b91506020830135614e4181614d16565b5f82601f8301126150c5575f80fd5b81516150d3614f7282614ef6565b8181528460208386010111156150e7575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215615113575f80fd5b815167ffffffffffffffff811115615129575f80fd5b82016080818503121561513a575f80fd5b615142614e79565b815161514d81614d16565b8152602082015161515d81614d16565b602082015260408281015190820152606082015167ffffffffffffffff811115615185575f80fd5b615191868285016150b6565b606083015250949350505050565b5f602082840312156151af575f80fd5b815167ffffffffffffffff8111156151c5575f80fd5b8201601f810184136151d5575f80fd5b805167ffffffffffffffff8111156151ef576151ef614e4c565b8060051b6151ff60208201614ec5565b9182526020818401810192908101908784111561521a575f80fd5b6020850192505b83831015610c9b57825167ffffffffffffffff81111561523f575f80fd5b85016040818a03601f19011215615254575f80fd5b61525c614ea2565b602082015161526a81614d16565b8152604082015167ffffffffffffffff811115615285575f80fd5b6152948b6020838601016150b6565b6020830152508084525050602082019150602083019250615221565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015615345577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261532f6040870182614cbf565b95505060209384019391909101906001016152d6565b50929695505050505050565b5f82518060208501845e5f920191825250919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561098657610986615367565b600181811c908216806153bb57607f821691505b6020821081036153f2577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b8082018082111561098657610986615367565b5f6020828403121561541b575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112615481575f80fd5b9190910192915050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036154bb576154bb615367565b5060010190565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126154f5575f80fd5b83018035915067ffffffffffffffff82111561550f575f80fd5b602001915036819003821315615044575f80fd5b6001600160a01b0383168152604060208201525f610aed6040830184614cbf565b5f60208284031215615554575f80fd5b815167ffffffffffffffff81111561556a575f80fd5b82016020818503121561557b575f80fd5b6040516020810167ffffffffffffffff8111828210171561559e5761559e614e4c565b604052815167ffffffffffffffff8111156155b7575f80fd5b6155c3868285016150b6565b825250949350505050565b6001815b6001841115615609578085048111156155ed576155ed615367565b60018416156155fb57908102905b60019390931c9280026155d2565b935093915050565b5f8261561f57506001610986565b8161562b57505f610986565b8160018114615641576002811461564b57615667565b6001915050610986565b60ff84111561565c5761565c615367565b50506001821b610986565b5060208310610133831016604e8410600b841016171561568a575081810a610986565b6156b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846155ce565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156156e7576156e7615367565b029392505050565b5f610af060ff841683615611565b5f808585111561570b575f80fd5b83861115615717575f80fd5b5050820193919092039150565b80357fffffffff0000000000000000000000000000000000000000000000000000000081169060048410156131b4577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505092915050565b80518015158114613965575f80fd5b5f80604083850312156157a9575f80fd5b6157b283615789565b9150602083015163ffffffff81168114614e41575f80fd5b5f602082840312156157da575f80fd5b610af082615789565b6001600160a01b038416815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b60ff818116838216019081111561098657610986615367565b602080825282518282018190525f918401906040840190835b81811015615871578351835260209384019390920191600101615853565b509095945050505050565b808202811582820484141761098657610986615367565b5f80604083850312156158a4575f80fd5b505080516020909101519092909150565b5f610af08383615611565b60ff828116828216039081111561098657610986615367565b8082018281125f8312801582168215821617156158f8576158f8615367565b505092915050565b604080825283519082018190525f9060208501906060840190835b8181101561593957835183526020938401939092019160010161591b565b5050602093909301939093525092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826159875761598761594c565b500490565b8181035f8312801583831316838312821617156131b4576131b4615367565b5f7f800000000000000000000000000000000000000000000000000000000000000082036159db576159db615367565b505f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff831680615a2057615a2061594c565b8060ff8416069150509291505056fea2646970667358221220b53af4eedbd8c5101ca4fc1151d9da041458cb023658f570748bc2e8f42b3ce164736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000009d4214c03d01f49544c0448dbe3a27f768f2b340000000000000000000000006c25876346a48de3457312cb6d50020504413b5d000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000006c0000000000000000000000000cc9a3e8205ab60e613a044efcea5d3479187acee0000000000000000000000004005d5d510fb74f1930c629e0da566ce20160791ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205265736572766f6972207372555344204c6f6f70696e6720457468657265756d000000000000000000000000000000000000000000000000000000000000000d69707372555344667573696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000130000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000009d4214c03d01f49544c0448dbe3a27f768f2b34000000000000000000000000738d1115b90efa71ae468f1287fc864775e23a31000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001c84cdb5a63207d8c2e7251f758a435c6bd10b4eaefdaf36d7650159bf035962e000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000738d1115b90efa71ae468f1287fc864775e23a31000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000009d4214c03d01f49544c0448dbe3a27f768f2b34000000000000000000000000738d1115b90efa71ae468f1287fc864775e23a3100000000000000000000000000000000000000000000000000000000000000050000000000000000000000009185033e24db36407b9b1a1886cb47b9533433de000000000000000000000000d08cb606cee700628e55b0b0159ad65421e6c8df0000000000000000000000009981e75b7254fd268c9182631bf89c86101359d6000000000000000000000000e1aa89eb42c23f292cda1544566f6ebee3a67eed00000000000000000000000008dfdbb6ecf19f1fc974e0675783e1150b2b650f00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000013000000000000000000000000b1b74e885349cd9d1f0effb2e1ce0fb79959d7cf000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000ad1776b9319a03216a44aba0242cc0bc7e3cac300000000000000000000000000000000000000000000000000000000000000070000000000000000000000006cebf3e3392d0860ed174402884b941dcbb30654000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000e9562d7bd06b43e6391c5be4b3c5f5c2bc1e06bf000000000000000000000000af0e04342aa2d0a4ad6dca04c5df3b38be8c0e5d000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000f6a9bd8f6dc537675d499ac1ca14f2c55d8b556900000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000