15 txs
17 calls
constructor
constructor(address _token, address _pendleRouter, address _morpho, address _feeRecipient, address _allocator, address _pricefeed)
functions
allocator
viewfunction allocator() view returns (address)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() 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)
depositCap
viewfunction depositCap() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
idleBalance
viewfunction idleBalance() view returns (uint256 amount)
index
viewfunction index(bytes32) view returns (uint256)
isMarketEnabled
viewfunction isMarketEnabled(bytes32) view returns (bool)
lastTotalAssets
viewfunction lastTotalAssets() view returns (uint256)
lastUpdate
viewfunction lastUpdate() view returns (uint256)
MAX_NUMBER_MARKETS
viewfunction MAX_NUMBER_MARKETS() view returns (uint8)
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)
morpho
viewfunction morpho() view returns (address)
morphoPositions
viewfunction morphoPositions(uint256) view returns (address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
pendleRouter
viewfunction pendleRouter() view returns (address)
positionMaxSlippage
viewfunction positionMaxSlippage() view returns (uint256)
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)
pricefeed
viewfunction pricefeed() view returns (address)
protocolFee
viewfunction protocolFee() view returns (uint256)
scheduledAdd
viewfunction scheduledAdd(bytes32) view returns (uint256)
SLIPPAGE_PRECISION
viewfunction SLIPPAGE_PRECISION() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
timelockPeriod
viewfunction timelockPeriod() view returns (uint256)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
updateInterval
viewfunction updateInterval() view returns (uint256)
vestingDuration
viewfunction vestingDuration() view returns (uint256)
vestingInterest
viewfunction vestingInterest() view returns (uint256)
_updateTotalAssets
nonpayablefunction _updateTotalAssets()
addMarket
nonpayablefunction addMarket(tuple mp)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256 shares)
loopToMorpho
nonpayablefunction loopToMorpho(tuple params)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256 assets)
onMorphoRepay
nonpayablefunction onMorphoRepay(uint256 assets, bytes data)
onMorphoSupplyCollateral
nonpayablefunction onMorphoSupplyCollateral(uint256 assets, bytes data)
redeem
nonpayablefunction redeem(uint256 shares, address receiver, address owner) returns (uint256 assets)
removeMarket
nonpayablefunction removeMarket(tuple mp)
renounceOwnership
nonpayablefunction renounceOwnership()
repayPosition
nonpayablefunction repayPosition(tuple params)
scheduleAddMarket
nonpayablefunction scheduleAddMarket(bytes32 id)
setAllocator
nonpayablefunction setAllocator(address _allocator)
setDepositCap
nonpayablefunction setDepositCap(uint256 _depositCap)
setFeeRecipient
nonpayablefunction setFeeRecipient(address _feeRecipient)
setPositionMaxSlippage
nonpayablefunction setPositionMaxSlippage(uint256 _maxSlippage)
setProtocolFee
nonpayablefunction setProtocolFee(uint256 _protocolFee)
setTimelockPeriod
nonpayablefunction setTimelockPeriod(uint256 newTimelockPeriod)
setUpdateInterval
nonpayablefunction setUpdateInterval(uint256 _updateInterval)
setVestingDuration
nonpayablefunction setVestingDuration(uint256 _vestingDuration)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw(uint256 assets, address receiver, address owner) returns (uint256 shares)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
errors
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)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60e06040526105dc600a556064601055612710601155348015610020575f5ffd5b50604051615cb1380380615cb183398101604081905261003f916102c8565b33866040518060400160405280600f81526020016e746573744c6f6f706564205553444360881b81525060405180604001604052806006815260200165746c5553444360d01b815250816003908161009791906103d0565b5060046100a482826103d0565b5050505f5f6100b88361018660201b60201c565b91509150816100c85760126100ca565b805b60ff1660a05250506001600160a01b03908116608052811661010557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61010e8161025c565b506001600655600c80546001600160a01b039687166001600160a01b03199182161790915593851660c052600e805493861693851693909317909255600f8054918516918416919091179055600d80549190931691161790555042600855610e1060135561546060095564e8d4a510006014556104b7565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b038716916101cc9161048a565b5f60405180830381855afa9150503d805f8114610204576040519150601f19603f3d011682016040523d82523d5f602084013e610209565b606091505b509150915081801561021d57506020815110155b15610250575f8180602001905181019061023791906104a0565b905060ff811161024e576001969095509350505050565b505b505f9485945092505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b03811681146102c3575f5ffd5b919050565b5f5f5f5f5f5f60c087890312156102dd575f5ffd5b6102e6876102ad565b95506102f4602088016102ad565b9450610302604088016102ad565b9350610310606088016102ad565b925061031e608088016102ad565b915061032c60a088016102ad565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061036057607f821691505b60208210810361037e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156103cb57805f5260205f20601f840160051c810160208510156103a95750805b601f840160051c820191505b818110156103c8575f81556001016103b5565b50505b505050565b81516001600160401b038111156103e9576103e9610338565b6103fd816103f7845461034c565b84610384565b6020601f82116001811461042f575f83156104185750848201515b5f19600385901b1c1916600184901b1784556103c8565b5f84815260208120601f198516915b8281101561045e578785015182556020948501946001909201910161043e565b508482101561047b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82518060208501845e5f920191825250919050565b5f602082840312156104b0575f5ffd5b5051919050565b60805160a05160c05161570c6105a55f395f81816107fe015281816108e50152818161099a015281816109e401528181610f5a015281816112d30152818161141501528181611c9601528181611da701528181611e4d015281816123f30152818161248d01528181612740015281816127830152818161282401526129bb01525f61120001525f818161050d01528181610bad01528181610d3a01528181610e90015281816115870152818161161e01528181611fc9015281816120020152818161213a015281816125810152818161308a0152818161311501528181613f520152614004015261570c5ff3fe608060405234801561000f575f5ffd5b50600436106103ca575f3560e01c80638da5cb5b11610200578063bf83f2a21161011f578063d905777e116100b4578063e74b981b11610084578063e74b981b1461087d578063ef8b30f7146107a1578063f2fde38b14610890578063f55c980f146108a3578063fd2c80ae146108b6575f5ffd5b8063d905777e14610820578063dbd5edc714610833578063dd62ed3e1461083c578063e1eb227414610874575f5ffd5b8063cb58d00d116100ef578063cb58d00d146107b4578063ce96cb77146107c7578063d18bf7f9146107da578063d8fbc833146107f9575f5ffd5b8063bf83f2a214610785578063c046371114610798578063c63d75b614610531578063c6e6f592146107a1575f5ffd5b8063b0e21e8a11610195578063b460af9411610165578063b460af94146106fe578063b880ae8614610711578063ba0876521461075f578063bada42d714610772575f5ffd5b8063b0e21e8a146106c7578063b1022fdf146106d0578063b1bbb310146106e3578063b3d7f6b9146106eb575f5ffd5b8063a108499b116101d0578063a108499b14610685578063a9059cbb1461068e578063aa5dcecc146106a1578063ac42cc3a146106b4575f5ffd5b80638da5cb5b1461064657806394bf804d1461065757806395d89b411461066a578063a038035b14610672575f5ffd5b8063402d267d116102ec57806359b94314116102815780637124c683116102515780637124c68314610605578063715018a614610618578063787dce3d146106205780638665120314610633575f5ffd5b806359b94314146105af57806360c080c0146105c25780636e553f65146105ca57806370a08231146105dd575f5ffd5b80634cdad506116102bc5780634cdad506146104135780635250fec714610574578063568efc0714610593578063590f21131461059c575f5ffd5b8063402d267d14610531578063453943f014610545578063469048401461054e5780634690cf1114610561575f5ffd5b80631514617e116103625780632ecaf675116103325780632ecaf675146104e0578063313ce567146104e9578063323884561461050357806338d52e0f1461050b575f5ffd5b80631514617e1461049157806318160ddd1461049a578063206aeab3146104a257806323b872dd146104cd575f5ffd5b8063095ea7b31161039d578063095ea7b3146104265780630a28a477146104495780630da4d8201461045c5780630ffbdcaa1461047e575f5ffd5b806301e1d114146103ce57806305b4591c146103e957806306fdde03146103fe57806307a2d13a14610413575b5f5ffd5b6103d66108bf565b6040519081526020015b60405180910390f35b6103fc6103f73660046141db565b6108da565b005b610406610fd2565b6040516103e0919061427e565b6103d6610421366004614290565b611062565b6104396104343660046142cb565b611073565b60405190151581526020016103e0565b6103d6610457366004614290565b61108a565b61043961046a366004614290565b60156020525f908152604090205460ff1681565b6103fc61048c366004614290565b611096565b6103d660135481565b6002546103d6565b600c546104b5906001600160a01b031681565b6040516001600160a01b0390911681526020016103e0565b6104396104db3660046142f5565b6111d4565b6103d6600b5481565b6104f16111f9565b60405160ff90911681526020016103e0565b6103fc611224565b7f00000000000000000000000000000000000000000000000000000000000000006104b5565b6103d661053f366004614333565b505f1990565b6103d660115481565b600e546104b5906001600160a01b031681565b6103fc61056f366004614290565b611756565b6103d6610582366004614290565b60166020525f908152604090205481565b6103d660075481565b600d546104b5906001600160a01b031681565b6103fc6105bd36600461434e565b6117b5565b6104f1600f81565b6103d66105d8366004614367565b611976565b6103d66105eb366004614333565b6001600160a01b03165f9081526020819052604090205490565b6103fc610613366004614290565b611989565b6103fc611a6b565b6103fc61062e366004614290565b611a7c565b6103fc610641366004614290565b611adb565b6005546001600160a01b03166104b5565b6103d6610665366004614367565b611b65565b610406611b78565b6103fc610680366004614395565b611b87565b6103d660125481565b61043961069c3660046142cb565b611d0e565b600f546104b5906001600160a01b031681565b6103fc6106c2366004614290565b611d1b565b6103d6600a5481565b6103fc6106de3660046141db565b611d9c565b6103d661257e565b6103d66106f9366004614290565b612608565b6103d661070c3660046143cc565b612614565b61072461071f366004614290565b612630565b604080516001600160a01b0396871681529486166020860152928516928401929092529092166060820152608081019190915260a0016103e0565b6103d661076d3660046143cc565b61267f565b6103fc6107803660046146bc565b612693565b6103fc610793366004614333565b6128aa565b6103d660085481565b6103d66107af366004614290565b61292a565b6103fc6107c236600461434e565b612935565b6103d66107d5366004614333565b612c3a565b6103d66107e8366004614290565b60176020525f908152604090205481565b6104b57f000000000000000000000000000000000000000000000000000000000000000081565b6103d661082e366004614333565b612c5c565b6103d660145481565b6103d661084a3660046147b3565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6103d660105481565b6103fc61088b366004614333565b612c79565b6103fc61089e366004614333565b612d03565b6103fc6108b1366004614290565b612d3d565b6103d660095481565b5f6108c8612d9d565b6007546108d591906147f3565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109575760405162461bcd60e51b815260206004820152601c60248201527f63616e206f6e6c792062652063616c6c6564206279204d6f7270686f0000000060448201526064015b60405180910390fd5b5f610964828401846146bc565b80516020810151815192935090915f61097b61257e565b90505f198560400151036109c85760a084206109c16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168230612de2565b6040870152505b6040808601519051638720316d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638720316d91610a1d91889130908190600401614845565b5f604051808303815f87803b158015610a34575f5ffd5b505af1158015610a46573d5f5f3e3d5ffd5b5050600c5460405163095ea7b360e01b81526001600160a01b03808816945063095ea7b39350610a7d9216905f1990600401614879565b6020604051808303815f875af1158015610a99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abd9190614892565b50826001600160a01b0316632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1e9190614892565b15610c7357600c54608086015160e087015160a08801516040516323f8ef1160e11b81526001600160a01b03909416936347f1de2293610b679330939192909190600401614971565b60408051808303815f875af1158015610b82573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba691906149a3565b5050610bcf7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316826001600160a01b031614610c6e57600c54608086015161010087015160c08801516040516323f8ef1160e11b81526001600160a01b03909416936347f1de2293610c2c9330939192909190600401614971565b60408051808303815f875af1158015610c47573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6b91906149a3565b50505b610e01565b610cac6040518060a001604052805f6001600160a01b031681526020015f81526020016060815260200160608152602001606081525090565b600c54606087015160e088015160a0890151604051631652a23360e21b81526001600160a01b039094169363594a88cc93610cf293309391929091908890600401614b7d565b6060604051808303815f875af1158015610d0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d329190614bc1565b505050610d5c7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b0316836001600160a01b031614610dff57600c54606087015161010088015160c0890151604051631652a23360e21b81526001600160a01b039094169363594a88cc93610dbb93309391929091908890600401614b7d565b6060604051808303815f875af1158015610dd7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfb9190614bc1565b5050505b505b600c5460405163095ea7b360e01b81526001600160a01b038581169263095ea7b392610e3592909116905f90600401614879565b6020604051808303815f875af1158015610e51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e759190614892565b505f610e7f61257e565b90505f610e8c83836147f3565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031603610ed457610ed18a826147f3565b90505b5f610ee786868a604001518e865f612e8e565b905080821115610f1657610efb81836147f3565b60075f828254610f0b9190614bec565b90915550610f369050565b610f2082826147f3565b60075f828254610f3091906147f3565b90915550505b60405163095ea7b360e01b81526001600160a01b0386169063095ea7b390610f84907f0000000000000000000000000000000000000000000000000000000000000000908f90600401614879565b6020604051808303815f875af1158015610fa0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc49190614892565b505050505050505050505050565b606060038054610fe190614bff565b80601f016020809104026020016040519081016040528092919081815260200182805461100d90614bff565b80156110585780601f1061102f57610100808354040283529160200191611058565b820191905f5260205f20905b81548152906001019060200180831161103b57829003601f168201915b5050505050905090565b5f61106d825f6132aa565b92915050565b5f336110808185856132e2565b5060019392505050565b5f61106d8260016132f4565b61109e613323565b6102588110156111055760405162461bcd60e51b815260206004820152602c60248201527f76657374696e67206475726174696f6e206d757374206265206174206c65617360448201526b74203130206d696e7574657360a01b606482015260840161094e565b6009548111156111745760405162461bcd60e51b815260206004820152603460248201527f76657374696e674475726174696f6e2063616e2774206265206c6f6e676572206044820152731d1a185b881d5c19185d19481a5b9d195c9d985b60621b606482015260840161094e565b806008544261118391906147f3565b10156111a15760405162461bcd60e51b815260040161094e90614c37565b6013546008546111b190426147f3565b10156111cf5760405162461bcd60e51b815260040161094e90614c37565b601355565b5f336111e1858285613350565b6111ec8585856133b9565b60019150505b9392505050565b5f6108d5817f0000000000000000000000000000000000000000000000000000000000000000614c79565b60095460085461123490426147f3565b10611754575f5f5b601854811015611571575f6018828154811061125a5761125a614c92565b5f91825260208083206040805160a081018252600590940290910180546001600160a01b039081168552600182015481169385019390935260028101548316918401919091526003810154909116606083015260040154608082015291506112c38260a0902090565b90505f6112fa6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168330612de2565b9050805f0361130b57505050611569565b600d5460208401516040516341976e0960e01b81526001600160a01b0391821660048201525f9291909116906341976e0990602401602060405180830381865afa15801561135b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137f9190614ca6565b90505f84602001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e69190614cbd565b6113f190600a614dc0565b6113fb8385614dce565b6114059190614df9565b90505f61143c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168730613416565b600d5487516040516341976e0960e01b81526001600160a01b0391821660048201529293505f929116906341976e0990602401602060405180830381865afa15801561148a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ae9190614ca6565b90505f875f01516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115149190614cbd565b61151f90600a614dc0565b6115298385614dce565b6115339190614df9565b90508084101561154a575050505050505050611569565b61155481856147f3565b61155e908b614bec565b995050505050505050505b60010161123c565b50600d545f906001600160a01b03166341976e097f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156115e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160c9190614ca6565b90505f61161761257e565b90505f81837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611678573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169c9190614cbd565b6116a790600a614dc0565b6116b19087614dce565b6116bb9190614df9565b6116c59190614bec565b9050600754811115611744576007546116de90826147f3565b6012819055600a545f91612710916116f69190614dce565b6117009190614df9565b90505f61170d825f6132f4565b600e54909150611726906001600160a01b031682613468565b8160125f82825461173791906147f3565b9091555061174992505050565b5f6012555b600755505042600855505b565b61175e613323565b6103e88111156117b05760405162461bcd60e51b815260206004820152601960248201527f736c6970706167652063616e20626520757020746f2031302500000000000000604482015260640161094e565b601055565b6117bd6134a0565b6117c5613323565b5f6117df6117d836849003840184614e0c565b60a0902090565b5f8181526015602052604090205490915060ff16156118395760405162461bcd60e51b815260206004820152601660248201527513585c9ad95d08185b1c9958591e48195b98589b195960521b604482015260640161094e565b600b545f8281526017602052604090205461185490426147f3565b10156118a25760405162461bcd60e51b815260206004820152601f60248201527f6d61726b6574206d75737420676f207468726f7567682074696d656c6f636b00604482015260640161094e565b601854600f116118f45760405162461bcd60e51b815260206004820152601760248201527f746f6f206d616e7920616374697665206d61726b657473000000000000000000604482015260640161094e565b5f818152601560209081526040808320805460ff191660019081179091556018805460169094529184208390558201815590915282906005027fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e016119598282614e46565b50505f908152601760205260408120556119736001600655565b50565b5f61197f611224565b6111f283836134d1565b611991613323565b6103848110156119f75760405162461bcd60e51b815260206004820152602b60248201527f75706461746520696e74657276616c206d757374206265206174206c6561737460448201526a203135206d696e7574657360a81b606482015260840161094e565b601354811015611a665760405162461bcd60e51b815260206004820152603460248201527f75706461746520696e74657276616c206d757374206265206c6f6e67657220746044820152733430b7103b32b9ba34b73390323ab930ba34b7b760611b606482015260840161094e565b600955565b611a73613323565b6117545f6134ec565b611a84613323565b611388811115611ad65760405162461bcd60e51b815260206004820152601d60248201527f70726f746f636f6c206665652063616e20626520757020746f20353025000000604482015260640161094e565b600a55565b6005546001600160a01b0316331480611afe5750600f546001600160a01b031633145b611b605760405162461bcd60e51b815260206004820152602d60248201527f6361702063616e206f6e6c79206265206368616e676564206279206f776e657260448201526c1037b91030b63637b1b0ba37b960991b606482015260840161094e565b601455565b5f611b6e611224565b6111f2838361353d565b606060048054610fe190614bff565b611b8f611224565b600f546001600160a01b03163314611be95760405162461bcd60e51b815260206004820152601f60248201527f63616e206f6e6c792062652063616c6c656420627920416c6c6f6361746f7200604482015260640161094e565b611bf16134a0565b5f611c046117d836849003840184614e0c565b5f8181526015602052604090205490915060ff16611c5d5760405162461bcd60e51b81526020600482015260166024820152751b585c9ad95d081b5d5cdd08189948195b98589b195960521b604482015260640161094e565b5f82604051602001611c6f91906150a1565b60408051601f198184030181529082905263238d657960e01b825291506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063238d657990611cd590869060a08201359030908790600401615156565b5f604051808303815f87803b158015611cec575f5ffd5b505af1158015611cfe573d5f5f3e3d5ffd5b5050505050506119736001600655565b5f336110808185856133b9565b611d236134a0565b611d2b613323565b5f8181526015602052604090205460ff1615611d825760405162461bcd60e51b815260206004820152601660248201527513585c9ad95d08185b1c9958591e48195b98589b195960521b604482015260640161094e565b5f8181526017602052604090204290556119736001600655565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611e145760405162461bcd60e51b815260206004820152601c60248201527f63616e206f6e6c792062652063616c6c6564206279204d6f7270686f00000000604482015260640161094e565b5f611e218284018461518b565b90505f611e2c61257e565b825160408085015190516350d8cd4b60e01b81529293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926350d8cd4b92611e889290915f903090819060040161526b565b60408051808303815f875af1158015611ea3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec791906149a3565b5050815160208101519051600c5460405163095ea7b360e01b81525f916001600160a01b038085169263095ea7b392611f079216905f1990600401614879565b6020604051808303815f875af1158015611f23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f479190614892565b50600c54608086015160a08701516040516317038ee360e11b81525f936001600160a01b031692632e071dc692611f85923092918791600401614971565b6020604051808303815f875af1158015611fa1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc59190614ca6565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146121b4577f0000000000000000000000000000000000000000000000000000000000000000600c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612055929116905f1990600401614879565b6020604051808303815f875af1158015612071573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120959190614892565b50600c54608087015160c08801516040516317038ee360e11b81526001600160a01b0390931692632e071dc6926120d39230925f9190600401614971565b6020604051808303815f875af11580156120ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121139190614ca6565b61211d9082614bec565b600c5460405163095ea7b360e01b81529192506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b3926121729216905f90600401614879565b6020604051808303815f875af115801561218e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b29190614892565b505b6121e16040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b61221a6040518060a001604052805f6001600160a01b031681526020015f81526020016060815260200160608152602001606081525090565b6080880151600c5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612252929116908790600401614879565b6020604051808303815f875af115801561226e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122929190614892565b50600c546060890151604051630a94245f60e21b81526001600160a01b0390921691632a50917c916122d19130919088905f90899089906004016152a7565b60408051808303815f875af11580156122ec573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061231091906149a3565b50600c5460405163095ea7b360e01b81529195506001600160a01b038088169263095ea7b3926123469216905f90600401614879565b6020604051808303815f875af1158015612362573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123869190614892565b508a8410156123cf5760405162461bcd60e51b81526020600482015260156024820152740c6ded8d8c2e8cae4c2d840dcdee840cadcdeeaced605b1b604482015260640161094e565b60405163095ea7b360e01b81526001600160a01b0387169063095ea7b39061241d907f0000000000000000000000000000000000000000000000000000000000000000908890600401614879565b6020604051808303815f875af1158015612439573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245d9190614892565b508a8411156124f3575f6124718c866147f3565b895160405163238d657960e01b81529192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163238d6579916124c49185903090600401615314565b5f604051808303815f87803b1580156124db575f5ffd5b505af11580156124ed573d5f5f3e3d5ffd5b50505050505b5f6124fc61257e565b90505f612509828a6147f3565b90505f61251f8989898e60400151866001612e8e565b90508181111561254e5761253382826147f3565b60075f8282546125439190614bec565b9091555061256e9050565b61255881836147f3565b60075f82825461256891906147f3565b90915550505b5050505050505050505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156125e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d59190614ca6565b5f61106d8260016132aa565b5f61261d611224565b612628848484613558565b949350505050565b6018818154811061263f575f80fd5b5f918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b0393841695509183169390831692169085565b5f612688611224565b6126288484846135ae565b61269b611224565b600f546001600160a01b031633146126f55760405162461bcd60e51b815260206004820152601f60248201527f63616e206f6e6c792062652063616c6c656420627920416c6c6f6361746f7200604482015260640161094e565b6126fd6134a0565b5f8160405160200161270f919061534c565b60405160208183030381529060405290505f1982602001510361280657815160a090205f6127676001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683306135fb565b84516040516320b76e8160e01b81529192506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916320b76e81916127be915f90869030908a90600401615401565b60408051808303815f875af11580156127d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127fd91906149a3565b5050505061289f565b815160208301516040516320b76e8160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926320b76e819261285d925f9030908890600401615401565b60408051808303815f875af1158015612878573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289c91906149a3565b50505b506119736001600655565b6128b2613323565b6001600160a01b0381166129085760405162461bcd60e51b815260206004820152601d60248201527f616c6c6f6361746f722063616e27742062652061646472657373283029000000604482015260640161094e565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f61106d825f6132f4565b61293d6134a0565b612945613323565b5f6129586117d836849003840184614e0c565b5f8181526015602052604090205490915060ff166129ad5760405162461bcd60e51b81526020600482015260126024820152711b585c9ad95d081b9bdd08195b98589b195960721b604482015260640161094e565b5f6129e26001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168330612de2565b90508015612a485760405162461bcd60e51b815260206004820152602d60248201527f6163636f756e7420686173206e6f6e2d7a65726f20636f6c6c61746572616c2060448201526c1a5b881d1a19481b585c9ad95d609a1b606482015260840161094e565b6018545f90612a59906001906147f3565b5f84815260166020526040902054909150808214612baf5760188281548110612a8457612a84614c92565b905f5260205f20906005020160188281548110612aa357612aa3614c92565b5f91825260208220835460059092020180546001600160a01b03199081166001600160a01b039384161782556001808601549083018054831691851691909117905560028086015490830180548316918516919091179055600380860154908301805490921693169290921790915560049283015492019190915560188054612b9d919085908110612b3757612b37614c92565b5f9182526020918290206040805160a081018252600590930290910180546001600160a01b0390811684526001820154811694840194909452600281015484169183019190915260038101549092166060820152600490910154608082015260a0902090565b5f908152601660205260409020829055505b6018805480612bc057612bc0615448565b5f828152602080822060055f199094019384020180546001600160a01b031990811682556001820180548216905560028201805482169055600382018054909116905560040182905591909255948152601685526040808220829055601590955293909320805460ff191690555061197391506134ca9050565b6001600160a01b0381165f9081526020819052604081205461106d905f6132aa565b6001600160a01b0381165f9081526020819052604081205461106d565b612c81613323565b6001600160a01b038116612ce15760405162461bcd60e51b815260206004820152602160248201527f66656520726563697069656e742063616e2774206265206164647265737328306044820152602960f81b606482015260840161094e565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b612d0b613323565b6001600160a01b038116612d3457604051631e4fbdf760e01b81525f600482015260240161094e565b611973816134ec565b612d45613323565b62015180811015612d985760405162461bcd60e51b815260206004820152601f60248201527f74696d656c6f636b206d757374206265206174206c6561737420312064617900604482015260640161094e565b600b55565b5f60135460085442612daf91906147f3565b10612db957505f90565b5f60135460125460085442612dce91906147f3565b612dd89190614dce565b61106d9190614df9565b5f5f612df6612df185856136a8565b613712565b90506080856001600160a01b0316637784c685836040518263ffffffff1660e01b8152600401612e26919061545c565b5f60405180830381865afa158015612e40573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612e67919081019061549e565b5f81518110612e7857612e78614c92565b6020026020010151901c5f1c9150509392505050565b600d546040516341976e0960e01b81526001600160a01b0388811660048301525f9283929116906341976e0990602401602060405180830381865afa158015612ed9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612efd9190614ca6565b90505f886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f3c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f609190614cbd565b612f6b90600a614dc0565b612f758389614dce565b612f7f9190614df9565b600d546040516341976e0960e01b81526001600160a01b038b811660048301529293505f92909116906341976e0990602401602060405180830381865afa158015612fcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ff09190614ca6565b90505f896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561302f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130539190614cbd565b61305e90600a614dc0565b613068838a614dce565b6130729190614df9565b600d549091505f906001600160a01b03166341976e097f00000000000000000000000000000000000000000000000000000000000000006040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156130eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061310f9190614ca6565b90505f817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561316f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131939190614cbd565b61319e90600a614dc0565b6131a885886147f3565b6131b29190614dce565b6131bc9190614df9565b90508715613230576011546010546131d490826147f3565b6131de908b614dce565b6131e89190614df9565b81101561322b5760405162461bcd60e51b81526020600482015260116024820152700e6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604482015260640161094e565b61329a565b8860115460105460115461324491906147f3565b61324e9084614dce565b6132589190614df9565b111561329a5760405162461bcd60e51b81526020600482015260116024820152700e6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b604482015260640161094e565b9c9b505050505050505050505050565b5f6111f26132b66108bf565b6132c1906001614bec565b6132cc5f600a614dc0565b6002546132d99190614bec565b8591908561375b565b6132ef838383600161379d565b505050565b5f6111f261330382600a614dc0565b6002546133109190614bec565b6133186108bf565b6132d9906001614bec565b6005546001600160a01b031633146117545760405163118cdaa760e01b815233600482015260240161094e565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198110156133b357818110156133a557828183604051637dc7a0d960e11b815260040161094e93929190615539565b6133b384848484035f61379d565b50505050565b6001600160a01b0383166133e257604051634b637e8f60e11b81525f600482015260240161094e565b6001600160a01b03821661340b5760405163ec442f0560e01b81525f600482015260240161094e565b6132ef83838361386f565b5f5f6134238460a0902090565b90505f61343a6001600160a01b03871683866135fb565b90505f5f6134488888613982565b909450925061345c91508490508383613bfd565b98975050505050505050565b6001600160a01b0382166134915760405163ec442f0560e01b81525f600482015260240161094e565b61349c5f838361386f565b5050565b6002600654036134c357604051633ee5aeb560e01b815260040160405180910390fd5b6002600655565b6001600655565b5f5f195f6134de8561292a565b905061262833858784613c21565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5f195f61354a85612608565b905061262833858388613c21565b5f5f61356383612c3a565b90508085111561358c57828582604051633fa733bb60e21b815260040161094e93929190615539565b5f6135968661108a565b90506135a53386868985613ca0565b95945050505050565b5f5f6135b983612c5c565b9050808511156135e257828582604051632e52afbb60e21b815260040161094e93929190615539565b5f6135ec86611062565b90506135a5338686848a613ca0565b5f5f61360a612df185856136a8565b604051637784c68560e01b81529091506001600160a01b03861690637784c6859061363990849060040161545c565b5f60405180830381865afa158015613653573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261367a919081019061549e565b5f8151811061368b5761368b614c92565b60200260200101515f1c6001600160801b03169150509392505050565b5f6001828460026040516020016136c9929190918252602082015260400190565b604051602081830303815290604052805190602001206040516020016136f0929190614879565b604051602081830303815290604052805190602001205f1c6111f29190614bec565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061374a5761374a614c92565b602090810291909101015292915050565b5f61378861376883613d44565b801561378357505f848061377e5761377e614de5565b868809115b151590565b613793868686613d70565b6135a59190614bec565b6001600160a01b0384166137c65760405163e602df0560e01b81525f600482015260240161094e565b6001600160a01b0383166137ef57604051634a1406b160e11b81525f600482015260240161094e565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156133b357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161386191815260200190565b60405180910390a350505050565b6001600160a01b038316613899578060025f82825461388e9190614bec565b909155506138f69050565b6001600160a01b0383165f90815260208190526040902054818110156138d85783818360405163391434e360e21b815260040161094e93929190615539565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661391257600280548290039055613930565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161397591815260200190565b60405180910390a3505050565b5f5f5f5f5f6139928660a0902090565b604051632e3071cd60e11b8152600481018290529091505f906001600160a01b03891690635c60e39a9060240160c060405180830381865afa1580156139da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139fe9190615570565b90505f81608001516001600160801b031642613a1a91906147f3565b90508015801590613a37575060408201516001600160801b031615155b8015613a4f575060608801516001600160a01b031615155b15613bc9576060880151604051638c00bf6b60e01b81525f916001600160a01b031690638c00bf6b90613a88908c90879060040161560e565b602060405180830381865afa158015613aa3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ac79190614ca6565b90505f613aeb613ad78385613e26565b60408601516001600160801b031690613e8e565b9050613af681613ea2565b84604001818151613b079190615696565b6001600160801b0316905250613b1c81613ea2565b84518590613b2b908390615696565b6001600160801b0390811690915260a086015116159050613bc6575f613b678560a001516001600160801b031683613e8e90919063ffffffff16565b90505f613b9b82875f01516001600160801b0316613b8591906147f3565b60208801518491906001600160801b0316613efe565b9050613ba681613ea2565b86602001818151613bb79190615696565b6001600160801b031690525050505b50505b508051602082015160408301516060909301516001600160801b039283169b9183169a509282169850911695509350505050565b5f612628613c0c600185614bec565b613c19620f424085614bec565b869190613f22565b613c296134a0565b8160075f828254613c3a9190614bec565b90915550506014546007541115613c8a5760405162461bcd60e51b815260206004820152601460248201527319195c1bdcda5d0818d85c08195e18d95959195960621b604482015260640161094e565b613c9684848484613f4d565b6133b36001600655565b613ca86134a0565b5f613cb161257e565b905082811015613d0e5760405162461bcd60e51b815260206004820152602260248201527f6e6f7420656e6f7567682062616c616e636520696e2074686520636f6e74726160448201526118dd60f21b606482015260840161094e565b8260075f828254613d1f91906147f3565b90915550613d3290508686868686613fd1565b50613d3d6001600655565b5050505050565b5f6002826003811115613d5957613d596148ad565b613d6391906156b5565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f03613da457838281613d9a57613d9a614de5565b04925050506111f2565b808411613dbb57613dbb6003851502601118614091565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f80613e328385614dce565b90505f613e528280613e4d670de0b6b3a76400006002614dce565b6140a2565b90505f613e6d8284613e4d670de0b6b3a76400006003614dce565b905080613e7a8385614bec565b613e849190614bec565b9695505050505050565b5f6111f28383670de0b6b3a76400006140a2565b6040805180820190915260148152731b585e081d5a5b9d0c4c8e08195e18d95959195960621b60208201525f906001600160801b03831115613ef75760405162461bcd60e51b815260040161094e919061427e565b5090919050565b5f612628613f0f620f424084614bec565b613f1a600186614bec565b8691906140a2565b5f81613f2f6001826147f3565b613f398587614dce565b613f439190614bec565b6126289190614df9565b613f797f00000000000000000000000000000000000000000000000000000000000000008530856140ae565b613f838382613468565b826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051613861929190918252602082015260400190565b826001600160a01b0316856001600160a01b031614613ff557613ff5838683613350565b613fff8382614115565b61402a7f00000000000000000000000000000000000000000000000000000000000000008584614149565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051614082929190918252602082015260400190565b60405180910390a45050505050565b634e487b715f52806020526024601cfd5b5f81613f438486614dce565b6040516001600160a01b0384811660248301528381166044830152606482018390526133b39186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061416f565b6001600160a01b03821661413e57604051634b637e8f60e11b81525f600482015260240161094e565b61349c825f8361386f565b6132ef83846001600160a01b031663a9059cbb85856040516024016140e3929190614879565b5f5f60205f8451602086015f885af18061418e576040513d5f823e3d81fd5b50505f513d915081156141a55780600114156141b2565b6001600160a01b0384163b155b156133b357604051635274afe760e01b81526001600160a01b038516600482015260240161094e565b5f5f5f604084860312156141ed575f5ffd5b8335925060208401356001600160401b03811115614209575f5ffd5b8401601f81018613614219575f5ffd5b80356001600160401b0381111561422e575f5ffd5b86602082840101111561423f575f5ffd5b939660209190910195509293505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111f26020830184614250565b5f602082840312156142a0575f5ffd5b5035919050565b6001600160a01b0381168114611973575f5ffd5b80356142c6816142a7565b919050565b5f5f604083850312156142dc575f5ffd5b82356142e7816142a7565b946020939093013593505050565b5f5f5f60608486031215614307575f5ffd5b8335614312816142a7565b92506020840135614322816142a7565b929592945050506040919091013590565b5f60208284031215614343575f5ffd5b81356111f2816142a7565b5f60a082840312801561435f575f5ffd5b509092915050565b5f5f60408385031215614378575f5ffd5b82359150602083013561438a816142a7565b809150509250929050565b5f602082840312156143a5575f5ffd5b81356001600160401b038111156143ba575f5ffd5b820161016081850312156111f2575f5ffd5b5f5f5f606084860312156143de575f5ffd5b8335925060208401356143f0816142a7565b91506040840135614400816142a7565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156144415761444161440b565b60405290565b604051608081016001600160401b03811182821017156144415761444161440b565b60405161012081016001600160401b03811182821017156144415761444161440b565b60405160e081016001600160401b03811182821017156144415761444161440b565b604051601f8201601f191681016001600160401b03811182821017156144d6576144d661440b565b604052919050565b5f60a082840312156144ee575f5ffd5b6144f661441f565b90508135614503816142a7565b81526020820135614513816142a7565b60208201526040820135614526816142a7565b60408201526060820135614539816142a7565b606082015260809182013591810191909152919050565b8035600b81106142c6575f5ffd5b8015158114611973575f5ffd5b80356142c68161455e565b5f60a08284031215614586575f5ffd5b61458e61441f565b9050813561459b816142a7565b81526020828101359082015260408201356145b5816142a7565b604082015260608201356145c8816142a7565b606082015260808201356001600160401b038111156145e5575f5ffd5b8201608081850312156145f6575f5ffd5b6145fe614447565b61460782614550565b81526020820135614617816142a7565b602082015260408201356001600160401b03811115614634575f5ffd5b8201601f81018613614644575f5ffd5b80356001600160401b0381111561465d5761465d61440b565b614670601f8201601f19166020016144ae565b818152876020838501011115614684575f5ffd5b816020840160208301375f602083830101528060408501525050506146ab6060830161456b565b606082015260808301525092915050565b5f602082840312156146cc575f5ffd5b81356001600160401b038111156146e1575f5ffd5b82016101a081850312156146f3575f5ffd5b6146fb614469565b61470585836144de565b815260a0820135602082015260c0820135604082015261472760e083016142bb565b606082015261473961010083016142bb565b60808201526101208201356001600160401b03811115614757575f5ffd5b61476386828501614576565b60a0830152506101408201356001600160401b03811115614782575f5ffd5b61478e86828501614576565b60c08301525061016082013560e0820152610180909101356101008201529392505050565b5f5f604083850312156147c4575f5ffd5b82356147cf816142a7565b9150602083013561438a816142a7565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561106d5761106d6147df565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b61010081016148548287614806565b60a08201949094526001600160a01b0392831660c0820152911660e090910152919050565b6001600160a01b03929092168252602082015260400190565b5f602082840312156148a2575f5ffd5b81516111f28161455e565b634e487b7160e01b5f52602160045260245ffd5b600b81106148d1576148d16148ad565b9052565b60018060a01b0381511682526020810151602083015260018060a01b03604082015116604083015260018060a01b0360608201511660608301525f608082015160a0608085015261492a60a0850182516148c1565b60208101516001600160a01b031660c08501526040810151608060e0860152614957610120860182614250565b905060608201511515610100860152809250505092915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90613e84908301846148d5565b5f5f604083850312156149b4575f5ffd5b505080516020909101519092909150565b600481106148d1576148d16148ad565b5f82825180855260208501945060208160051b830101602085015f5b83811015614b0e57848303601f1901885281518051606080865281518187015260208201516080870152604082015160a0870152810151614a3560c08701826149c5565b5060808101516001600160a01b03811660e08701525060a08101516001600160a01b0381166101008701525060c08101516001600160a01b0381166101208701525060e08101516001600160a01b038116610140870152506101008101516101608601526101208101516101808601526101408101516101a086015261016081015190506101806101c0860152614ad06101e0860182614250565b905060208201518582036020870152614ae98282614250565b60409384015196909301959095525060209889019890935091909101906001016149f1565b50909695505050505050565b60018060a01b038151168252602081015160208301525f604082015160a06040850152614b4a60a08501826149d5565b905060608301518482036060860152614b6382826149d5565b915050608083015184820360808601526135a58282614250565b6001600160a01b038681168252851660208201526040810184905260a0606082018190525f90614baf908301856148d5565b828103608084015261345c8185614b1a565b5f5f5f60608486031215614bd3575f5ffd5b5050815160208301516040909301519094929350919050565b8082018082111561106d5761106d6147df565b600181811c90821680614c1357607f821691505b602082108103614c3157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526022908201527f74686572652073686f756c64206265206e6f206f6e676f696e672076657374696040820152616e6760f01b606082015260800190565b60ff818116838216019081111561106d5761106d6147df565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614cb6575f5ffd5b5051919050565b5f60208284031215614ccd575f5ffd5b815160ff811681146111f2575f5ffd5b6001815b6001841115614d1857808504811115614cfc57614cfc6147df565b6001841615614d0a57908102905b60019390931c928002614ce1565b935093915050565b5f82614d2e5750600161106d565b81614d3a57505f61106d565b8160018114614d505760028114614d5a57614d76565b600191505061106d565b60ff841115614d6b57614d6b6147df565b50506001821b61106d565b5060208310610133831016604e8410600b8410161715614d99575081810a61106d565b614da55f198484614cdd565b805f1904821115614db857614db86147df565b029392505050565b5f6111f260ff841683614d20565b808202811582820484141761106d5761106d6147df565b634e487b7160e01b5f52601260045260245ffd5b5f82614e0757614e07614de5565b500490565b5f60a08284031215614e1c575f5ffd5b6111f283836144de565b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135614e51816142a7565b614e5b8183614e26565b506020820135614e6a816142a7565b614e778160018401614e26565b506040820135614e86816142a7565b614e938160028401614e26565b506060820135614ea2816142a7565b614eaf8160038401614e26565b50608082013560048201555050565b8035614ec9816142a7565b6001600160a01b031682526020810135614ee2816142a7565b6001600160a01b031660208301526040810135614efe816142a7565b6001600160a01b031660408301526060810135614f1a816142a7565b6001600160a01b03166060830152608090810135910152565b5f8235609e19833603018112614f47575f5ffd5b90910192915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b614f8a82614f8583614550565b6148c1565b5f6020820135614f99816142a7565b6001600160a01b03166020840152604082013536839003601e19018112614fbe575f5ffd5b82016020810190356001600160401b03811115614fd9575f5ffd5b803603821315614fe7575f5ffd5b60806040860152614ffc608086018284614f50565b91505061500b6060840161456b565b8015156060860152509392505050565b5f8135615027816142a7565b6001600160a01b0316835260208281013590840152604082013561504a816142a7565b6001600160a01b031660408401526060820135615066816142a7565b6001600160a01b03166060840152608082013536839003607e1901811261508b575f5ffd5b60a0608085015261262860a08501848301614f78565b602081526150b26020820183614ebe565b60a082013560c08281019190915282013560e0808301919091525f908301356150da816142a7565b6001600160a01b0316610100838101919091528301356150f9816142a7565b6001600160a01b03166101208381019190915261511890840184614f33565b61016061014084015261512f61018084018261501b565b905061513f610140850185614f33565b838203601f19016101608501526135a5828261501b565b6151608186614ebe565b8360a082015260018060a01b03831660c082015261010060e08201525f613e84610100830184614250565b5f6020828403121561519b575f5ffd5b81356001600160401b038111156151b0575f5ffd5b820161016081850312156151c2575f5ffd5b6151ca61448c565b6151d485836144de565b815260a0820135602082015260c082013560408201526151f660e083016142bb565b606082015261520861010083016142bb565b60808201526101208201356001600160401b03811115615226575f5ffd5b61523286828501614576565b60a0830152506101408201356001600160401b03811115615251575f5ffd5b61525d86828501614576565b60c083015250949350505050565b610120810161527a8288614806565b60a082019590955260c08101939093526001600160a01b0391821660e08401521661010090910152919050565b60018060a01b038716815260018060a01b038616602082015284604082015283606082015282516080820152602083015160a0820152604083015160c0820152606083015160e082015260808301516101008201526101406101208201525f61345c610140830184614b1a565b61531e8185614806565b60a08101929092526001600160a01b031660c082015261010060e082018190525f9082015261012001919050565b6020815261535e602082018351614806565b602082015160c0820152604082015160e08201525f606083015161538e6101008401826001600160a01b03169052565b5060808301516001600160a01b031661012083015260a08301516101a06101408401526153bf6101c08401826148d5565b905060c0840151601f19848303016101608501526153dd82826148d5565b91505060e08401516101808401526101008401516101a08401528091505092915050565b61540b8187614806565b8460a08201528360c082015260018060a01b03831660e08201526101206101008201525f61543d610120830184614250565b979650505050505050565b634e487b7160e01b5f52603160045260245ffd5b602080825282518282018190525f918401906040840190835b81811015615493578351835260209384019390920191600101615475565b509095945050505050565b5f602082840312156154ae575f5ffd5b81516001600160401b038111156154c3575f5ffd5b8201601f810184136154d3575f5ffd5b80516001600160401b038111156154ec576154ec61440b565b8060051b6154fc602082016144ae565b91825260208184018101929081019087841115615517575f5ffd5b6020850194505b8385101561543d57845182526020948501949091019061551e565b6001600160a01b039390931683526020830191909152604082015260600190565b80516001600160801b03811681146142c6575f5ffd5b5f60c0828403128015615581575f5ffd5b5060405160c081016001600160401b03811182821017156155a4576155a461440b565b6040526155b08361555a565b81526155be6020840161555a565b60208201526155cf6040840161555a565b60408201526155e06060840161555a565b60608201526155f16080840161555a565b608082015261560260a0840161555a565b60a08201529392505050565b610160810161561d8285614806565b6001600160801b0383511660a08301526001600160801b0360208401511660c08301526001600160801b0360408401511660e08301526001600160801b036060840151166101008301526001600160801b036080840151166101208301526001600160801b0360a0840151166101408301529392505050565b6001600160801b03818116838216019081111561106d5761106d6147df565b5f60ff8316806156c7576156c7614de5565b8060ff8416069150509291505056fea26469706673582212207f8a246dcc37ecec67b07b65d19e2dd70cbe13330f3799156fd668d76b00d73d64736f6c634300081b0033000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda02913000000000000000000000000888888888889758f76e7103c6cbf23abbf58f946000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb000000000000000000000000d0a310a2edc7b13ac197b3caea65de85ccf891a4000000000000000000000000d0a310a2edc7b13ac197b3caea65de85ccf891a4000000000000000000000000cfe96f88c0501e01a2c84f741a76729b0078bd73