0 txs
430 calls
constructor
constructor(address collateralLiquidator, address delegateRegistryV1, address delegateRegistryV2, address erc20DepositTokenImplementation, address[] collateralWrappers)
functions
ABSOLUTE_TICK_LIMIT_SPACING_BASIS_POINTS
viewfunction ABSOLUTE_TICK_LIMIT_SPACING_BASIS_POINTS() view returns (uint256)
admin
viewfunction admin() view returns (address)
adminFeeBalance
viewfunction adminFeeBalance() view returns (uint256)
adminFeeRate
viewfunction adminFeeRate() view returns (uint32)
COLLATERAL_FILTER_NAME
purefunction COLLATERAL_FILTER_NAME() pure returns (string)
COLLATERAL_FILTER_VERSION
purefunction COLLATERAL_FILTER_VERSION() pure returns (string)
collateralLiquidator
viewfunction collateralLiquidator() view returns (address)
collateralToken
viewfunction collateralToken() view returns (address)
collateralTokens
viewfunction collateralTokens() view returns (address[])
collateralWrappers
viewfunction collateralWrappers() view returns (address[])
currencyToken
viewfunction currencyToken() view returns (address)
decodeLoanReceipt
purefunction decodeLoanReceipt(bytes loanReceipt) pure returns (tuple)
delegationRegistry
viewfunction delegationRegistry() view returns (address)
delegationRegistryV2
viewfunction delegationRegistryV2() view returns (address)
deposits
viewfunction deposits(address account, uint128 tick) view returns (uint128 shares, uint128 redemptionId)
depositSharePrice
viewfunction depositSharePrice(uint128 tick) view returns (uint256)
depositToken
viewfunction depositToken(uint128 tick) view returns (address)
durations
viewfunction durations() view returns (uint64[])
feeShare
viewfunction feeShare() view returns (address recipient, uint16 split)
getERC20DepositTokenImplementation
viewfunction getERC20DepositTokenImplementation() view returns (address)
IMPLEMENTATION_NAME
purefunction IMPLEMENTATION_NAME() pure returns (string)
IMPLEMENTATION_VERSION
purefunction IMPLEMENTATION_VERSION() pure returns (string)
INTEREST_RATE_MODEL_NAME
purefunction INTEREST_RATE_MODEL_NAME() pure returns (string)
INTEREST_RATE_MODEL_VERSION
purefunction INTEREST_RATE_MODEL_VERSION() pure returns (string)
liquidityNode
viewfunction liquidityNode(uint128 tick) view returns (tuple)
liquidityNodes
viewfunction liquidityNodes(uint128 startTick, uint128 endTick) view returns (tuple[])
liquidityNodeWithAccrual
viewfunction liquidityNodeWithAccrual(uint128 tick) view returns (tuple, tuple)
loans
viewfunction loans(bytes32 receiptHash) view returns (uint8)
onERC1155BatchReceived
purefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) pure returns (bytes4)
onERC1155Received
purefunction onERC1155Received(address, address, uint256, uint256, bytes) pure returns (bytes4)
price
viewfunction price(address collateralToken, address currencyToken, uint256[] tokenIds, uint256[] tokenIdQuantities, bytes oracleContext) view returns (uint256)
priceOracle
viewfunction priceOracle() view returns (address)
quote
viewfunction quote(uint256 principal, uint64 duration, address collateralToken, uint256 collateralTokenId, uint128[] ticks, bytes options) view returns (uint256)
rates
viewfunction rates() view returns (uint64[])
RATIO_TICK_LIMIT_SPACING_BASIS_POINTS
viewfunction RATIO_TICK_LIMIT_SPACING_BASIS_POINTS() view returns (uint256)
redemptionAvailable
viewfunction redemptionAvailable(address account, uint128 tick, uint128 redemptionId) view returns (uint256, uint256, uint256)
redemptions
viewfunction redemptions(address account, uint128 tick, uint128 redemptionId) view returns (uint128 pending, uint128 index, uint128 target)
redemptionSharePrice
viewfunction redemptionSharePrice(uint128 tick) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
borrow
nonpayablefunction borrow(uint256 principal, uint64 duration, address collateralToken, uint256 collateralTokenId, uint256 maxRepayment, uint128[] ticks, bytes options) returns (uint256)
deposit
nonpayablefunction deposit(uint128 tick, uint256 amount, uint256 minShares) returns (uint256)
initialize
nonpayablefunction initialize(bytes params)
liquidate
nonpayablefunction liquidate(bytes encodedLoanReceipt)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
onCollateralLiquidated
nonpayablefunction onCollateralLiquidated(bytes encodedLoanReceipt, uint256 proceeds)
rebalance
nonpayablefunction rebalance(uint128 srcTick, uint128 dstTick, uint128 redemptionId, uint256 minShares) returns (uint256, uint256, uint256)
redeem
nonpayablefunction redeem(uint128 tick, uint256 shares) returns (uint128)
refinance
nonpayablefunction refinance(bytes encodedLoanReceipt, uint256 principal, uint64 duration, uint256 maxRepayment, uint128[] ticks, bytes options) returns (uint256)
repay
nonpayablefunction repay(bytes encodedLoanReceipt) returns (uint256)
setAdminFee
nonpayablefunction setAdminFee(uint32 rate, address feeShareRecipient, uint16 feeShareSplit)
setRates
nonpayablefunction setRates(uint64[] rates_)
tokenize
nonpayablefunction tokenize(uint128 tick) returns (address)
transfer
nonpayablefunction transfer(address from, address to, uint128 tick, uint256 shares)
withdraw
nonpayablefunction withdraw(uint128 tick, uint128 redemptionId) returns (uint256, uint256)
withdrawAdminFees
nonpayablefunction withdrawAdminFees(address recipient)
events
AdminFeeShareTransferred
event AdminFeeShareTransferred(address indexed feeShareRecipient, uint256 feeShareAmount)
AdminFeesWithdrawn
event AdminFeesWithdrawn(address indexed recipient, uint256 amount)
AdminFeeUpdated
event AdminFeeUpdated(uint32 rate, address indexed feeShareRecipient, uint16 feeShareSplit)
CollateralLiquidated
event CollateralLiquidated(bytes32 indexed loanReceiptHash, uint256 proceeds, uint256 borrowerProceeds)
Deposited
event Deposited(address indexed account, uint128 indexed tick, uint256 amount, uint256 shares)
LoanLiquidated
event LoanLiquidated(bytes32 indexed loanReceiptHash)
LoanOriginated
event LoanOriginated(bytes32 indexed loanReceiptHash, bytes loanReceipt)
LoanRepaid
event LoanRepaid(bytes32 indexed loanReceiptHash, uint256 repayment)
RatesUpdated
event RatesUpdated(uint64[] rates)
Redeemed
event Redeemed(address indexed account, uint128 indexed tick, uint128 indexed redemptionId, uint256 shares)
TokenCreated
event TokenCreated(address indexed instance, address indexed implementation, uint128 indexed tick)
Transferred
event Transferred(address indexed from, address indexed to, uint128 indexed tick, uint256 shares)
Withdrawn
event Withdrawn(address indexed account, uint128 indexed tick, uint128 indexed redemptionId, uint256 shares, uint256 amount)
errors
InactiveLiquidity
error InactiveLiquidity()
InsufficientLiquidity
error InsufficientLiquidity()
InsufficientShares
error InsufficientShares()
InsufficientTickSpacing
error InsufficientTickSpacing()
InvalidBorrowOptions
error InvalidBorrowOptions()
InvalidCaller
error InvalidCaller()
InvalidCollateralFilterParameters
error InvalidCollateralFilterParameters()
InvalidInterestRateModelParameters
error InvalidInterestRateModelParameters()
InvalidLoanReceipt
error InvalidLoanReceipt()
InvalidParameters
error InvalidParameters()
InvalidRedemptionStatus
error InvalidRedemptionStatus()
InvalidTick
error InvalidTick()
LoanNotExpired
error LoanNotExpired()
RepaymentTooHigh
error RepaymentTooHigh()
UnsupportedCollateral
error UnsupportedCollateral(uint256 index)
UnsupportedLoanDuration
error UnsupportedLoanDuration()
creation bytecode
0x6101806040908082523461032b57616306803803809161001f828561039e565b833981019160a08284031261032b57610037826103c1565b916020926100468483016103c1565b946100528484016103c1565b9461005f606085016103c1565b608085015190946001600160401b03919082821161032b57019280601f8501121561032b5783519382851161032f578460051b908851956100a28684018861039e565b8652848087019282010192831161032b5784809101915b8383106103865750505050600191825f55600384511161034d576001600160a01b0394851660e05261010098895261012097885283511561038057846100fe856103d5565b51165b6080528351838111156103795783101561035e578487850151165b60a05283516002811115610372576002101561035e57846060850151165b60c0526101409586528284510361034d576004905f86610159876103d5565b51168951938480926306fdde0360e01b82525afa918215610343575f926102a6575b505f805160206162e683398151915292506101b488519182816101a781830196878151938492016103e2565b810103808452018261039e565b519020036102955780546001600160a01b031916811790556101d5906103d5565b5116916101609283525192615ee29485610404863960805185818161336e015261588d015260a0518581816133a20152615a90015260c0518581816133d70152615a66015260e0518581816108ad01528181613629015281816147be0152614983015251848181610dfe01528181611fc1015281816132f201526134fe015251838181610ddc015281816117ef01528181611feb01526134dc015251828181611b8601528181614aea0152614b6e0152518181816145fc01526153850152f35b8451630e52390960e41b8152600490fd5b9091503d805f833e6102b8818361039e565b810190828183031261032b5780519084821161032b570181601f8201121561032b57805193841161032f578851916102f9601f8601601f191685018461039e565b84835283858301011161032b575f805160206162e683398151915293610324918480850191016103e2565b905f61017b565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b88513d5f823e3d90fd5b8651630e52390960e41b8152600490fd5b634e487b7160e01b5f52603260045260245ffd5b505f61013a565b505f61011c565b5f610101565b8190610391846103c1565b81520191019084906100b9565b601f909101601f19168101906001600160401b0382119082101761032f57604052565b51906001600160a01b038216820361032b57565b80511561035e5760200190565b5f5b8381106103f35750505f910152565b81810151838201526020016103e456fe610120806040526004361015610013575f80fd5b5f60c0525f3560e01c908162a3fecd1461382e5750806301ffc9a7146137be5780630a81c2e7146137a257806312ac2e0a146135df5780631721539b146134085780631b1c7405146133215780631fbdd72d146132db578063202d5c6b146132965780632630c12f146132605780632d896b2a14613241578063382b2da814613145578063439fab9114612d3e57806343f48fbd14612d215780634a41d89d14612cf85780635c4c16a014612c3c578063673d9f5714612ba857806369e7316014612aa45780636b2fa37414612a7a5780636c2bb22d146129ff5780636df7c514146121045780637241088714611dae578063754b377c14611d685780637e27c50f14611bfa57806385dd920614611bb55780638846a31b14611b6f5780638a2ecb4d14611a1c5780638cece527146119f45780638f9f8daa1461199557806392dd4f241461181e57806392e8519f146117d8578063951d4dd91461177d5780639d9705b814611642578063a5615e3b146115d0578063a64eee281461152e578063ac9615f014611472578063ac9650d814611279578063ade0c18a14611035578063b063071514610f1f578063b2016bd414610ef5578063b9c733b614610ce8578063bad9920814610c98578063bc197c8114610c16578063c4a9081514610bc4578063c72c2b8714610af3578063cc0c314a146109de578063d4763de7146108dc578063e22ba7ae14610896578063e4674e0014610878578063e59adeaf1461073f578063e611ac6d146105fb578063e965a8ac14610572578063e9ade90e1461052f578063f23a6e61146104da578063f51a8811146102ad5763f851a4401461027d575f80fd5b346102a75760c0513660031901126102a7576004546040516001600160a01b039091168152602090f35b60c05180fd5b346102a75760803660031901126102a7576102c6613ae1565b6102ce613af7565b6102d6613b0d565b6102de614467565b7311913394071448b52902b6ecac98dab6e6ebf3439160405191637221bad760e11b83526001600484015260018060801b0380809616918260248601521691826044850152604084606481885af49485156104935760c0519460c051966104a0575b509460206103729596610354606435615458565b90604051808099819463284a271360e01b83528789600485016142f3565b03915af490811561049357879560c0519261044d575b506104499561039791166144ec565b93878216936103a78585336154c1565b604080516001600160801b038a1681526020810188905233917f354770e7f865c755f9fd808af7814ca3995ae730bcf14887fb0b6d301b18f3f791a4604080518581526001600160801b039290921660208301529187169133917fd3d9500b000f4b80b8f9aea0e7ce7d135560d7775a63356999a9f3efd4f5edf89190a3600160c0515560405194859416846040919493926060820195825260208201520152565b0390f35b955090506020853d60201161048b575b8161046a60209383613a0d565b810103126102a7576103978761048261044997613cba565b92915095610388565b3d915061045d565b6040513d60c051823e3d90fd5b6020965061037295506104ca9060403d6040116104d3575b6104c28183613a0d565b81019061431d565b96909550610340565b503d6104b8565b346102a75760a03660031901126102a7576104f3613960565b506104fc61394a565b506084356001600160401b0381116102a75761051c903690600401613a7f565b5060405163f23a6e6160e01b8152602090f35b346102a75760c0513660031901126102a7575f80516020615e8d83398151915254604080516001600160a01b038316815260a09290921c61ffff16602083015290f35b346102a75760a03660031901126102a75761058b613960565b61059361394a565b6001600160401b03906044358281116102a7576105b4903690600401613be2565b926064358381116102a7576105cd903690600401613be2565b6084359384116102a7576020946105eb6105f39536906004016138d9565b94909361438f565b604051908152f35b346102a75760203660031901126102a757610614613ae1565b61061c614123565b5061062561433e565b5060405163d59efe0f60e01b8152600660048201526001600160801b03918216602482015261016091828260448173c308ae69d20661ecbee81c2c79fb58b991e2f79c5af49081156104935760c0519283926106b7575b5061068a6040518094613b23565b81511661010083015260406020820151916001600160401b03809316610120850152015116610140820152f35b92509050823d8411610738575b6106ce8184613a0d565b8201828103908482126102a7576106e76060918561415f565b9160ff1901126102a75761072b61014060405194610704866139bb565b6107116101008201613cba565b86526107206101208201613c64565b602087015201613c64565b604084015291908461067c565b503d6106c4565b346102a75760403660031901126102a757610758613ae1565b610760613af7565b610768614467565b60408051637221bad760e11b8152600160048201526001600160801b03938416602482018190529284166044820181905293909291836064817311913394071448b52902b6ecac98dab6e6ebf3435af49384156104935760409460c0519460c05191610850575b50826107db91166144ec565b9283610832575b85516001600160801b03861681526020810185905233907f354770e7f865c755f9fd808af7814ca3995ae730bcf14887fb0b6d301b18f3f790604090a4600160c051558351921682526020820152f35b60015461084b90859033906001600160a01b031661455f565b6107e2565b8395506107db915061086e90873d89116104d3576104c28183613a0d565b95909591506107cf565b346102a75760c0513660031901126102a75760206040516103e88152f35b346102a75760c0513660031901126102a7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102a75760603660031901126102a7576108f5613960565b6108fd613af7565b610905613b0d565b604051631e82c22f60e11b8152600160048201526001600160a01b0390931660248401526001600160801b0391821660448401521660648201526060816084817311913394071448b52902b6ecac98dab6e6ebf3435af49081156104935760c051918291829161099b575b5061097d610449916144ec565b92604051938493846040919493926060820195825260208201520152565b925050506060813d6060116109d6575b816109b860609383613a0d565b810103126102a757805160208201516040909201519161097d610970565b3d91506109ab565b346102a75760403660031901126102a7576109f7613ae1565b602435610a02614467565b610a0b81615458565b604051632edaf34360e21b8152600160048201526001600160801b03808516602483018190529281166044830152602094929392909185816064817311913394071448b52902b6ecac98dab6e6ebf3435af490811561049357849060c05192610ab8575b50610a7b91923361553c565b169182916040519081527f3ac2f453c81511b46084827fa6798fc6c8f7da31176e5be199525d49e59c7675853392a4600160c05155604051908152f35b809250878092503d8311610aec575b610ad18183613a0d565b810103126102a75783610ae6610a7b92613cba565b91610a6f565b503d610ac7565b346102a75760603660031901126102a7576060610b0e613960565b610b16613af7565b610b1e613b0d565b9160018060a01b03168060c0515260209160078352604060c051209360018060801b0380921694855f52845281600160405f2001911690815f5284528160405f205416948360c0515260078552604060c05120815f528552600160405f2001825f52855260405f205460801c9360c0515260078552604060c05120905f528452600160405f2001905f528352600160405f20015416916040519384528301526040820152f35b346102a75760203660031901126102a75760043560c05152600860205260ff604060c0512054166040516005821015610bfe576020918152f35b634e487b7160e01b60c051526021600452602460c051fd5b346102a75760a03660031901126102a757610c2f613960565b50610c3861394a565b506001600160401b036044358181116102a757610c59903690600401613be2565b506064358181116102a757610c72903690600401613be2565b506084359081116102a757610c8b903690600401613a7f565b50602060405160c0518152f35b346102a75760203660031901126102a7576001600160801b03610cb9613ae1565b1660c051525f80516020615e4d833981519152602052602060018060a01b03604060c051205416604051908152f35b346102a75760203660031901126102a7576004356001600160401b0381116102a757610d189036906004016138d9565b610d20614467565b7300ba92936389720e8f342a4a8bc92f6449ec6ab49160405191637615764560e11b8352600160048401528280610d7a5f80516020615e8d833981519152948560248401526060604484015260c051946064840191613e4f565b0381865af49081156104935760c05192839283918291610ec2575b50610d9f90614532565b9360e0810160018060a01b039182825116976101008201988951823b156102a757610e279260405180809581946334e9600560e01b835260c051967f0000000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009160048601613e6f565b03915af4801561049357610ea8575b50906020978380610e6894610e5a8b608084600154169301928484511630916152e1565b511692511690519130615373565b81610e95575b5050505f80516020615e2d83398151915283604051848152a2600160c05155604051908152f35b610ea0925416615323565b838080610e6e565b610eb49092919261398c565b60c0516102a7579088610e36565b915050610ee9919350610d9f92503d8060c051833e610ee18183613a0d565b810190614216565b94929390949390610d95565b346102a75760c0513660031901126102a7576009546040516001600160a01b039091168152602090f35b346102a7576020806003193601126102a757610f39613960565b610f41614467565b60405163cf7152f160e01b8152600160048201526001600160a01b0382811660248301819052939092909182816044817300ba92936389720e8f342a4a8bc92f6449ec6ab45af49081156104935760c05191610fe4575b507fcdcaff67ac16639664e5f9343c9223a1dc9c972ec367b69ae9fc1325c7be547493610fc7610fd3926144ec565b9283916001541661455f565b604051908152a260c0516001815580f35b90508281813d831161102e575b610ffb8183613a0d565b8101031261102a57517fcdcaff67ac16639664e5f9343c9223a1dc9c972ec367b69ae9fc1325c7be5474610f98565b5f80fd5b503d610ff1565b346102a7576020806003193601126102a7576001600160401b03906004358281116102a75761106b6111029136906004016138d9565b60405193916110798561399f565b60c051855260c0518386015260c051604086015260609160c0518387015260c051608087015260c05160a087015260c05160c087015260c05160e087015261010060c051818801526101209160c051838901526101409385858a015285610160809a01526040518098819263088f372160e21b835289600484015260c051946024840191613e4f565b03817300ba92936389720e8f342a4a8bc92f6449ec6ab45af49586156104935760c05196611238575b509695949293919061ffff90604051988998858a5260ff875116868b01528587015160408b01526040870151888b01528787015160808b015260808701519060018060a01b0380921660a08c01528060a08901511660c08c015260c08801511660e08b015260e087015116818a0152850151818901528401511681870152820151936111c46101809586838901526101a08801906138b4565b92015193601f19868403019086015280808551938481520194019260c051905b8382106111f15786860387f35b91849650828661122860019496988498516040908160018060801b0391828151168552826020820151166020860152015116910152565b01960192018695949293916111e4565b919095503d8060c051843e61124d8184613a0d565b82019185818403126102a7578051928984116102a75761ffff936112719201613cce565b95909161112b565b346102a7576020806003193601126102a7576001600160401b036004358181116102a7576112ab903690600401613b9b565b90916040518481018181108382111761145e578060405260c05182526112d084613bcb565b946112de6040519687613a0d565b8486526112ea85613bcb565b601f19018760c0515b82811061144f5750505060c0515b85811061136757604080518981528851818b0181905260c05192600582901b83018101918b8d01918d9085015b82871061133b5785850386f35b909192938280611357600193603f198a820301865288516138b4565b960192019601959291909261132e565b8060051b820135601e19833603018112156102a7578201908135918683116102a757890182360381136102a75785611433916113d18c6001966040519481869284840196873782016113c58c8583019360c051855251938491613893565b01038085520183613a0d565b604051916113de836139bb565b602783527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c8d840152660819985a5b195960ca1b604084015260c0519160c051915190305af461142c615ad3565b9030615d6f565b61143d828a613efe565b526114488189613efe565b5001611301565b606089820183015281016112f3565b634e487b7160e01b5f52604160045260245ffd5b346102a75760c03660031901126102a75761148b613b85565b611493613976565b6001600160401b036084358181116102a7576114b3903690600401613b9b565b929060a4359283116102a7576020946105f3946114d76115269536906004016138d9565b9390946114ed6114e56155b1565b6004356144bb565b9061151c6115126114fe888a614c7b565b98909961150b8282614d47565b5050614dad565b9890973691613a49565b9460643592614e13565b505050614532565b346102a7576020806003193601126102a757611548613ae1565b604051634ad37cf760e11b8152600660048201526001600160801b039091166024820152818160448173c308ae69d20661ecbee81c2c79fb58b991e2f79c5af480156104935760c051906115a1575b6105f391506144ec565b508181813d83116115c9575b6115b78183613a0d565b8101031261102a576105f39051611597565b503d6115ad565b346102a7576020806003193601126102a7576115ea613ae1565b60405163d38fefd760e01b8152600660048201526001600160801b039091166024820152818160448173c308ae69d20661ecbee81c2c79fb58b991e2f79c5af480156104935760c051906115a1576105f391506144ec565b346102a75760803660031901126102a75761165b613960565b61166361394a565b61166b613b0d565b90606435611677614467565b6001600160801b039283165f8181525f80516020615e4d833981519152602052604090205490946001600160a01b039490918516330361176b577311913394071448b52902b6ecac98dab6e6ebf343906116d084615458565b95823b156102a75780604051946384c2dd4560e01b865260016004870152169586602486015216958660448501528760648501521660848301528160a48160c051935af4801561049357611755575b5060207ff9676dae71dbe3bd31576f3f9e20edfc7363381934d96b274adba466b956f79d91604051908152a460c0516001815580f35b61175e9061398c565b60c0516102a7578461171f565b6040516348f5c3ed60e01b8152600490fd5b346102a75760c0513660031901126102a75761044960405161179e816139f2565b601981527815d95a59da1d1959125b9d195c995cdd14985d19535bd9195b603a1b60208201526040519182916020835260208301906138b4565b346102a75760c0513660031901126102a7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102a7576020806003193601126102a757600435906001600160401b038083116102a757366023840112156102a75782600401359061185d82613bcb565b9361186b6040519586613a0d565b8285528385016024819460051b830101913683116102a757602401905b82821061197d5750505061189a614467565b7300ba92936389720e8f342a4a8bc92f6449ec6ab490813b156102a757929060405193849263fb253f6560e01b8452604484016001916001600487015260406024870152885180925260648601969360c051905b83821061196357505050505050818060c0519403915af480156104935761194d575b6040517fe7cf24d723e9605e4df09cbfce51c19b84de5b409ffd526b5fa838ac539c90d990806119408582613a9d565b0390a160c0516001815580f35b6119569061398c565b60c0516102a75781611910565b8551811689529782019789975094820194908401906118ee565b8135848116810361102a578152908501908501611888565b346102a75760c0513660031901126102a7576104496040516119b6816139f2565b601a81527f436f6c6c656374696f6e436f6c6c61746572616c46696c74657200000000000060208201526040519182916020835260208301906138b4565b346102a75760c0513660031901126102a757602063ffffffff60015460a01c16604051908152f35b346102a75760603660031901126102a757611a86611a38613ae1565b602435611a43614467565b6020611a5e611a59611a536155b1565b846144bb565b615458565b611a69604435615458565b60405163284a271360e01b815295869283929087600485016142f3565b03817311913394071448b52902b6ecac98dab6e6ebf3435af49081156104935760c05191611b33575b602093506001600160801b03828116937fd3d9500b000f4b80b8f9aea0e7ce7d135560d7775a63356999a9f3efd4f5edf89190611aed8682336154c1565b600154611b08908590309033906001600160a01b03166152e1565b604080519485526001600160801b0395909516602085015216923392a3600160c05155604051908152f35b90506020833d602011611b67575b81611b4e60209383613a0d565b810103126102a757611b61602093613cba565b90611aaf565b3d9150611b41565b346102a75760c0513660031901126102a7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102a75760c0513660031901126102a757610449604051611bd6816139f2565b60038152620322e360ec1b60208201526040519182916020835260208301906138b4565b346102a75760403660031901126102a757611c13613ae1565b611c1b613af7565b60405163b481e93b60e01b8152600660048201526001600160801b0392831660248201529116604482015260c0518160648173c308ae69d20661ecbee81c2c79fb58b991e2f79c5af49081156104935760c05191611cc6575b506040516020916020820160208352815180915260206040840192019360c0515b828110611ca25784840385f35b9091928261010082611cb76001948a51613b23565b01960191019492919094611c95565b90503d8060c051833e611cd98183613a0d565b8101906020906020818403126102a7578051906001600160401b0382116102a757019082601f830112156102a7578151611d1281613bcb565b93611d206040519586613a0d565b81855260208086019260081b850101938185116102a757602001915b848310611d4e57505050505081611c74565b8361010091611d5d848661415f565b815201920191611d3c565b346102a75760c0513660031901126102a757610449604051611d89816139f2565b6004815263322e313560e01b60208201526040519182916020835260208301906138b4565b346102a75760e03660031901126102a757611dc7613b85565b611dcf613976565b9060a4356001600160401b0381116102a757611def903690600401613b9b565b9260c4356001600160401b0381116102a757611e0f9036906004016138d9565b949092611e1a614467565b611e226155b1565b611e2e906004356144bb565b91611e398786614c7b565b9091611e458988614ce1565b5050611e518988614be2565b9390923690611e5f92613a49565b9060643594611e7095888b89614e13565b919792969093611e7e6155b1565b611e8a906084356144bb565b94611e958589614c7b565b9490916040519b8c958695635174fe2d60e11b8752600487016001905260248701526001600160401b03166044860152600160a01b600190038a169889606487015260643560848701528c60a487015260c486015260e4850152610104840161016090526101648401611f0791614292565b9061ffff166101248401526003198382030161014484015260c05194611f2c92613e4f565b03817300ba92936389720e8f342a4a8bc92f6449ec6ab45af49384156104935760c0519687956120d8575b507300ba92936389720e8f342a4a8bc92f6449ec6ab43b156102a75760405163a46c190760e01b81527ff0e5094ebd597f2042580340ce53d1b15e5b64e0d8be717ecde51dd37c619300600482015260248101939093526064803560448501526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918501919091527f000000000000000000000000000000000000000000000000000000000000000016608484015260c060a4840181905251918391829161202e9160c484019190613e4f565b03817300ba92936389720e8f342a4a8bc92f6449ec6ab45af48015610493576120bc575b60206120ae85855f80516020615e0d8339815191526120a68a6120796064358a3033615373565b600154612094906004359033906001600160a01b031661455f565b604051918291888352888301906138b4565b0390a2614532565b600160c05155604051908152f35b6120c9909392919361398c565b60c0516102a757909184612052565b9094506120fa9196503d8060c051833e6120f28183613a0d565b810190614268565b9590959387611f57565b346102a75760c03660031901126102a7576004356001600160401b0381116102a7576121349036906004016138d9565b604435906001600160401b038216820361102a576084356001600160401b0381116102a757612167903690600401613b9b565b6080529160a435916001600160401b0383116102a75761218e6121f09336906004016138d9565b919095612199614467565b6121ac6121a46155b1565b6024356144bb565b6101005260405180958192637615764560e11b8352600160048401525f80516020615e8d83398151915260248401526060604484015260c051946064840191613e4f565b03817300ba92936389720e8f342a4a8bc92f6449ec6ab45af480156104935760c0519384928392909183916129d4575b5061222a90614532565b61225960018060a01b0360e08801511698612251610100890151946101408a015192614be2565b94909a61587d565b979250939099612267614083565b946001600160401b0361227987613ef1565b51166001600160401b038516116129c2578551805f1981011161246b575f190195865b612987575b50916122ca916122d89360018060a01b03600954169d6001549e8f60018060a01b03169061438f565b6122d26155b1565b906144bb565b966122e4608051613bcb565b946122f26040519687613a0d565b6080518652601f19612305608051613bcb565b015f5b8181106129705750505f935f80955b60805187108080612963575b156124d357156124bf57600587901b8d01356001600160801b038116900361102a578b61236a6123558f9383906157ad565b9060e0959395525092938a60051b01356157ad565b509092919380851061248d5784149182806124b6575b61248d57826124ac575b508161249f575b5061248d57881061248d5761244e918d8c9260018060801b038a60051b830135165f526123d1836123cc6020966006885260405f20946144bb565b6141fc565b6001909101546001600160801b03168082101561248657505b6123f783610100516141fc565b8082101561247f57505b60018060801b0316809360405192612418846139bb565b60058c901b01356001600160801b031683528201525f604082015261243d898c613efe565b52612448888b613efe565b50614209565b978560051b8c0135955f19811461246b5760010195989098612317565b634e487b7160e01b5f52601160045260245ffd5b9050612401565b90506123ea565b6040516333a3bdff60e21b8152600490fd5b905060e05110155f612391565b831491505f61238a565b50808410612380565b634e487b7160e01b5f52603260045260245ffd5b50508c889495878b93610100511161295157602081116129515761ffff8082116128fd576124ff613f7b565b61250a828416613ebf565b905f60a0525f905f905b848616821061282457505061254f61271061254763ffffffff61253c6101005160a0516141fc565b9960a01c16896144bb565b0480976141fc565b915f91835b8c86881685106127b95750505050509161262291836001600160401b039594612781575b5061260460018060a01b0360e08d0151169a6101008d0151978d6101406125a86125a06155b1565b6064356144bb565b910151996040519e8f9a8b9a635174fe2d60e11b8c52600160048d01526101005160248d01521660448b015260648a0152608489015260a05160a489015260c488015260e4870152610160610104870152610164860190614292565b91166101248401528281036003190161014484015260c051946138b4565b03817300ba92936389720e8f342a4a8bc92f6449ec6ab45af49485156104935760c0519460c05196612733575b506020836126d195935f80516020615e2d833981519152935f80516020615e0d8339815191529896602435105f14612709576001546080909101516126af916001600160a01b0391821691166126a7602435866141fc565b9130916152e1565b806126e1575b50604051908152a26040519182916020835260208301906138b4565b0390a260206120ae60a051614532565b5f80516020615e8d8339815191525461270391906001600160a01b0316615323565b886126b5565b5060015461272e906001600160a01b0316612726846024356141fc565b90339061455f565b6126af565b5f80516020615e2d8339815191529196505f80516020615e0d83398151915295506126d19492936127716020923d8060c051833e6120f28183613a0d565b989097509395509392915061264f565b61278a90615458565b60406127958c613ef1565b5101805190916001600160801b03916127b091908316615aba565b1690528b612578565b61281a9085966127d9856127d288996001979899613efe565b5187615cee565b91848060801b03604061280f8b6128098460206127f68489613efe565b5101511661280389615458565b90615aba565b94613efe565b5101911690526141fc565b9401929190612554565b9092916001600160801b03908c90612848836128408885613efe565b51511661572c565b5094915050602061286988838361285f8389613efe565b5101511695613efe565b51015116926001600160401b03612883818c169287613efe565b511602806001600160401b0381160361246b576128bc6128f4936128b66001966001600160401b036128d8951690615b75565b90614209565b6128c88160a051614209565b60a052610100519060a051615cee565b6128e28787613efe565b526128ed8686613efe565b5190614209565b92930190612514565b60405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201526536206269747360d01b6064820152608490fd5b60405163bb55fd2760e01b8152600490fd5b5061010051831415612323565b60209061297b61433e565b82828b01015201612308565b956001600160401b0361299a8289613efe565b51166001600160401b03861611156129bc57801561246b575f1901958661229c565b956122a1565b60405163b572bb8560e01b8152600490fd5b9195505061222a92506129f391503d8060c051833e610ee18183613a0d565b90959193909290612220565b346102a75760403660031901126102a7576040612a1a613960565b612a22613af7565b9060018060a01b0316908160c0515260076020528260c051209060018060801b0380911691825f52602052835f2054169160c0515260076020528260c05120905f52602052815f205460801c82519182526020820152f35b346102a75760c0513660031901126102a7576001546040516001600160a01b039091168152602090f35b346102a75760c0513660031901126102a7576040518081600a54808352602080930190600a60c05152602060c051209360c051905b828210612b8e5784612aed81860382613a0d565b80519060019160010180600111612b7157612b088391613ebf565b60095490926001600160a01b03918216612b2185613ef1565b5260c051925b612b3a575b604051806104498682613906565b8051831015612b895781612b4e8483613efe565b51169285810190818111612b71578694612b69869388613efe565b520192612b27565b634e487b7160e01b60c051526011600452602460c051fd5b612b2c565b855484526001958601958795509381019390910190612ad9565b346102a75760203660031901126102a757612bc1613ae1565b6002545f19808201918211612b7157600354908101908111612b7157612be68361572c565b9392949091851561248d571161248d571161248d576002811015610bfe576001149081612c30575b5061248d57612c1e602091614a51565b6040516001600160a01b039091168152f35b61271091501182612c0e565b346102a75760203660031901126102a757612c55613ae1565b612c5d614123565b506040516337fe8b4360e11b8152600660048201526001600160801b03909116602482015261010090818160448173c308ae69d20661ecbee81c2c79fb58b991e2f79c5af49081156104935760c05191612cc2575b50612cc06040518092613b23565bf35b9050813d8311612cf1575b612cd78183613a0d565b810182828203126102a757612ceb9161415f565b82612cb2565b503d612ccd565b346102a75760c0513660031901126102a757610449612d15614083565b60405191829182613a9d565b346102a75760c0513660031901126102a757610449612d15613f7b565b346102a7576020806003193601126102a7576001600160401b03906004358281116102a757612d71903690600401613a7f565b600180549093906001600160a01b0390811661310a57825183019060a0848684019303126102a757848401518381116102a75784019082603f830112156102a7578582015191612dc083613bcb565b92612dce6040519485613a0d565b80845260408885019160051b830101918583116102a7576040899101915b8383106130f25750505050612e0360408601613c50565b94612e1060608201613c50565b9060808101518681116102a7578589612e2b92840101613f12565b9460a0820151908782116102a75789612e479286940101613f12565b9616918351156130e0578881612e5c86613ef1565b51169460018060a01b03199586600954161760095581805b6130b3575b5050505f80516020615e6d83398151915291168382541617905560405163313ce56760e01b81528681600481855afa9081156104935760c05191613079575b5060ff6012911611612f975781875416178655339060045416176004556008815111612f975760c05190855b612fdb575b50506008825111612f975760c05191845b612f2b575b60c08051805260068552516040812060020180546001600160801b03166001600160801b031917905580f35b8051831015612fd65782151580612fa9575b612f975781612f4c8483613efe565b5116926003908154600160401b81101561145e578781018084558110156124bf57879586935f52875f208260021c01918660c084549260061b1692831b921b19161790550192612efa565b604051630e52390960e41b8152600490fd5b5081612fb58483613efe565b51165f198401848111612b7157612fcd849184613efe565b51161015612f3d565b612eff565b80518210156130745781151580613047575b612f975782612ffc8383613efe565b5116916002908154600160401b81101561145e578881018084558110156124bf5788948386945f52828a5f20911c01918760c084549260061b1692831b921b19161790550191612ee4565b50826130538383613efe565b51165f198301838111612b715761306b859184613efe565b51161115612fed565b612ee9565b90508681813d83116130ac575b6130908183613a0d565b810103126102a75760ff6130a5601292613c42565b9150612eb8565b503d613086565b81518110156130db57806130d3856130cc869486613efe565b5116615b02565b500182612e74565b612e79565b60405163034b421560e01b8152600490fd5b81906130fd84613c50565b8152019101908890612dec565b60405162461bcd60e51b8152600481018590526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b346102a75760603660031901126102a75760043563ffffffff81168091036102a75761316f61394a565b9060443561ffff81168091036102a7577300ba92936389720e8f342a4a8bc92f6449ec6ab492833b156102a757604051906305214bf960e01b8252600160048301525f80516020615e8d833981519152602483015283604483015260018060a01b0316938460648301528260848301528160a48160c051935af480156104935761322b575b507ffb0382ab6603dee748f24cc872988737092c1b3993d59f155fbb1ff4ec3a28799160409182519182526020820152a260c05180f35b6132349061398c565b60c0516102a757836131f4565b346102a75760c0513660031901126102a75760206105f36005546144ec565b346102a75760c0513660031901126102a7575f80516020615e6d833981519152546040516001600160a01b039091168152602090f35b346102a75760c0513660031901126102a7576104496040516132b7816139f2565b60038152620312e360ec1b60208201526040519182916020835260208301906138b4565b346102a75760c0513660031901126102a7576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102a75760c0513660031901126102a757604051608081018181106001600160401b0382111761145e5760405260038152606036602083013761336481613ef1565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169091528151909190600110156124bf57817f00000000000000000000000000000000000000000000000000000000000000001660408201528051600210156124bf57610449917f000000000000000000000000000000000000000000000000000000000000000016606082015260405191829182613906565b3461102a57602036600319011261102a576001600160401b0360043581811161102a576134399036906004016138d9565b613441614467565b7300ba92936389720e8f342a4a8bc92f6449ec6ab491604051936341c9b3fd60e01b855260016004860152604060248601525f8580613484604482018787613e4f565b0381875af4948515613592575f915f9661359d575b505060e08101805161010083018051909392916001600160a01b039190821690883b1561102a576040516334e9600560e01b8152985f928a9283918291613527917f0000000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009160048601613e6f565b03915af49182156135925761354d976101409361357f575b5051169251910151916145e9565b7f3e24a18afdf4b207766359f50e1aed359e8324d352510d7c8c86402b23101a5160c05160c051a260c0516001815580f35b6135889061398c565b5f60c0528961353f565b6040513d5f823e3d90fd5b915094503d805f873e6135b08187613a0d565b85019060408683031261102a57855190811161102a576020916135d4918701613cce565b940151938580613499565b3461102a57604036600319011261102a576001600160401b0360043581811161102a576136109036906004016138d9565b90916024359161361e614467565b6001600160a01b03907f00000000000000000000000000000000000000000000000000000000000000008216330361176b57613690945f916136676136616155b1565b876144bb565b6040516256e44360e41b8152600160048201526060602482015297889384936064850191613e4f565b90604483015203817300ba92936389720e8f342a4a8bc92f6449ec6ab45af4938415613592575f905f935f9661372b575b5050917f745f5ca6db42e779578fe4ae71bafbe1513d6daf820184b16204080eebedd34c93916136f26040946144ec565b80928161370e575b50505082519182526020820152a260015f55005b8260806137239460015416920151169061455f565b8581816136fa565b949293509450503d805f863e6137418186613a0d565b84019160608584031261102a57845190602086015194851161102a576136f2604061379081967f745f5ca6db42e779578fe4ae71bafbe1513d6daf820184b16204080eebedd34c988a01613cce565b970151969395509293509182906136c1565b3461102a575f36600319011261102a5760206040516101f48152f35b3461102a57602036600319011261102a5760043563ffffffff60e01b811680910361102a57602090630271189760e51b8114908115613803575b506040519015158152f35b630956170560e11b81149150811561381d575b50826137f8565b6301ffc9a760e01b14905082613816565b3461102a575f36600319011261102a578061384b610449926139bb565b602181527f57656967687465645261746545524331313535436f6c6c656374696f6e506f6f6020820152601b60fa1b60408201526040519182916020835260208301906138b4565b5f5b8381106138a45750505f910152565b8181015183820152602001613895565b906020916138cd81518092818552858086019101613893565b601f01601f1916010190565b9181601f8401121561102a578235916001600160401b03831161102a576020838186019501011161102a57565b60209060206040818301928281528551809452019301915f5b82811061392d575050505090565b83516001600160a01b03168552938101939281019260010161391f565b602435906001600160a01b038216820361102a57565b600435906001600160a01b038216820361102a57565b604435906001600160a01b038216820361102a57565b6001600160401b03811161145e57604052565b61018081019081106001600160401b0382111761145e57604052565b606081019081106001600160401b0382111761145e57604052565b61010081019081106001600160401b0382111761145e57604052565b604081019081106001600160401b0382111761145e57604052565b90601f801991011681019081106001600160401b0382111761145e57604052565b6001600160401b03811161145e57601f01601f191660200190565b929192613a5582613a2e565b91613a636040519384613a0d565b82948184528183011161102a578281602093845f960137010152565b9080601f8301121561102a57816020613a9a93359101613a49565b90565b60209060206040818301928281528551809452019301915f5b828110613ac4575050505090565b83516001600160401b031685529381019392810192600101613ab6565b600435906001600160801b038216820361102a57565b602435906001600160801b038216820361102a57565b604435906001600160801b038216820361102a57565b60e0908160018060801b03918281511685528260208201511660208601528260408201511660408601528260608201511660608601528260808201511660808601528260a08201511660a08601528260c08201511660c0860152015116910152565b602435906001600160401b038216820361102a57565b9181601f8401121561102a578235916001600160401b03831161102a576020808501948460051b01011161102a57565b6001600160401b03811161145e5760051b60200190565b9080601f8301121561102a576020908235613bfc81613bcb565b93613c0a6040519586613a0d565b81855260208086019260051b82010192831161102a57602001905b828210613c33575050505090565b81358152908301908301613c25565b519060ff8216820361102a57565b51906001600160a01b038216820361102a57565b51906001600160401b038216820361102a57565b81601f8201121561102a578051613c8e81613a2e565b92613c9c6040519485613a0d565b8184526020828401011161102a57613a9a9160208085019101613893565b51906001600160801b038216820361102a57565b91906101808382031261102a576040928351613ce98161399f565b8094613cf483613c42565b82526020908184015182840152808401518184015260609160608501516060850152613d2260808601613c50565b6080850152613d3360a08601613c64565b60a0850152613d4460c08601613c64565b60c0850152613d5560e08601613c50565b60e08501526101008086015190850152610120808601519061ffff8216820361102a5785015261014080860151906001600160401b039182811161102a5788613d9f918901613c78565b90860152610160958681015191821161102a57019186601f8401121561102a57825190613dcb82613bcb565b97613dd88251998a613a0d565b828952836060818b0194028601019481861161102a578401925b858410613e0457505050505050500152565b868483031261102a578487918451613e1b816139bb565b613e2487613cba565b8152613e31838801613cba565b83820152613e40868801613cba565b86820152815201930192613df2565b908060209392818452848401375f828201840152601f01601f1916010190565b7ff0e5094ebd597f2042580340ce53d1b15e5b64e0d8be717ecde51dd37c61930081526001600160a01b039182166020820152604081019290925291821660608201529116608082015260a00190565b90613ec982613bcb565b613ed66040519182613a0d565b8281528092613ee7601f1991613bcb565b0190602036910137565b8051156124bf5760200190565b80518210156124bf5760209160051b010190565b9080601f8301121561102a57815190602091613f2d81613bcb565b93613f3b6040519586613a0d565b81855260208086019260051b82010192831161102a57602001905b828210613f64575050505090565b838091613f7084613c64565b815201910190613f56565b6040906040519182600391600354928383526020918284019160035f52835f20905f925b878285011061403b57505094613fdb95549184828210614022575b828210614006575b828210613fea575b5010613fdd575b5090500383613a0d565b565b60c01c815201805f613fd1565b600191946001600160401b038560801c16815201930184613fca565b600191946001600160401b038560401c16815201930184613fc2565b600191946001600160401b038516815201930184613fba565b82546001600160401b03808216875281831c811687890152608082811c9091168784015260c09190911c60608701528a97509094019360049390930192600190920191613f9f565b6040906040519182600254918282526020908183019060025f52825f20945f915b8160038401106140db5750613fdb955491848282106140225782821061400657828210613fea575010613fdd575090500383613a0d565b939594509160016004918654906001600160401b039182811682528281891c168a83015260809281841c168883015260c01c60608201520195019101909492918794926140a4565b60405190614130826139d6565b5f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b91908261010091031261102a57604051614178816139d6565b60e06141f781839561418981613cba565b855261419760208201613cba565b60208601526141a860408201613cba565b60408601526141b960608201613cba565b60608601526141ca60808201613cba565b60808601526141db60a08201613cba565b60a08601526141ec60c08201613cba565b60c086015201613cba565b910152565b9190820391821161246b57565b9190820180921161246b57565b60808183031261102a5780519260208201519260408301516001600160401b03811161102a5760609161424a918501613cce565b92015190565b9093929384831161102a57841161102a578101920390565b919060408382031261102a5782516001600160401b03811161102a5760209161424a918501613c78565b9081518082526020808093019301915f5b8281106142b1575050505090565b90919293826060826142e760019489516040908160018060801b0391828151168552826020820151166020860152015116910152565b019501939291016142a3565b600181526001600160801b0391821660208201529181166040830152909116606082015260800190565b919082604091031261102a57613a9a602061433784613cba565b9301613cba565b6040519061434b826139bb565b5f6040838281528260208201520152565b9081518082526020808093019301915f5b82811061437b575050505090565b83518552938101939281019260010161436d565b5f80516020615e6d833981519152546001600160a01b03969592949087169390841561445b5760209688946144086143f5614417956040519c8d9b8c9a8b9a633a596a2b60e21b8c521660048b015216602489015260a0604489015260a488019061435c565b600319948588830301606489015261435c565b92858403016084860152613e4f565b03915afa908115613592575f9161442c575090565b90506020813d602011614453575b8161444760209383613a0d565b8101031261102a575190565b3d915061443a565b50505050505050505f90565b60025f54146144765760025f55565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b8181029291811591840414171561246b57565b81156144d8570490565b634e487b7160e01b5f52601260045260245ffd5b6144f46155b1565b80156144d85780820615801561452a575b1561451357613a9a916144ce565b61451c916144ce565b6001810180911161246b5790565b506001614505565b61453a6155b1565b80156144d857808206158015614558571561451357613a9a916144ce565b505f614505565b60405163a9059cbb60e01b60208201526001600160a01b0390921660248301526044820192909252613fdb916145a282606481015b03601f198101845283613a0d565b61563f565b9492613a9a9694916145db9360018060a01b038092168852166020870152604086015260a0606086015260a08501906138b4565b926080818503910152613e4f565b6001600160a01b038082169594929390927f0000000000000000000000000000000000000000000000000000000000000000848116939092908885146149765750505f9560409485519661463c886139f2565b60018852602036818a013761465088613ef1565b52855161465c816139f2565b6001815260203681830137600161467282613ef1565b52893b1561102a57865163a22cb46560e01b80825260048201889052600160248301529a905f8160448183865af1801561496c57614953575b50899a60206146e38b9c8b9c6146f59c51809d81948293634b93bab560e11b845289600485015260606024850152606484019061435c565b8281036003190160448401528961435c565b03918c5af19889156148f9578c9961491f575b50813b1561491b5789519081528760048201528b60248201528b8160448183865af180156148f957908c91614903575b5050885163057ff68760e51b81529960208b6004818b5afa9a8b156148f9578c9b6148c5575b505f198b019a8b116148b157906147af61479c6147bb94938c519d8e9460208601528d8501526001606085015260a0608085015260c084019061435c565b601f1993848483030160a085015261435c565b039081018a5289613a0d565b807f00000000000000000000000000000000000000000000000000000000000000001694803b156148ad57875163095ea7b360e01b81526001600160a01b038716600482015260248101889052908a908290604490829084905af180156148a357908a9161488f575b50506001541691843b1561488b579161485a899695949392879389519a8b9889978896630a61afeb60e01b8852600488016145a7565b03925af1908115614882575061486e575050565b614878829161398c565b61487f5750565b80fd5b513d84823e3d90fd5b8880fd5b6148989061398c565b61488b57885f614824565b88513d8c823e3d90fd5b8980fd5b634e487b7160e01b8c52601160045260248cfd5b909a506020813d6020116148f1575b816148e160209383613a0d565b8101031261102a5751995f61475e565b3d91506148d4565b8a513d8e823e3d90fd5b61490c9061398c565b614917578a5f614738565b8a80fd5b8b80fd5b9098506020813d60201161494b575b8161493b60209383613a0d565b8101031261102a5751975f614708565b3d915061492e565b6146f598999a506149639061398c565b5f9998976146ab565b89513d5f823e3d90fd5b92509493809350979695977f00000000000000000000000000000000000000000000000000000000000000001692863b1561102a5760405163095ea7b360e01b81526001600160a01b0385166004820152602481018690525f9788908290604490829084905af1801561359257614a3e575b506001541690833b15614a3a5790614a1d87989988979893604051998a9889978896630a61afeb60e01b8852600488016145a7565b03925af18015614a2f5761486e575050565b6040513d84823e3d90fd5b8680fd5b614a4991975061398c565b5f955f6149e8565b6001600160801b03165f8181525f80516020615e4d83398151915260208181526040909220549192916001600160a01b039190821680614b695750604051636afdaf8360e01b81526004810184905293808560248173bf121277ebc5d37a51ff71ce4fee3f41f1e87d545af4948515613592575f95614b32575b50835f525260405f2090808416918260018060a01b03198254161790557f000000000000000000000000000000000000000000000000000000000000000016907f8becc264fc02f46cc9b9aac9c208f0b4b4289153fbec5e87a5562c96d0dcb3845f80a490565b9080955081813d8311614b62575b614b4a8183613a0d565b8101031261102a57614b5b90613c50565b935f614acb565b503d614b40565b9350507f000000000000000000000000000000000000000000000000000000000000000016827f8becc264fc02f46cc9b9aac9c208f0b4b4289153fbec5e87a5562c96d0dcb3845f80a490565b6001600160f01b03199035818116939260028110614bd357505050565b60020360031b82901b16169150565b905f5b818110614bf3575050905f90565b600281019081811161246b5760049081810191828411614c685750614c25614c1f846005938789614250565b90614bb6565b614c36614c1f8460f096888a614250565b841c931c14614c4e5790614c4991614209565b614be5565b9091614c5e614c64949383614209565b92614250565b9091565b601190634e487b7160e01b5f525260245ffd5b905f5b818110614c8c575050905f90565b600281019081811161246b5760049081810191828411614c685750614cb8614c1f846001938789614250565b614cc9614c1f8460f096888a614250565b841c931c14614c4e5790614cdc91614209565b614c7e565b905f5b818110614cf2575050905f90565b6002908181019182821161246b5760049182810192838511614c685750614c1f84614d1e928789614250565b614d2f614c1f8460f096888a614250565b841c931c14614c4e5790614d4291614209565b614ce4565b905f5b818110614d58575050905f90565b6002908181019182821161246b5760049182810192838511614c685750614c1f84614d84928789614250565b614d95614c1f8460f096888a614250565b841c931c14614c4e5790614da891614209565b614d4a565b905f5b818110614dbe575050905f90565b600281019081811161246b5760049081810191828411614c685750614dea614c1f846005938789614250565b614dfb614c1f8460f096888a614250565b841c931c14614c4e5790614e0e91614209565b614db0565b959092614e23929997989961587d565b9297919690995f9960018060a01b03600954169a5b8951811015614e9d57614e4b818b613efe565b506001600160a01b038b168c8114908115614e87575b5015614e6f57600101614e38565b60249060405190630d897fc560e11b82526004820152fd5b90505f52600b60205260405f205415155f614e61565b50919599949850919599969296614eb2614083565b936001600160401b03614ec486613ef1565b51166001600160401b038b16116129c25784515f19810190811161246b5794855b6152a6575b5091614f0893916122ca936001549760018060a01b0389169061438f565b91614f1289613bcb565b96614f206040519889613a0d565b898852601f19614f2f8b613bcb565b015f5b81811061528f5750505f915f80935b8c85108080615285575b156150af57156124bf57600585901b8c01356001600160801b038116900361102a57614f8d8c614f7c8980946157ad565b5093919490928960051b01356157ad565b509093919480861061248d5785149283806150a6575b61248d578361509c575b5082615091575b505061248d57861061248d57818c61505a878e8c8f86600698614ffb6150659b6123cc6150199560018060801b038a60051b8d0135165f5260209d8e5260405f20946144bb565b6001909101546001600160801b0316808210156150895750926141fc565b8082101561508257505b60018060801b031680966040519561503a876139bb565b600585901b01356001600160801b031686528501525f6040850152613efe565b52612448868d613efe565b968360051b8b0135935f19811461246b5760010193979097614f41565b9050615023565b9050926141fc565b111590505f80614fb4565b841492505f614fad565b50808510614fa3565b505093509950939697509394508591501061295157602091602081116129515761ffff908181116128fd5792919216936150e7613f7b565b906150f186613ebf565b905f945f935f915b8a8a84106151ce575050505061271061512863ffffffff61511d61513094896141fc565b9b60a01c168b6144bb565b0480996141fc565b925f92845b8885106151865750505050508061514e575b5093929190565b61515790615458565b604061516286613ef1565b5101805190916001600160801b039161517d91908316615aba565b1690525f615147565b90919293946151c36001916151a68561519f8a8a613efe565b5186615cee565b908c848060801b03604061280f8c612809848d6127f68489613efe565b950193929190615135565b92969495919290916001600160801b03906151ed826128408b86613efe565b50939150508761520d8b8383615203838a613efe565b5101511696613efe565b51015116916001600160401b036152278187169288613efe565b5116026001600160401b03811690810361246b578661525c6152556001966128b66152639561527898615b75565b809d614209565b9b8c615cee565b61526d8a8a613efe565b526128ed8989613efe565b96019190959493956150f9565b5088831415614f4b565b60209061529a61433e565b82828d01015201614f32565b946001600160401b036152b98288613efe565b51166001600160401b038c1611156152db57801561246b575f19019485614ee5565b94614eea565b6040516323b872dd60e01b60208201526001600160a01b0392831660248201529290911660448301526064820192909252613fdb916145a28260848101614594565b9060206153507fdd2b88bff718d8dd9bcb63ad883973630ea0d31f2dd4ca01f17104994e0f8f86926144ec565b9260018060a01b03906153688582846001541661455f565b6040519485521692a2565b909290916001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000811682036154025750803b1561102a576040516323b872dd60e01b81526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af18015613592576153f95750565b613fdb9061398c565b9192813b1561102a575f60c4928195856040519889978896637921219560e11b885216600487015216602485015260448401526001606484015260a060848401528160a48401525af18015613592576153f95750565b6001600160801b039081811161546c571690565b60405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608490fd5b6001600160801b039091165f9081525f80516020615e4d83398151915260205260409020546001600160a01b03908116801561553657803b1561102a575f92836064926040519687958694635d5b6e6560e01b865284600487015216602485015260448401525af18015613592576153f95750565b50505050565b6001600160801b039091165f9081525f80516020615e4d83398151915260205260409020546001600160a01b03908116801561553657803b1561102a575f92836064926040519687958694635d5b6e6560e01b865216600485015282602485015260448401525af18015613592576153f95750565b60015460405163313ce56760e01b815290602090829060049082906001600160a01b03165afa8015613592575f90615605575b60ff91501660120360ff811161246b5760ff16604d811161246b57600a0a90565b506020813d602011615637575b8161561f60209383613a0d565b8101031261102a5761563260ff91613c42565b6155e4565b3d9150615612565b60405161569c916001600160a01b0316615658826139f2565b5f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1615696615ad3565b91615d6f565b805182811591821561570c575b50509050156156b55750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b838092935001031261102a57810151801515810361102a5780825f6156a9565b6007600582901c811691600281901c909116906001600160781b03600882901c16906002600160801b03196001600160801b0382160161579b57505f905b816002811015615787576001036157845761578490615c25565b93565b634e487b7160e01b5f52602160045260245ffd5b6003166002811015615787579061576a565b6007600582901c811692600283901c909116916001600160781b03600882901c16906002600160801b03196001600160801b0382160161580a57505f915b82600281101561578757600103615806579061578491615c87565b5093565b600316600281101561578757916157eb565b9080601f8301121561102a5781519060209161583781613bcb565b936158456040519586613a0d565b81855260208086019260051b82010192831161102a57602001905b82821061586e575050505090565b81518152908301908301615860565b90916001600160a01b03808316907f000000000000000000000000000000000000000000000000000000000000000081168214908115615a8e575b8115615a62575b5061591257505091604051916158d4836139f2565b60018352602036818501376158e883613ef1565b52604051906158f6826139f2565b6001825260203681840137600161590c83613ef1565b52600190565b92915092604091825194632ab54d1560e01b86528160048701528360248701525f868061594260448201856138b4565b0381885afa948515615a58575f925f975f976159df575b5091602091615989938751809581948293631ad854b160e31b845260048401528a602484015260448301906138b4565b03915afa9384156159d657505f936159a2575093929190565b9092506020813d6020116159ce575b816159be60209383613a0d565b8101031261102a5751915f615147565b3d91506159b1565b513d5f823e3d90fd5b935095509095503d805f843e6159f58184613a0d565b82019060608383031261102a57615a0b83613c50565b966020840151916001600160401b039283811161102a5784615a2e91870161581c565b948781015193841161102a5761598994602094615a4b920161581c565b9894989791935091615959565b84513d5f823e3d90fd5b90507f00000000000000000000000000000000000000000000000000000000000000001681145f6158bf565b7f00000000000000000000000000000000000000000000000000000000000000008116831491506158b8565b6001600160801b03918216908216019190821161246b57565b3d15615afd573d90615ae482613a2e565b91615af26040519384613a0d565b82523d5f602084013e565b606090565b805f52600b60205260405f2054155f14615b7057600a54600160401b81101561145e576001810180600a558110156124bf577fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801819055600a545f918252600b602052604090912055600190565b505f90565b905f1981830981830291828083109203918083039214615c1457670de0b6b3a76400009082821115615bd7577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac10669940990828211900360ee1b910360121c170290565b60405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606490fd5b5050670de0b6b3a764000091500490565b6127105f1982820982820291828083109203918083039214615c805781811115615bd7577fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e9193810990828211900360fc1b910360041c170290565b9250500490565b905f1981830981830291828083109203918083039214615ce3576127109082821115615bd7577fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e91940990828211900360fc1b910360041c170290565b505061271091500490565b915f198284099282810292838086109503948086039514615d625784831115615bd75782910960018219018216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b505090613a9a92506144ce565b91929015615dd15750815115615d83575090565b3b15615d8c5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015615de45750805190602001fd5b60405162461bcd60e51b815260206004820152908190615e089060248301906138b4565b0390fdfe75cb20cd5ea276edc48a5c9c85e53729cc90bdd6776029b284aa2eb60a334ce21d7f9b884cc43b9a5c67bd7c6f6fb5ddb8cb3eb3994e934e8448d7bf4a4a25c9c61d9ab4916a5eab6b572dc8707662b99e55e17ecdc61af8ff79465ad64ded005cc3a0ef4fb602d81e01a142e768b704108e3b2e96852939d75763e011a39b001004a5c92d0898c7512a97f012b3e1b4d5140998c1fd26690d21ba53eace8b00a264697066735822122083a71e6c86bbf4d0318b74c54075706ec828d7f4d3c355716c1a9697b47c804664736f6c634300081900333d776f13c3dc0c3aa71d01481834230264bee1afe680679166b9f47d9c96f942000000000000000000000000ceb5856c525bbb654eea75a8852a0f51073c4a5800000000000000000000000000000000000076a84fef008cdabe6409d2fe638b00000000000000000000000000000000000000447e69651d841bd8d104bed4930000000000000000000000008fbd56c755d1a165bb47c1ba9e6d6ce199cad32600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e8b7a46855df35470ef00d1f71a8ad2178d21893