0 txs
0 calls
constructor
constructor(address _beanstalk, address _beanstalkPrice, address _owner, address _priceManipulation)
functions
add
purefunction add(uint256 a, uint256 b) pure returns (uint256)
bytes32Switch
purefunction bytes32Switch(uint256 selector, bytes32[] options) pure returns (bytes32)
check
purefunction check(bool condition) pure
combineWithdrawalPlans
viewfunction combineWithdrawalPlans(tuple[] plans) view returns (tuple)
div
purefunction div(uint256 a, uint256 b) pure returns (uint256)
eq
purefunction eq(uint256 a, uint256 b) pure returns (bool)
functionPaused
viewfunction functionPaused(bytes4) view returns (bool)
getAddressAndStem
purefunction getAddressAndStem(uint256 depositId) pure returns (address token, int96 stem)
getBeanAmountAvailable
viewfunction getBeanAmountAvailable(address account, address token) view returns (uint256 beanAmountAvailable)
getBeanstalkPrice
viewfunction getBeanstalkPrice() view returns (address)
getDepositStemsAndAmountsToWithdraw
viewfunction getDepositStemsAndAmountsToWithdraw(address account, address token, uint256 amount, int96 minStem, tuple excludingPlan) view returns (int96[] stems, uint256[] amounts, uint256 availableAmount)
getDepositStemsAndAmountsToWithdraw
viewfunction getDepositStemsAndAmountsToWithdraw(address account, address token, uint256 amount, int96 minStem) view returns (int96[] stems, uint256[] amounts, uint256 availableAmount)
getHighestSeedToken
viewfunction getHighestSeedToken() view returns (address highestSeedToken, uint256 seedAmount)
getLowestSeedToken
viewfunction getLowestSeedToken() view returns (address lowestSeedToken, uint256 seedAmount)
getLPTokensToWithdrawForBeans
viewfunction getLPTokensToWithdrawForBeans(uint256 beanAmount, address well) view returns (uint256 lpAmount)
getSortedDeposits
viewfunction getSortedDeposits(address account, address token) view returns (int96[] stems, uint256[] amounts)
getSortedWhitelistedTokensBySeeds
viewfunction getSortedWhitelistedTokensBySeeds() view returns (address[] tokens, uint256[] seeds)
getTokenIndex
viewfunction getTokenIndex(address token) view returns (uint8 index)
getTokensAscendingPrice
viewfunction getTokensAscendingPrice() view returns (uint8[] tokenIndices, uint256[] prices)
getTokensAscendingSeeds
viewfunction getTokensAscendingSeeds() view returns (uint8[] tokenIndices, uint256[] seeds)
getUserDepositedTokens
viewfunction getUserDepositedTokens(address account) view returns (address[] depositedTokens)
getWhitelistStatusAddresses
viewfunction getWhitelistStatusAddresses() view returns (address[])
getWithdrawalPlan
viewfunction getWithdrawalPlan(address account, uint8[] tokenIndices, uint256 targetAmount, uint256 maxGrownStalkPerBdv) view returns (tuple plan)
getWithdrawalPlanExcludingPlan
viewfunction getWithdrawalPlanExcludingPlan(address account, uint8[] tokenIndices, uint256 targetAmount, uint256 maxGrownStalkPerBdv, tuple excludingPlan) view returns (tuple plan)
gt
purefunction gt(uint256 a, uint256 b) pure returns (bool)
gte
purefunction gte(uint256 a, uint256 b) pure returns (bool)
isOperatorWhitelisted
viewfunction isOperatorWhitelisted(address[] whitelistedOperators) view returns (bool)
lt
purefunction lt(uint256 a, uint256 b) pure returns (bool)
lte
purefunction lte(uint256 a, uint256 b) pure returns (bool)
mod
purefunction mod(uint256 a, uint256 b) pure returns (uint256)
mul
purefunction mul(uint256 a, uint256 b) pure returns (uint256)
mulDiv
purefunction mulDiv(uint256 a, uint256 b, uint256 c) pure returns (uint256)
neq
purefunction neq(uint256 a, uint256 b) pure returns (bool)
owner
viewfunction owner() view returns (address)
sub
purefunction sub(uint256 a, uint256 b) pure returns (uint256)
pauseFunction
nonpayablefunction pauseFunction(bytes4 functionSelector)
renounceOwnership
nonpayablefunction renounceOwnership()
tip
nonpayablefunction tip(address token, address publisher, address tipAddress, int256 tipAmount, uint8 from, uint8 to)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpauseFunction
nonpayablefunction unpauseFunction(bytes4 functionSelector)
withdrawBeansFromSources
payablefunction withdrawBeansFromSources(address account, uint8[] tokenIndices, uint256 targetAmount, uint256 maxGrownStalkPerBdv, uint256 slippageRatio, uint8 mode, tuple plan) payable returns (uint256)
events
FunctionPaused
event FunctionPaused(bytes4 indexed functionSelector, bool isPaused)
OperatorReward
event OperatorReward(uint8 rewardType, address indexed publisher, address indexed operator, address token, int256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
creation bytecode
0x60e060405234801561000f575f80fd5b506040516161cb3803806161cb83398101604081905261002e916100f0565b81806001600160a01b03811661005d57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61006681610086565b50506001600160a01b0393841660805291831660a052501660c052610141565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146100eb575f80fd5b919050565b5f805f8060808587031215610103575f80fd5b61010c856100d5565b935061011a602086016100d5565b9250610128604086016100d5565b9150610136606086016100d5565b905092959194509250565b60805160a05160c051615f8061024b5f395f61366201525f818161040b01526132e201525f818161088401528181610a2f01528181610c5f01528181610d1f01528181610e2601528181610ea701528181610fb70152818161102301528181611293015281816115d901528181611cb901528181611e35015281816121430152818161232a0152818161246601528181612518015281816125d801528181612708015281816127bf015281816128ea01528181612a4801528181612cf901528181612eb201528181613150015281816134f6015281816135d4015281816137440152818161382d0152818161395d01528181613b2901528181613bc60152613eba0152615f805ff3fe60806040526004361061023e575f3560e01c80638da5cb5b11610134578063c0800cd9116100b3578063d2fb347a11610078578063d2fb347a14610724578063ea6515c414610743578063ea6dcee914610762578063f2fde38b14610776578063f43f523a14610795578063fda5dbe4146107b4575f80fd5b8063c0800cd914610686578063c11f283e146106a5578063c8a4ac9c146106d2578063c96d29d1146106f1578063ca8df61714610705575f80fd5b8063adb8c58d116100f9578063adb8c58d146105f3578063b477332914610615578063b67d77c514610634578063b8677cbf14610653578063beca715814610672575f80fd5b80638da5cb5b1461054c57806399d85091146105685780639fc7dd1714610587578063a391c15b146105b5578063aa9a0912146105d4575f80fd5b80634c81b45a116101c0578063715018a611610185578063715018a614610488578063730f039b1461049c578063771602f7146104ca5780637c6ed9ef146104e9578063805a343f14610508575f80fd5b80634c81b45a146103b25780634f5feed9146103d157806356c3f3bd146103fd57806366c0bd24146104385780636eade20014610469575f80fd5b80632dd1e5f8116102065780632dd1e5f8146102fa57806332148d73146103195780633e6111a81461033757806343df0425146103635780634831ef9f14610390575f80fd5b806305b57d89146102425780630ee868f014610263578063118fc88c1461028e57806321e5749b146102bd578063241c5912146102db575b5f80fd5b34801561024d575f80fd5b5061026161025c36600461405b565b6107c7565b005b34801561026e575f80fd5b50610277610825565b6040516102859291906140e8565b60405180910390f35b348015610299575f80fd5b506102ad6102a8366004614115565b61096c565b6040519015158152602001610285565b3480156102c8575f80fd5b506102ad6102d7366004614115565b1090565b3480156102e6575f80fd5b506102616102f5366004614142565b610976565b348015610305575f80fd5b5061026161031436600461405b565b6109c4565b348015610324575f80fd5b506102ad610333366004614115565b1490565b348015610342575f80fd5b50610356610351366004614171565b610a1f565b604051610285919061418c565b34801561036e575f80fd5b5061038261037d3660046141de565b610bf1565b604051908152602001610285565b34801561039b575f80fd5b506103a4610c14565b604051610285929190614225565b3480156103bd575f80fd5b506102616103cc366004614251565b610e07565b3480156103dc575f80fd5b506103f06103eb3660046146d5565b610f7e565b6040516102859190614846565b348015610408575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516102859190614904565b348015610443575f80fd5b50610457610452366004614171565b611020565b60405160ff9091168152602001610285565b348015610474575f80fd5b506103f061048336600461498b565b611152565b348015610493575f80fd5b50610261611c76565b3480156104a7575f80fd5b506104bb6104b6366004614a0e565b611c89565b60405161028593929190614a7a565b3480156104d5575f80fd5b506103826104e4366004614115565b6120d8565b3480156104f4575f80fd5b506102ad610503366004614115565b141590565b348015610513575f80fd5b5061052a610522366004614aaf565b606081901c91565b604080516001600160a01b039093168352600b9190910b602083015201610285565b348015610557575f80fd5b505f546001600160a01b031661042b565b348015610573575f80fd5b506104bb610582366004614ac6565b6120ea565b348015610592575f80fd5b506102ad6105a136600461405b565b60016020525f908152604090205460ff1681565b3480156105c0575f80fd5b506103826105cf366004614115565b612114565b3480156105df575f80fd5b506103826105ee366004614b16565b61211f565b3480156105fe575f80fd5b5061060761213d565b604051610285929190614b3f565b348015610620575f80fd5b506102ad61062f366004614115565b111590565b34801561063f575f80fd5b5061038261064e366004614115565b612426565b34801561065e575f80fd5b506102ad61066d366004614b8f565b612431565b34801561067d575f80fd5b506103a46124cd565b348015610691575f80fd5b506103826106a0366004614bc1565b6126ba565b3480156106b0575f80fd5b506106c46106bf366004614bc1565b6128bc565b604051610285929190614bf8565b3480156106dd575f80fd5b506103826106ec366004614115565b612ce9565b3480156106fc575f80fd5b50610356612cf4565b348015610710575f80fd5b506103f061071f366004614c0a565b612e22565b34801561072f575f80fd5b5061038261073e366004614c65565b612e49565b34801561074e575f80fd5b506102ad61075d366004614115565b101590565b34801561076d575f80fd5b5061060761314a565b348015610781575f80fd5b50610261610790366004614171565b613437565b3480156107a0575f80fd5b506103826107af366004614115565b613471565b6103826107c2366004614c88565b61347c565b6107cf613d35565b6001600160e01b031981165f818152600160209081526040808320805460ff19169055519182527f8d55861a3463260ef86139a9feef380a290f3f1b3367862f20f8a761fd19893591015b60405180910390a250565b606080610830612cf4565b915081516001600160401b0381111561084b5761084b6142c5565b604051908082528060200260200182016040528015610874578160200160208202803683370190505b5090505f5b8251811015610958577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e923e8d48483815181106108c3576108c3614d24565b60200260200101516040518263ffffffff1660e01b81526004016108e79190614904565b5f60405180830381865afa158015610901573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109289190810190614ebe565b6020015164ffffffffff1682828151811061094557610945614d24565b6020908102919091010152600101610879565b506109638282613d61565b90939092509050565b8082105b92915050565b806109c15760405162461bcd60e51b8152602060048201526016602482015275129d5b98dd1a5bdb8e8818da1958dac819985a5b195960521b60448201526064015b60405180910390fd5b50565b6109cc613d35565b6001600160e01b031981165f81815260016020818152604092839020805460ff19168317905591519081527f8d55861a3463260ef86139a9feef380a290f3f1b3367862f20f8a761fd198935910161081a565b60605f610a2a612cf4565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663047c92cf85846040518363ffffffff1660e01b8152600401610a7b929190614fe9565b5f60405180830381865afa158015610a95573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610abc919081019061500c565b90505f805b8251811015610b0e575f838281518110610add57610add614d24565b6020026020010151602001516001600160801b03161115610b065781610b02816150df565b9250505b600101610ac1565b50806001600160401b03811115610b2757610b276142c5565b604051908082528060200260200182016040528015610b50578160200160208202803683370190505b5093505f805b8351811015610be7575f848281518110610b7257610b72614d24565b6020026020010151602001516001600160801b03161115610bdf57848181518110610b9f57610b9f614d24565b6020026020010151868381518110610bb957610bb9614d24565b6001600160a01b039092166020928302919091019091015281610bdb816150df565b9250505b600101610b56565b5050505050919050565b5f828285818110610c0457610c04614d24565b9050602002013590509392505050565b5f805f610c1f612cf4565b90505f815111610c415760405162461bcd60e51b81526004016109b8906150f7565b805f81518110610c5357610c53614d24565b602002602001015192507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e923e8d4825f81518110610c9e57610c9e614d24565b60200260200101516040518263ffffffff1660e01b8152600401610cc29190614904565b5f60405180830381865afa158015610cdc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d039190810190614ebe565b6020015164ffffffffff16915060015b8151811015610e01575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e923e8d4848481518110610d5e57610d5e614d24565b60200260200101516040518263ffffffff1660e01b8152600401610d829190614904565b5f60405180830381865afa158015610d9c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dc39190810190614ebe565b6020015164ffffffffff16905083811015610df857809350828281518110610ded57610ded614d24565b602002602001015194505b50600101610d13565b50509091565b5f831315610e9557604051636204aa4360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636204aa4390610e63908990889088908890889060040161514a565b5f604051808303815f87803b158015610e7a575f80fd5b505af1158015610e8c573d5f803e3d5ffd5b50505050610f27565b5f831215610f27576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d3f4ec6f878688610ed888615198565b866040518663ffffffff1660e01b8152600401610ef99594939291906151b2565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505b836001600160a01b0316856001600160a01b03167f408e1cf750fb12fedd00b39d133c795337a3e4838483ddd54b95a2a406c747005f8987604051610f6e939291906151e2565b60405180910390a3505050505050565b610f86614018565b604051636fbd1e6760e11b815273cc035410d5570f2c5e841091c87d5d051761e5699063df7a3cce90610fdf9085907f00000000000000000000000000000000000000000000000000000000000000009060040161527d565b5f60405180830381865af4158015610ff9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610970919081019061559d565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a386266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a1919061567a565b6001600160a01b0316826001600160a01b0316036110c057505f919050565b5f6110c9612cf4565b90505f5b815181101561111757836001600160a01b03168282815181106110f2576110f2614d24565b60200260200101516001600160a01b03160361110f579392505050565b6001016110cd565b5060405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b60448201526064016109b8565b61115a614018565b5f8551116111b95760405162461bcd60e51b815260206004820152602660248201527f4d7573742070726f76696465206174206c65617374206f6e6520736f75726365604482015265103a37b5b2b760d11b60648201526084016109b8565b5f84116112085760405162461bcd60e51b815260206004820152601d60248201527f4d757374207769746864726177206e6f6e2d7a65726f20616d6f756e7400000060448201526064016109b8565b611282604051806101e00160405280606081526020015f6001600160a01b031681526020015f81526020015f815260200160608152602001606081526020015f81526020015f81526020015f8152602001606081526020016060815260200160608152602001606081526020015f81526020015f81525090565b61128a612cf4565b815f01819052507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a386266040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611311919061567a565b6001600160a01b031660208201526040810185905285516001036113a25760ff8016865f8151811061134557611345614d24565b602002602001015160ff16036113655761135d61314a565b5095506113a2565b611371600160ff615695565b60ff16865f8151811061138657611386614d24565b602002602001015160ff16036113a25761139e61213d565b5095505b85516001600160401b038111156113bb576113bb6142c5565b6040519080825280602002602001820160405280156113e4578160200160208202803683370190505b5061012082015285516001600160401b03811115611404576114046142c5565b60405190808252806020026020018201604052801561143757816020015b60608152602001906001900390816114225790505b5061014082015285516001600160401b03811115611457576114576142c5565b60405190808252806020026020018201604052801561148a57816020015b60608152602001906001900390816114755790505b5061016082015285516001600160401b038111156114aa576114aa6142c5565b6040519080825280602002602001820160405280156114d3578160200160208202803683370190505b506101808201525f6101a082018190526101c082018190525b8651811080156114ff57505f8260400151115b156119aa57815f01515187828151811061151b5761151b614d24565b602002602001015160ff16106115695760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e8ded6cadc40d2dcc8caf606b1b60448201526064016109b8565b5f825f015188838151811061158057611580614d24565b602002602001015160ff168151811061159b5761159b614d24565b602090810291909101015160405162b6413b60e41b81526001600160a01b03808316600483015260248201899052620f424060448301529192505f917f00000000000000000000000000000000000000000000000000000000000000001690630b6413b0906064016040805180830381865afa15801561161d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164191906156ae565b50905083602001516001600160a01b0316826001600160a01b0316036117a7576116728a838660400151848a611c89565b60c0870181905260a087019190915260808601919091525f03611696575050611998565b8360c0015184604001516116aa91906156de565b60408501526101208401516101a085015181518492919081106116cf576116cf614d24565b60200260200101906001600160a01b031690816001600160a01b0316815250508360800151846101400151856101a001518151811061171057611710614d24565b60200260200101819052508360a00151846101600151856101a001518151811061173c5761173c614d24565b60200260200101819052508360c00151846101800151856101a001518151811061176857611768614d24565b6020026020010181815250508360c00151846101c00181815161178b91906156f1565b9052506101a0840180519061179f826150df565b905250611995565b6117b5846040015183612e49565b60e085018190526117cb908b908490848a611c89565b60c0870181905260a087019190915260808601919091525f036117ef575050611998565b5f8460e001518560c00151101561188c5760c085015160208601516040516308cfce0f60e41b81526001600160a01b03861692638cfce0f092611846926004019182526001600160a01b0316602082015260400190565b602060405180830381865afa158015611861573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118859190615704565b9050611893565b5060408401515b8085604001516118a391906156de565b60408601526101208501516101a086015181518592919081106118c8576118c8614d24565b60200260200101906001600160a01b031690816001600160a01b0316815250508460800151856101400151866101a001518151811061190957611909614d24565b60200260200101819052508460a00151856101600151866101a001518151811061193557611935614d24565b602002602001018190525080856101800151866101a001518151811061195d5761195d614d24565b60200260200101818152505080856101c00181815161197c91906156f1565b9052506101a08501805190611990826150df565b905250505b50505b806119a2816150df565b9150506114ec565b50806101c001515f036119f45760405162461bcd60e51b81526020600482015260126024820152714e6f206265616e7320617661696c61626c6560701b60448201526064016109b8565b806101a001516001600160401b03811115611a1157611a116142c5565b604051908082528060200260200182016040528015611a3a578160200160208202803683370190505b5082526101a08101516001600160401b03811115611a5a57611a5a6142c5565b604051908082528060200260200182016040528015611a8d57816020015b6060815260200190600190039081611a785790505b5060208301526101a08101516001600160401b03811115611ab057611ab06142c5565b604051908082528060200260200182016040528015611ae357816020015b6060815260200190600190039081611ace5790505b5060408301526101a08101516001600160401b03811115611b0657611b066142c5565b604051908082528060200260200182016040528015611b2f578160200160208202803683370190505b5060608301526101c081015160808301525f5b816101a00151811015611c6b578161012001518181518110611b6657611b66614d24565b6020026020010151835f01518281518110611b8357611b83614d24565b60200260200101906001600160a01b031690816001600160a01b0316815250508161014001518181518110611bba57611bba614d24565b602002602001015183602001518281518110611bd857611bd8614d24565b60200260200101819052508161016001518181518110611bfa57611bfa614d24565b602002602001015183604001518281518110611c1857611c18614d24565b60200260200101819052508161018001518181518110611c3a57611c3a614d24565b602002602001015183606001518281518110611c5857611c58614d24565b6020908102919091010152600101611b42565b505095945050505050565b611c7e613d35565b611c875f613dea565b565b6040516354369b5b60e01b81526001600160a01b038681166004830152858116602483015260609182915f9182917f000000000000000000000000000000000000000000000000000000000000000016906354369b5b906044015f60405180830381865afa158015611cfd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d24919081019061571b565b905080515f03611d50575050604080515f808252602082018181528284019093529093509091506120cd565b80516001600160401b03811115611d6957611d696142c5565b604051908082528060200260200182016040528015611d92578160200160208202803683370190505b50935080516001600160401b03811115611dae57611dae6142c5565b604051908082528060200260200182016040528015611dd7578160200160208202803683370190505b5081519093505f9250879083905b80156120c4575f611e1b85611dfb6001856156de565b81518110611e0b57611e0b614d24565b6020026020010151606081901c91565b91505089600b0b81600b0b1215611e3257506120b2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663614492128f8f856040518463ffffffff1660e01b8152600401611e839392919061574c565b6040805180830381865afa158015611e9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ec19190615773565b509050805f5b8b5151811015612017578e6001600160a01b03168c5f01518281518110611ef057611ef0614d24565b60200260200101516001600160a01b03160361200f575f5b8c602001518281518110611f1e57611f1e614d24565b6020026020010151518110156120075784600b0b8d602001518381518110611f4857611f48614d24565b60200260200101518281518110611f6157611f61614d24565b6020026020010151600b0b03611fff57838d604001518381518110611f8857611f88614d24565b60200260200101518281518110611fa157611fa1614d24565b602002602001015110611fb6575f9250612007565b8c604001518281518110611fcc57611fcc614d24565b60200260200101518181518110611fe557611fe5614d24565b602002602001015184611ff891906156de565b9250612007565b600101611f08565b508115612017575b600101611ec7565b50805f03612027575050506120b2565b80868111156120335750855b838b878151811061204657612046614d24565b6020026020010190600b0b9081600b0b81525050808a878151811061206d5761206d614d24565b6020908102919091010152612082818a6156f1565b985061208e81886156de565b96508561209a816150df565b965050865f036120ad57505050506120c4565b505050505b806120bc81615795565b915050611de5565b50808652845250505b955095509592505050565b5f6120e382846156f1565b9392505050565b6060805f6120f6614018565b6121038888888885611c89565b935093509350509450945094915050565b5f6120e382846157be565b5f8161212b84866157d1565b61213591906157be565b949350505050565b6060805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663170cf0846040518163ffffffff1660e01b81526004015f60405180830381865afa15801561219c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121c391908101906157e8565b90505f8151116121e55760405162461bcd60e51b81526004016109b8906150f7565b5f805b825181101561222a5782818151811061220357612203614d24565b60200260200101516020015115612222578161221e816150df565b9250505b6001016121e8565b505f811161224a5760405162461bcd60e51b81526004016109b8906158df565b806001600160401b03811115612262576122626142c5565b60405190808252806020026020018201604052801561228b578160200160208202803683370190505b509350806001600160401b038111156122a6576122a66142c5565b6040519080825280602002602001820160405280156122cf578160200160208202803683370190505b5092505f805b835181101561240f578381815181106122f0576122f0614d24565b60200260200101516020015115612407578086838151811061231457612314614d24565b602002602001019060ff16908160ff16815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e923e8d485838151811061236957612369614d24565b60200260200101515f01516040518263ffffffff1660e01b81526004016123909190614904565b5f60405180830381865afa1580156123aa573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123d19190810190614ebe565b6020015164ffffffffff168583815181106123ee576123ee614d24565b602090810291909101015281612403816150df565b9250505b6001016122d5565b5061241a8585613e39565b90969095509350505050565b5f6120e382846156de565b6040516332fc9d1160e11b81525f9073cc035410d5570f2c5e841091c87d5d051761e569906365f93a229061248e90869086907f000000000000000000000000000000000000000000000000000000000000000090600401615916565b602060405180830381865af41580156124a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e39190615978565b5f805f6124d8612cf4565b90505f8151116124fa5760405162461bcd60e51b81526004016109b8906150f7565b805f8151811061250c5761250c614d24565b602002602001015192507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e923e8d4825f8151811061255757612557614d24565b60200260200101516040518263ffffffff1660e01b815260040161257b9190614904565b5f60405180830381865afa158015612595573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125bc9190810190614ebe565b6020015164ffffffffff16915060015b8151811015610e01575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e923e8d484848151811061261757612617614d24565b60200260200101516040518263ffffffff1660e01b815260040161263b9190614904565b5f60405180830381865afa158015612655573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261267c9190810190614ebe565b6020015164ffffffffff169050838111156126b1578093508282815181106126a6576126a6614d24565b602002602001015194505b506001016125cc565b5f806126c684846128bc565b91505f9050805b8251811015612705578281815181106126e8576126e8614d24565b6020026020010151826126fb91906156f1565b91506001016126cd565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a386266040518163ffffffff1660e01b8152600401602060405180830381865afa158015612762573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612786919061567a565b6001600160a01b0316846001600160a01b0316036127a75791506109709050565b80156128b257836001600160a01b0316638cfce0f0827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a386266040518163ffffffff1660e01b8152600401602060405180830381865afa158015612819573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283d919061567a565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b03166024820152604401602060405180830381865afa158015612885573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a99190615704565b92505050610970565b505f949350505050565b6040516354369b5b60e01b81526001600160a01b038381166004830152828116602483015260609182915f917f0000000000000000000000000000000000000000000000000000000000000000909116906354369b5b906044015f60405180830381865afa158015612930573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612957919081019061571b565b905080515f036129975760405162461bcd60e51b815260206004820152600b60248201526a4e6f206465706f7369747360a81b60448201526064016109b8565b80516001600160401b038111156129b0576129b06142c5565b6040519080825280602002602001820160405280156129d9578160200160208202803683370190505b50925080516001600160401b038111156129f5576129f56142c5565b604051908082528060200260200182016040528015612a1e578160200160208202803683370190505b5091505f5b8151811015612b26575f612a42838381518110611e0b57611e0b614d24565b9150505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663614492128989856040518463ffffffff1660e01b8152600401612a969392919061574c565b6040805180830381865afa158015612ab0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ad49190615773565b50905081868481518110612aea57612aea614d24565b6020026020010190600b0b9081600b0b8152505080858481518110612b1157612b11614d24565b60209081029190910101525050600101612a23565b505f5b60018251612b3791906156de565b811015612ce0575f5b6001828451612b4f91906156de565b612b5991906156de565b811015612cd75784612b6c8260016156f1565b81518110612b7c57612b7c614d24565b6020026020010151600b0b858281518110612b9957612b99614d24565b6020026020010151600b0b1215612ccf575f858281518110612bbd57612bbd614d24565b6020026020010151905085826001612bd591906156f1565b81518110612be557612be5614d24565b6020026020010151868381518110612bff57612bff614d24565b600b9290920b602092830291909101909101528086612c1f8460016156f1565b81518110612c2f57612c2f614d24565b6020026020010190600b0b9081600b0b815250505f858381518110612c5657612c56614d24565b6020026020010151905085836001612c6e91906156f1565b81518110612c7e57612c7e614d24565b6020026020010151868481518110612c9857612c98614d24565b60209081029190910101528086612cb08560016156f1565b81518110612cc057612cc0614d24565b60200260200101818152505050505b600101612b40565b50600101612b29565b50509250929050565b5f6120e382846157d1565b60605f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663170cf0846040518163ffffffff1660e01b81526004015f60405180830381865afa158015612d52573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d7991908101906157e8565b90505f81516001600160401b03811115612d9557612d956142c5565b604051908082528060200260200182016040528015612dbe578160200160208202803683370190505b5090505f5b8251811015612e1b57828181518110612dde57612dde614d24565b60200260200101515f0151828281518110612dfb57612dfb614d24565b6001600160a01b0390921660209283029190910190910152600101612dc3565b5092915050565b612e2a614018565b612e32614018565b612e3f8686868685611152565b9695505050505050565b5f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b81526004015f60405180830381865afa158015612e86573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612ead919081019061571b565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b592d450856001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004015f60405180830381865afa158015612f1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f419190810190615993565b6040518263ffffffff1660e01b8152600401612f5d9190615a1c565b602060405180830381865afa158015612f78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f9c9190615704565b90505f846001600160a01b03166310dd08306040518163ffffffff1660e01b81526004015f60405180830381865afa158015612fda573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526130019190810190615a68565b90505f815f01516001600160a01b03166314c15fc08584602001516040518363ffffffff1660e01b8152600401613039929190615ae2565b602060405180830381865afa158015613054573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130789190615704565b90508684848151811061308d5761308d614d24565b602002602001015161309f91906156de565b8484815181106130b1576130b1614d24565b6020026020010181815250505f825f01516001600160a01b03166314c15fc08685602001516040518363ffffffff1660e01b81526004016130f3929190615ae2565b602060405180830381865afa15801561310e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131329190615704565b905061313e81836156de565b98975050505050505050565b6060805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663170cf0846040518163ffffffff1660e01b81526004015f60405180830381865afa1580156131a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131d091908101906157e8565b90505f8151116131f25760405162461bcd60e51b81526004016109b8906150f7565b5f805b82518110156132375782818151811061321057613210614d24565b6020026020010151602001511561322f578161322b816150df565b9250505b6001016131f5565b505f81116132575760405162461bcd60e51b81526004016109b8906158df565b806001600160401b0381111561326f5761326f6142c5565b604051908082528060200260200182016040528015613298578160200160208202803683370190505b509350806001600160401b038111156132b3576132b36142c5565b6040519080825280602002602001820160405280156132dc578160200160208202803683370190505b5092505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b7fafcd760016040518263ffffffff1660e01b815260040161332d9190615b2b565b5f60405180830381865afa158015613347573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261336e9190810190615bdd565b90505f805b845181101561341f5784818151811061338e5761338e614d24565b6020026020010151602001511561341757808783815181106133b2576133b2614d24565b602002602001019060ff16908160ff16815250506133ec8582815181106133db576133db614d24565b60200260200101515f015184613eb6565b8683815181106133fe576133fe614d24565b602090810291909101015281613413816150df565b9250505b600101613373565b5061342a8686613e39565b9097909650945050505050565b61343f613d35565b6001600160a01b038116613468575f604051631e4fbdf760e01b81526004016109b89190614904565b6109c181613dea565b5f6120e38284615d50565b5f80356001600160e01b03191681526001602052604081205460ff16156134da5760405162461bcd60e51b8152602060048201526012602482015271119d5b98dd1a5bdb881a5cc81c185d5cd95960721b60448201526064016109b8565b8151515f036134f2576134ef88888888612e22565b91505b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a386266040518163ffffffff1660e01b8152600401602060405180830381865afa158015613550573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613574919061567a565b90505f5b845151811015613d26575f855f0151828151811061359857613598614d24565b60200260200101519050826001600160a01b0316816001600160a01b03161461372957604051631ec44a2360e31b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f622511890613609908590600401614904565b6040805180830381865afa158015613623573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136479190615d63565b506040516361efc59d60e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906361efc59d9061369b90859085908e90600401615d8f565b6020604051808303815f875af11580156136b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136db9190615978565b6137275760405162461bcd60e51b815260206004820152601b60248201527f5072696365206d616e6970756c6174696f6e206465746563746564000000000060448201526064016109b8565b505b826001600160a01b0316816001600160a01b03160361382b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166327e047f1828860200151858151811061378857613788614d24565b6020026020010151896040015186815181106137a6576137a6614d24565b60200260200101518b6040518563ffffffff1660e01b81526004016137ce9493929190615db3565b5f604051808303815f87803b1580156137e5575f80fd5b505af11580156137f7573d5f803e3d5ffd5b505050508560600151828151811061381157613811614d24565b60200260200101518461382491906156f1565b9350613d1d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166327e047f1828860200151858151811061387157613871614d24565b60200260200101518960400151868151811061388f5761388f614d24565b602002602001015160016040518563ffffffff1660e01b81526004016138b89493929190615db3565b5f604051808303815f87803b1580156138cf575f80fd5b505af11580156138e1573d5f803e3d5ffd5b505050505f805b876040015184815181106138fe576138fe614d24565b60200260200101515181101561395a578760400151848151811061392457613924614d24565b6020026020010151818151811061393d5761393d614d24565b60200260200101518261395091906156f1565b91506001016138e8565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d3f4ec6f838f30855f6040518663ffffffff1660e01b81526004016139af9594939291906151b2565b5f604051808303815f87803b1580156139c6575f80fd5b505af11580156139d8573d5f803e3d5ffd5b505060405163095ea7b360e01b81526001600160a01b038516925063095ea7b39150613a0a9085908590600401614225565b6020604051808303815f875af1158015613a26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615978565b50816001600160a01b0316635fe192c682868a606001518781518110613a7257613a72614d24565b60209081029190910101516040516001600160e01b031960e086901b16815260048101939093526001600160a01b03909116602483015260448201523060648201525f19608482015260a4016020604051808303815f875af1158015613ada573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afe9190615704565b506001886001811115613b1357613b13615126565b03613c6357836001600160a01b031663095ea7b37f000000000000000000000000000000000000000000000000000000000000000089606001518681518110613b5e57613b5e614d24565b60200260200101516040518363ffffffff1660e01b8152600401613b83929190614225565b6020604051808303815f875af1158015613b9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bc39190615978565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca1e71ae858f8a606001518781518110613c0b57613c0b614d24565b60200260200101516040518463ffffffff1660e01b8152600401613c3193929190615d8f565b5f604051808303815f87803b158015613c48575f80fd5b505af1158015613c5a573d5f803e3d5ffd5b50505050613cf0565b836001600160a01b031663a9059cbb8e89606001518681518110613c8957613c89614d24565b60200260200101516040518363ffffffff1660e01b8152600401613cae929190614225565b6020604051808303815f875af1158015613cca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cee9190615978565b505b86606001518381518110613d0657613d06614d24565b602002602001015185613d1991906156f1565b9450505b50600101613578565b50909998505050505050505050565b5f546001600160a01b03163314611c87573360405163118cdaa760e01b81526004016109b89190614904565b60608073cc035410d5570f2c5e841091c87d5d051761e569631b29bd3585856040518363ffffffff1660e01b8152600401613d9d929190615e03565b5f60405180830381865af4158015613db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613dde9190810190615e44565b915091505b9250929050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608073cc035410d5570f2c5e841091c87d5d051761e5696316d0bf1f85856040518363ffffffff1660e01b8152600401613e75929190614b3f565b5f60405180830381865af4158015613e8f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613dde9190810190615ea3565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166391a386266040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f38919061567a565b9050806001600160a01b0316846001600160a01b031603613f5c5750508051610970565b5f5b836060015151811015613fd757846001600160a01b031684606001518281518110613f8b57613f8b614d24565b60200260200101515f01516001600160a01b031603613fcf5783606001518181518110613fba57613fba614d24565b60200260200101516060015192505050610970565b600101613f5e565b5060405162461bcd60e51b8152602060048201526015602482015274151bdad95b881c1c9a58d9481b9bdd08199bdd5b99605a1b60448201526064016109b8565b6040518060a00160405280606081526020016060815260200160608152602001606081526020015f81525090565b6001600160e01b0319811681146109c1575f80fd5b5f6020828403121561406b575f80fd5b81356120e381614046565b5f815180845260208085019450602084015f5b838110156140ae5781516001600160a01b031687529582019590820190600101614089565b509495945050505050565b5f815180845260208085019450602084015f5b838110156140ae578151875295820195908201906001016140cc565b604081525f6140fa6040830185614076565b828103602084015261410c81856140b9565b95945050505050565b5f8060408385031215614126575f80fd5b50508035926020909101359150565b80151581146109c1575f80fd5b5f60208284031215614152575f80fd5b81356120e381614135565b6001600160a01b03811681146109c1575f80fd5b5f60208284031215614181575f80fd5b81356120e38161415d565b602081525f6120e36020830184614076565b5f8083601f8401126141ae575f80fd5b5081356001600160401b038111156141c4575f80fd5b6020830191508360208260051b8501011115613de3575f80fd5b5f805f604084860312156141f0575f80fd5b8335925060208401356001600160401b0381111561420c575f80fd5b6142188682870161419e565b9497909650939450505050565b6001600160a01b03929092168252602082015260400190565b80356002811061424c575f80fd5b919050565b5f805f805f8060c08789031215614266575f80fd5b86356142718161415d565b955060208701356142818161415d565b945060408701356142918161415d565b9350606087013592506080870135600481106142ab575f80fd5b91506142b960a0880161423e565b90509295509295509295565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156142fb576142fb6142c5565b60405290565b604051608081016001600160401b03811182821017156142fb576142fb6142c5565b60405161016081016001600160401b03811182821017156142fb576142fb6142c5565b604080519081016001600160401b03811182821017156142fb576142fb6142c5565b60405161014081016001600160401b03811182821017156142fb576142fb6142c5565b604051601f8201601f191681016001600160401b03811182821017156143b3576143b36142c5565b604052919050565b5f6001600160401b038211156143d3576143d36142c5565b5060051b60200190565b5f82601f8301126143ec575f80fd5b813560206144016143fc836143bb565b61438b565b8083825260208201915060208460051b870101935086841115614422575f80fd5b602086015b8481101561444757803561443a8161415d565b8352918301918301614427565b509695505050505050565b80600b0b81146109c1575f80fd5b5f82601f83011261446f575f80fd5b8135602061447f6143fc836143bb565b828152600592831b850182019282820191908785111561449d575f80fd5b8387015b858110156145365780356001600160401b038111156144be575f80fd5b8801603f81018a136144ce575f80fd5b8581013560406144e06143fc836143bb565b82815291851b8301810191888101908d8411156144fb575f80fd5b938201935b83851015614525578435925061451583614452565b8282529389019390890190614500565b8852505050938501935084016144a1565b5090979650505050505050565b5f82601f830112614552575f80fd5b813560206145626143fc836143bb565b8083825260208201915060208460051b870101935086841115614583575f80fd5b602086015b848110156144475780358352918301918301614588565b5f82601f8301126145ae575f80fd5b813560206145be6143fc836143bb565b82815260059290921b840181019181810190868411156145dc575f80fd5b8286015b848110156144475780356001600160401b038111156145fd575f80fd5b61460b8986838b0101614543565b8452509183019183016145e0565b5f60a08284031215614629575f80fd5b6146316142d9565b905081356001600160401b0380821115614649575f80fd5b614655858386016143dd565b8352602084013591508082111561466a575f80fd5b61467685838601614460565b6020840152604084013591508082111561468e575f80fd5b61469a8583860161459f565b604084015260608401359150808211156146b2575f80fd5b506146bf84828501614543565b6060830152506080820135608082015292915050565b5f60208083850312156146e6575f80fd5b82356001600160401b03808211156146fc575f80fd5b818501915085601f83011261470f575f80fd5b813561471d6143fc826143bb565b81815260059190911b8301840190848101908883111561473b575f80fd5b8585015b8381101561477157803585811115614755575f80fd5b6147638b89838a0101614619565b84525091860191860161473f565b5098975050505050505050565b5f815180845260208085019450602084015f5b838110156140ae578151600b0b87529582019590820190600101614791565b5f8282518085526020808601955060208260051b840101602086015f5b8481101561453657601f198684030189526147e983835161477e565b988401989250908301906001016147cd565b5f8282518085526020808601955060208260051b840101602086015f5b8481101561453657601f198684030189526148348383516140b9565b98840198925090830190600101614818565b6020808252825160a083830152805160c084018190525f9291820190839060e08601905b808310156148935783516001600160a01b0316825292840192600192909201919084019061486a565b50838701519350601f199250828682030160408701526148b381856147b0565b935050506040850151818584030160608601526148d083826147fb565b9250506060850151818584030160808601526148ec83826140b9565b92505050608084015160a08401528091505092915050565b6001600160a01b0391909116815260200190565b60ff811681146109c1575f80fd5b5f82601f830112614935575f80fd5b813560206149456143fc836143bb565b8083825260208201915060208460051b870101935086841115614966575f80fd5b602086015b8481101561444757803561497e81614918565b835291830191830161496b565b5f805f805f60a0868803121561499f575f80fd5b85356149aa8161415d565b945060208601356001600160401b03808211156149c5575f80fd5b6149d189838a01614926565b9550604088013594506060880135935060808801359150808211156149f4575f80fd5b50614a0188828901614619565b9150509295509295909350565b5f805f805f60a08688031215614a22575f80fd5b8535614a2d8161415d565b94506020860135614a3d8161415d565b9350604086013592506060860135614a5481614452565b915060808601356001600160401b03811115614a6e575f80fd5b614a0188828901614619565b606081525f614a8c606083018661477e565b8281036020840152614a9e81866140b9565b915050826040830152949350505050565b5f60208284031215614abf575f80fd5b5035919050565b5f805f8060808587031215614ad9575f80fd5b8435614ae48161415d565b93506020850135614af48161415d565b9250604085013591506060850135614b0b81614452565b939692955090935050565b5f805f60608486031215614b28575f80fd5b505081359360208301359350604090920135919050565b604080825283519082018190525f906020906060840190828701845b82811015614b7a57815160ff1684529284019290840190600101614b5b565b5050508381036020850152612e3f81866140b9565b5f8060208385031215614ba0575f80fd5b82356001600160401b03811115614bb5575f80fd5b61241a8582860161419e565b5f8060408385031215614bd2575f80fd5b8235614bdd8161415d565b91506020830135614bed8161415d565b809150509250929050565b604081525f6140fa604083018561477e565b5f805f8060808587031215614c1d575f80fd5b8435614c288161415d565b935060208501356001600160401b03811115614c42575f80fd5b614c4e87828801614926565b949794965050505060408301359260600135919050565b5f8060408385031215614c76575f80fd5b823591506020830135614bed8161415d565b5f805f805f805f60e0888a031215614c9e575f80fd5b8735614ca98161415d565b965060208801356001600160401b0380821115614cc4575f80fd5b614cd08b838c01614926565b975060408a0135965060608a0135955060808a01359450614cf360a08b0161423e565b935060c08a0135915080821115614d08575f80fd5b50614d158a828b01614619565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b805161424c81614046565b805164ffffffffff8116811461424c575f80fd5b805165ffffffffffff8116811461424c575f80fd5b805163ffffffff8116811461424c575f80fd5b805161424c81614452565b80516001600160f81b03198116811461424c575f80fd5b80516001600160801b038116811461424c575f80fd5b80516001600160401b038116811461424c575f80fd5b805161424c8161415d565b5f82601f830112614de7575f80fd5b81516001600160401b03811115614e0057614e006142c5565b614e13601f8201601f191660200161438b565b818152846020838601011115614e27575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f60808284031215614e53575f80fd5b614e5b614301565b90508151614e688161415d565b81526020820151614e7881614046565b6020820152614e8960408301614d8a565b604082015260608201516001600160401b03811115614ea6575f80fd5b614eb284828501614dd8565b60608301525092915050565b5f60208284031215614ece575f80fd5b81516001600160401b0380821115614ee4575f80fd5b908301906101608286031215614ef8575f80fd5b614f00614323565b614f0983614d38565b8152614f1760208401614d43565b6020820152614f2860408401614d57565b6040820152614f3960608401614d6c565b6060820152614f4a60808401614d7f565b6080820152614f5b60a08401614d8a565b60a0820152614f6c60c08401614d43565b60c0820152614f7d60e08401614da1565b60e0820152610100614f90818501614db7565b908201526101208381015183811115614fa7575f80fd5b614fb388828701614e43565b8284015250506101408084015183811115614fcc575f80fd5b614fd888828701614e43565b918301919091525095945050505050565b6001600160a01b03831681526040602082018190525f9061213590830184614076565b5f602080838503121561501d575f80fd5b82516001600160401b03811115615032575f80fd5b8301601f81018513615042575f80fd5b80516150506143fc826143bb565b81815260069190911b8201830190838101908783111561506e575f80fd5b928401925b828410156150c0576040848903121561508a575f80fd5b615092614346565b845161509d81614452565b81526150aa858701614da1565b8187015282526040939093019290840190615073565b979650505050505050565b634e487b7160e01b5f52601160045260245ffd5b5f600182016150f0576150f06150cb565b5060010190565b6020808252601590820152744e6f2077686974656c697374656420746f6b656e7360581b604082015260600190565b634e487b7160e01b5f52602160045260245ffd5b600281106109c1576109c1615126565b6001600160a01b038681168252851660208201526040810184905260a081016004841061517957615179615126565b8360608301526151888361513a565b8260808301529695505050505050565b5f600160ff1b82016151ac576151ac6150cb565b505f0390565b6001600160a01b0386811682528581166020830152841660408201526060810183905260a081016151888361513a565b606081016151ef8561513a565b9381526001600160a01b0392909216602083015260409091015290565b5f82825180855260208086019550808260051b8401018186015f5b8481101561453657858303601f190189528151805180855290850190858501905f5b81811015615268578351600b0b83529287019291870191600101615249565b50509985019993505090830190600101615227565b5f6040808301604084528086518083526060925060608601915060608160051b8701016020808a015f5b8481101561536657898403605f190186528151805160a0808752815190870181905260c08701918601905f905b808210156152fd5782516001600160a01b031684529287019291870191600191909101906152d4565b5050508482015186820386880152615315828261520c565b915050898201518682038b88015261532d82826147fb565b915050888201518682038a88015261534582826140b9565b608093840151979093019690965250958301959350908201906001016152a7565b505081965061537f8189018a6001600160a01b03169052565b5050505050509392505050565b5f82601f83011261539b575f80fd5b815160206153ab6143fc836143bb565b8083825260208201915060208460051b8701019350868411156153cc575f80fd5b602086015b848110156144475780516153e48161415d565b83529183019183016153d1565b5f82601f830112615400575f80fd5b815160206154106143fc836143bb565b828152600592831b850182019282820191908785111561542e575f80fd5b8387015b858110156145365780516001600160401b0381111561544f575f80fd5b8801603f81018a1361545f575f80fd5b8581015160406154716143fc836143bb565b82815291851b8301810191888101908d84111561548c575f80fd5b938201935b838510156154b657845192506154a683614452565b8282529389019390890190615491565b885250505093850193508401615432565b5f82601f8301126154d6575f80fd5b815160206154e66143fc836143bb565b8083825260208201915060208460051b870101935086841115615507575f80fd5b602086015b84811015614447578051835291830191830161550c565b5f82601f830112615532575f80fd5b815160206155426143fc836143bb565b82815260059290921b84018101918181019086841115615560575f80fd5b8286015b848110156144475780516001600160401b03811115615581575f80fd5b61558f8986838b01016154c7565b845250918301918301615564565b5f602082840312156155ad575f80fd5b81516001600160401b03808211156155c3575f80fd5b9083019060a082860312156155d6575f80fd5b6155de6142d9565b8251828111156155ec575f80fd5b6155f88782860161538c565b82525060208301518281111561560c575f80fd5b615618878286016153f1565b60208301525060408301518281111561562f575f80fd5b61563b87828601615523565b604083015250606083015182811115615652575f80fd5b61565e878286016154c7565b6060830152506080830151608082015280935050505092915050565b5f6020828403121561568a575f80fd5b81516120e38161415d565b60ff8281168282160390811115610970576109706150cb565b5f80604083850312156156bf575f80fd5b82516156ca81614452565b602084015190925060038110614bed575f80fd5b81810381811115610970576109706150cb565b80820180821115610970576109706150cb565b5f60208284031215615714575f80fd5b5051919050565b5f6020828403121561572b575f80fd5b81516001600160401b03811115615740575f80fd5b612135848285016154c7565b6001600160a01b039384168152919092166020820152600b9190910b604082015260600190565b5f8060408385031215615784575f80fd5b505080516020909101519092909150565b5f816157a3576157a36150cb565b505f190190565b634e487b7160e01b5f52601260045260245ffd5b5f826157cc576157cc6157aa565b500490565b8082028115828204841417610970576109706150cb565b5f60208083850312156157f9575f80fd5b82516001600160401b0381111561580e575f80fd5b8301601f8101851361581e575f80fd5b805161582c6143fc826143bb565b81815260a0918202830184019184820191908884111561584a575f80fd5b938501935b838510156158d35780858a031215615865575f80fd5b61586d6142d9565b85516158788161415d565b81528587015161588781614135565b8188015260408681015161589a81614135565b908201526060868101516158ad81614135565b908201526080868101516158c081614135565b908201528352938401939185019161584f565b50979650505050505050565b6020808252601c908201527f4e6f206163746976652077686974656c697374656420746f6b656e7300000000604082015260600190565b604080825281018390525f8460608301825b8681101561595857823561593b8161415d565b6001600160a01b0316825260209283019290910190600101615928565b506001600160a01b03949094166020939093019290925250909392505050565b5f60208284031215615988575f80fd5b81516120e381614135565b5f60208083850312156159a4575f80fd5b82516001600160401b038111156159b9575f80fd5b8301601f810185136159c9575f80fd5b80516159d76143fc826143bb565b81815260059190911b820183019083810190878311156159f5575f80fd5b928401925b828410156150c0578351615a0d8161415d565b825292840192908401906159fa565b602080825282518282018190525f9190848201906040850190845b81811015615a5c5783516001600160a01b031683529284019291840191600101615a37565b50909695505050505050565b5f60208284031215615a78575f80fd5b81516001600160401b0380821115615a8e575f80fd5b9083019060408286031215615aa1575f80fd5b615aa9614346565b8251615ab48161415d565b8152602083015182811115615ac7575f80fd5b615ad387828601614dd8565b60208301525095945050505050565b604081525f615af460408301856140b9565b828103602084015283518082528060208601602084015e5f602082840101526020601f19601f830116830101925050509392505050565b6020810160038310615b3f57615b3f615126565b91905290565b5f82601f830112615b54575f80fd5b615b5c614346565b806040840185811115615b6d575f80fd5b845b81811015615b90578051615b828161415d565b845260209384019301615b6f565b509095945050505050565b5f82601f830112615baa575f80fd5b615bb2614346565b806040840185811115615bc3575f80fd5b845b81811015615b90578051845260209384019301615bc5565b5f6020808385031215615bee575f80fd5b82516001600160401b0380821115615c04575f80fd5b81850191506080808388031215615c19575f80fd5b615c21614301565b835181528484015185820152604080850151604083015260608086015185811115615c4a575f80fd5b80870196505089601f870112615c5e575f80fd5b85519450615c6e6143fc866143bb565b858152610180958602870188019588820191908c881115615c8d575f80fd5b978901975b87891015615d3b5780898e031215615ca8575f80fd5b615cb0614368565b615cb98a614dcd565b8152615cc78e8c8c01615b45565b8b820152615cd78e868c01615b9b565b8187015260a08a8101518683015260c0808c01518a84015260e0808d015192840192909252610100808d015191840191909152610120808d0151928401929092526101408c0151908301526101608b01519082015283529788019791890191615c92565b50606085015250919998505050505050505050565b5f82615d5e57615d5e6157aa565b500690565b5f8060408385031215615d74575f80fd5b8251615d7f8161415d565b6020939093015192949293505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03851681526080602082018190525f90615dd69083018661477e565b8281036040840152615de881866140b9565b915050615df48361513a565b82606083015295945050505050565b604080825283519082018190525f906020906060840190828701845b82811015614b7a5781516001600160a01b031684529284019290840190600101615e1f565b5f8060408385031215615e55575f80fd5b82516001600160401b0380821115615e6b575f80fd5b615e778683870161538c565b93506020850151915080821115615e8c575f80fd5b50615e99858286016154c7565b9150509250929050565b5f8060408385031215615eb4575f80fd5b82516001600160401b0380821115615eca575f80fd5b818501915085601f830112615edd575f80fd5b81516020615eed6143fc836143bb565b82815260059290921b84018101918181019089841115615f0b575f80fd5b948201945b83861015615f32578551615f2381614918565b82529482019490820190615f10565b91880151919650909350505080821115615e8c575f80fdfea26469706673582212206f0196da3e04fe1ef8a61fa5ba69c4d776b394838cf35a3ec422ad5e3ff80f1a64736f6c63430008190033000000000000000000000000d1a0d188e861ed9d15773a2f3574a2e94134ba8f00000000000000000000000013d25abcb6a19948d35654715c729c6501230b490000000000000000000000002cf82605402912c6a79078a9bbfccf061cbfd507000000000000000000000000774c111f471fba61b13d63c9b585882e3c6cf7a6