0 txs
16 calls
constructor
constructor(address _pool, address _factory, address _pluginFactory)
functions
ALGEBRA_BASE_PLUGIN_MANAGER
viewfunction ALGEBRA_BASE_PLUGIN_MANAGER() view returns (bytes32)
brevisRequest
viewfunction brevisRequest() view returns (address)
defaultPluginConfig
viewfunction defaultPluginConfig() view returns (uint8)
discountIsActive
viewfunction discountIsActive() view returns (bool)
feeConfig
viewfunction feeConfig() view returns (uint16 alpha1, uint16 alpha2, uint32 beta1, uint32 beta2, uint16 gamma1, uint16 gamma2, uint16 baseFee)
feeDiscount
viewfunction feeDiscount(address) view returns (uint16)
feeType
viewfunction feeType() view returns (bool)
getCurrentFee
viewfunction getCurrentFee() view returns (uint16)
getFeeWithDiscount
viewfunction getFeeWithDiscount(uint16 fee, address usr) view returns (uint16)
getPool
viewfunction getPool() view returns (address)
getPoolState
viewfunction getPoolState() view returns (uint160 price, int24 tick, uint16 fee, uint8 pluginConfig)
getSingleTimepoint
viewfunction getSingleTimepoint(uint32 secondsAgo) view returns (int56 tickCumulative, uint88 volatilityCumulative)
getTimepoints
viewfunction getTimepoints(uint32[] secondsAgos) view returns (int56[] tickCumulatives, uint88[] volatilityCumulatives)
handlePluginFee
viewfunction handlePluginFee(uint256, uint256) view returns (bytes4)
incentive
viewfunction incentive() view returns (address)
isIncentiveConnected
viewfunction isIncentiveConnected(address targetIncentive) view returns (bool)
isInitialized
viewfunction isInitialized() view returns (bool)
lastTimepointTimestamp
viewfunction lastTimepointTimestamp() view returns (uint32)
MAX_DISCOUNT
viewfunction MAX_DISCOUNT() view returns (uint16)
opChallengeWindow
viewfunction opChallengeWindow() view returns (uint256)
paused
viewfunction paused() view returns (bool)
pool
viewfunction pool() view returns (address)
s_baseFee
viewfunction s_baseFee() view returns (uint16)
s_feeFactors
viewfunction s_feeFactors() view returns (uint128 zeroToOneFeeFactor, uint128 oneToZeroFeeFactor)
s_priceChangeFactor
viewfunction s_priceChangeFactor() view returns (uint16)
timepointIndex
viewfunction timepointIndex() view returns (uint16)
timepoints
viewfunction timepoints(uint256) view returns (bool initialized, uint32 blockTimestamp, int56 tickCumulative, uint88 volatilityCumulative, int24 tick, int24 averageTick, uint16 windowStartIndex)
vkHash
viewfunction vkHash() view returns (bytes32)
afterFlash
nonpayablefunction afterFlash(address, address, uint256, uint256, uint256, uint256, bytes) returns (bytes4)
afterInitialize
nonpayablefunction afterInitialize(address, uint160, int24 tick) returns (bytes4)
afterModifyPosition
nonpayablefunction afterModifyPosition(address, address, int24, int24, int128, uint256, uint256, bytes) returns (bytes4)
afterSwap
nonpayablefunction afterSwap(address, address, bool zeroToOne, int256, uint160, int256, int256, bytes) returns (bytes4)
applyBrevisOpResult
nonpayablefunction applyBrevisOpResult(bytes32 _proofId, uint64 _nonce, bytes32 _appVkHash, bytes32 _appCommitHash, bytes _appCircuitOutput)
applyBrevisOpResults
nonpayablefunction applyBrevisOpResults(bytes32[] _proofIds, uint64[] _nonces, bytes32[] _appVkHashes, bytes32[] _appCommitHashes, bytes[] _appCircuitOutputs)
beforeFlash
nonpayablefunction beforeFlash(address, address, uint256, uint256, bytes) returns (bytes4)
beforeInitialize
nonpayablefunction beforeInitialize(address, uint160) returns (bytes4)
beforeModifyPosition
nonpayablefunction beforeModifyPosition(address, address, int24, int24, int128, bytes) returns (bytes4, uint24)
beforeSwap
nonpayablefunction beforeSwap(address, address, bool zeroToOne, int256, uint160, bool, bytes) returns (bytes4, uint24, uint24)
brevisBatchCallback
nonpayablefunction brevisBatchCallback(bytes32[] _appVkHashes, bytes[] _appCircuitOutputs)
brevisCallback
nonpayablefunction brevisCallback(bytes32 _appVkHash, bytes _appCircuitOutput)
changeFeeConfiguration
nonpayablefunction changeFeeConfiguration(tuple _config)
collectPluginFee
nonpayablefunction collectPluginFee(address token, uint256 amount, address recipient)
initialize
nonpayablefunction initialize()
pause
nonpayablefunction pause()
prepayTimepointsStorageSlots
nonpayablefunction prepayTimepointsStorageSlots(uint16 startIndex, uint16 amount)
setBaseFee
nonpayablefunction setBaseFee(uint16 newBaseFee)
setBrevisRequest
nonpayablefunction setBrevisRequest(address _brevisRequest)
setDiscountIsActive
nonpayablefunction setDiscountIsActive(bool _status)
setFeeType
nonpayablefunction setFeeType(bool _feeType)
setIncentive
nonpayablefunction setIncentive(address newIncentive)
setOpChallengeWindow
nonpayablefunction setOpChallengeWindow(uint256 _opChallengeWindow)
setPriceChangeFactor
nonpayablefunction setPriceChangeFactor(uint16 newPriceChangeFactor)
setVkHash
nonpayablefunction setVkHash(bytes32 _vkHash)
unpause
nonpayablefunction unpause()
events
BaseFee
event BaseFee(uint16 baseFee)
FeeConfiguration
event FeeConfiguration((uint16 alpha1, uint16 alpha2, uint32 beta1, uint32 beta2, uint16 gamma1, uint16 gamma2, uint16 baseFee) feeConfig)
FeeDiscountUpdated
event FeeDiscountUpdated(address indexed usr, uint16 indexed discount)
FeeTypeUpdated
event FeeTypeUpdated(bool oldFeeType, bool newFeeType)
Incentive
event Incentive(address newIncentive)
PluginPaused
event PluginPaused()
PluginUnpaused
event PluginUnpaused()
PriceChangeFactor
event PriceChangeFactor(uint256 priceChangeFactor)
errors
AlreadyInitialized
error AlreadyInitialized()
InvalidAmount
error InvalidAmount()
InvalidVkHash
error InvalidVkHash()
NotAllowed
error NotAllowed()
NotInitialized
error NotInitialized()
NotPool
error NotPool()
PluginIsPaused
error PluginIsPaused()
PluginNotAttached
error PluginNotAttached()
PriceNotInitialized
error PriceNotInitialized()
targetIsTooOld
error targetIsTooOld()
tickOutOfRange
error tickOutOfRange()
transferFailed
error transferFailed()
volatilityOracleAlreadyInitialized
error volatilityOracleAlreadyInitialized()
creation bytecode
0x60e060405262010002805463ffffffff1916630bb803e81790553480156200002657600080fd5b5060405162005980380380620059808339810160408190526200004991620000db565b6001600160a01b0380821660c052808416608052821660a052604080518082019091526c01000000000000000000000000808252602091909101527c01000000000000000000000000000000010000000000000000000000006201000155620000b56000196201000755565b50505062000125565b80516001600160a01b0381168114620000d657600080fd5b919050565b600080600060608486031215620000f157600080fd5b620000fc84620000be565b92506200010c60208501620000be565b91506200011c60408501620000be565b90509250925092565b60805160a05160c0516157676200021960003960008181610b0901528181610cc9015281816111d60152818161125301528181611411015281816115b60152818161167d01528181611ac401528181611e3f01528181611f43015261209f015260008181610d1901528181610fd6015281816112a30152818161146101528181611c6401528181611e8f01528181611f9301526120ef0152600081816103690152818161042801528181610a7501528181610b6601528181610c1901528181611a1d015281816121b501528181612226015281816127a0015281816129b901528181612a710152613d1701526157676000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c806374eceae6116101c8578063a37a845611610104578063e3495569116100a2578063e72c652d1161007c578063e72c652d14610948578063f5985d351461095b578063f70d936214610987578063fb8dc1791461098f57600080fd5b8063e349556914610919578063e4fdb82d14610922578063e63015f01461093557600080fd5b8063d5caf16f116100de578063d5caf16f146108d5578063d6852010146108e0578063da705235146108f3578063df40bda81461090657600080fd5b8063a37a845614610880578063aa6b14bb14610893578063b242e7cf146108af57600080fd5b806382dd6522116101715780638de0a8ee1161014b5780638de0a8ee14610826578063922d1935146108395780639cb5a9631461084c5780639d3a52411461085f57600080fd5b806382dd6522146107d65780638456cb59146107e957806388f2e862146107f157600080fd5b80637b3de5c6116101a25780637b3de5c6146107ab5780637c1fe0c8146107bb5780638129fc1c146107ce57600080fd5b806374eceae61461071b5780637859f6d91461078557806379d6b6a21461079857600080fd5b806338931a31116102a25780634fe840f5116102405780635e2411b21161021a5780635e2411b2146106a4578063636fd804146106db578063689ea370146106ee578063718f6ccd1461070857600080fd5b80634fe840f51461064757806358e31bfd146106525780635c975abb1461069257600080fd5b80633bca02fc1161027c5780633bca02fc1461060c5780633f4ba83a1461061f57806343ecae21146106275780634c18293a1461063457600080fd5b806338931a31146105c1578063392e53cd146105d65780633b586c7f146105f957600080fd5b80631d39215e1161030f578063217ac237116102e9578063217ac2371461051e57806331b25d1a1461055f578063343d37ff1461058257806334801657146105ae57600080fd5b80631d39215e1461045f5780631d4632ac146104725780631e5eb1d01461048f57600080fd5b806308cd19751161034057806308cd19751461040d57806316f0115b146104235780631d022e2e1461044a57600080fd5b8063026b1d5f14610367578063029c1cb7146103a65780630786feb6146103e5575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b6103b96103b436600461490a565b61099c565b604080516001600160e01b0319909416845262ffffff928316602085015291169082015260600161039d565b6000546103fa906301000000900461ffff1681565b60405161ffff909116815260200161039d565b62010002546103fa9062010000900461ffff1681565b6103897f000000000000000000000000000000000000000000000000000000000000000081565b61045d6104583660046149b4565b610afe565b005b61045d61046d3660046149d1565b610cbe565b62010002546103899064010000000090046001600160a01b031681565b6104d6620100045461ffff80821692601083901c82169263ffffffff602082901c811693604083901c90911692606083901c821692607081901c83169260809190911c1690565b6040805161ffff9889168152968816602088015263ffffffff9586169087015293909216606085015284166080840152831660a08301529190911660c082015260e00161039d565b610526610ea0565b604080516001600160a01b03909516855260029390930b602085015261ffff9091169183019190915260ff16606082015260800161039d565b61057460008051602061571283398151915281565b60405190815260200161039d565b6105956105903660046149e3565b610ebc565b6040516001600160e01b0319909116815260200161039d565b61045d6105bc366004614a97565b610ee5565b6201000654610389906001600160a01b031681565b6000546105e99062010000900460ff1681565b604051901515815260200161039d565b61045d610607366004614ba8565b610fad565b61045d61061a366004614bc5565b6110b6565b61045d6111cb565b620100085460ff166105e9565b61045d610642366004614c31565b611248565b610574620100095481565b6201000154610672906001600160801b0380821691600160801b90041682565b604080516001600160801b0393841681529290911660208301520161039d565b6000546105e990610100900460ff1681565b6106b76106b2366004614c6b565b61132d565b604080516001600160e01b0319909316835262ffffff90911660208301520161039d565b6105956106e9366004614d0a565b611364565b6106f660c381565b60405160ff909116815260200161039d565b61045d610716366004614d5b565b611388565b61072e610729366004614c31565b61139e565b60408051971515885263ffffffff909616602088015260069490940b948601949094526001600160581b039091166060850152600290810b60808501529190910b60a083015261ffff1660c082015260e00161039d565b61045d610793366004614c31565b611406565b61045d6107a6366004614dcc565b6114e8565b62010002546103fa9061ffff1681565b61045d6107c9366004614e18565b61159f565b61045d611962565b6105956107e4366004614e35565b611a03565b61045d611ab9565b6108046107ff366004614e94565b611b3a565b6040805160069390930b83526001600160581b0390911660208301520161039d565b610595610834366004614eaf565b611b95565b6103fa610847366004614ee3565b611bc5565b61059561085a366004614f01565b611bd1565b61087261086d366004614ff6565b611bfa565b60405161039d9291906150a3565b61045d61088e366004614ba8565b611c3b565b6105956108a136600461512a565b63aa6b14bb60e01b92915050565b6103fa6108bd366004614e18565b620100056020526000908152604090205461ffff1681565b610574620100075481565b6105956108ee36600461514c565b611d3a565b61045d6109013660046151b4565b611d64565b61045d610914366004614e18565b611e34565b6103fa61271081565b61045d6109303660046149b4565b611f38565b6105e9610943366004614e18565b612022565b61045d6109563660046151e2565b612094565b60005461097290600160281b900463ffffffff1681565b60405163ffffffff909116815260200161039d565b6103fa612176565b6000546105e99060ff1681565b60008060006109a96121aa565b6109b16121f5565b6000805460ff1615610a095760006109c761221e565b50509150506109de8b826109d96122b6565b612363565b620100085490925060ff16156109fb576109f88232612472565b91505b610a036124f2565b50610adc565b610a116124f2565b610a21610a1c6125e8565b61262f565b620100085490915060ff1615610a3e57610a3b8132612472565b90505b6000610a4861221e565b50925050508061ffff168261ffff1614610ada57604051638e00555360e01b815261ffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638e00555390602401600060405180830381600087803b158015610ac157600080fd5b505af1158015610ad5573d6000803e3d6000fd5b505050505b505b63029c1cb760e01b935061ffff16915060009050985098509895505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4757604051631eb49d6d60e11b815260040160405180910390fd5b6000805482151560ff1982161790915560ff1681610bf55762010004547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638e0055539060801c61ffff166040516001600160e01b031960e084901b16815261ffff9091166004820152602401600060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b50505050610c7e565b6201000254604051638e00555360e01b81526201000090910461ffff1660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638e00555390602401600060405180830381600087803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b505050505b60408051821515815283151560208201527f4c178ce4718c9cd3c1e46dc348c68224830b3a6f5b945c37f46d93ca8b65bb89910160405180910390a15050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610d8c575060405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c9190615219565b610d9557600080fd5b610dac610da736839003830183615236565b612688565b610e2d610dbe36839003830183615236565b600080826000015161ffff166010846020015161ffff16901b6020856040015163ffffffff16901b6040866060015163ffffffff16901b6060876080015161ffff16901b60708860a0015161ffff16901b60808960c0015161ffff16901b171717171717905080915050919050565b62010004805471ffffffffffffffffffffffffffffffffffff191671ffffffffffffffffffffffffffffffffffff929092169190911790556040517f348d1d6a31fa4a2a3ef887c493549a9500fbb77b5218be0c81a71c553364305a90610e959083906152ee565b60405180910390a150565b600080600080610eae61221e565b935093509350935090919293565b6000610ec66121aa565b610ed060c361276c565b5063343d37ff60e01b98975050505050505050565b60005b89811015610fa057610f8e8b8b83818110610f0557610f05615393565b905060200201358a8a84818110610f1e57610f1e615393565b9050602002016020810190610f3391906153a9565b898985818110610f4557610f45615393565b90506020020135888886818110610f5e57610f5e615393565b90506020020135878787818110610f7757610f77615393565b9050602002810190610f8991906153c4565b612800565b80610f9881615421565b915050610ee8565b5050505050505050505050565b60405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa158015611025573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110499190615219565b61106657604051631eb49d6d60e11b815260040160405180910390fd5b62010002805463ffff000019166201000061ffff8416908102919091179091556040519081527fc91eb493942701aff5078930c9629ab20229818e33e54743671490dcf57a7b1090602001610e95565b62010006546001600160a01b03166111155760405162461bcd60e51b815260206004820152601660248201527f627265766973526571756573742061646472657373300000000000000000000060448201526064015b60405180910390fd5b62010006546001600160a01b031633146111625760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b604482015260640161110c565b60005b838110156111c4576111b285858381811061118257611182615393565b9050602002013584848481811061119b5761119b615393565b90506020028101906111ad91906153c4565b6129ab565b806111bc81615421565b915050611165565b5050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461121457604051631eb49d6d60e11b815260040160405180910390fd5b6000805461ff00191681556040517f92c934cce17dcaca1e7daa742325ef019e216ef8f9625e01cb1e3ffc3b43fcde9190a1565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611316575060405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa1580156112f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113169190615219565b61131f57600080fd5b61132a816201000755565b50565b6000806113386121aa565b6113406121f5565b61134a60c361276c565b50632f1208d960e11b905060005b97509795505050505050565b600061136e6121aa565b61137860c361276c565b506318dbf60160e21b5b92915050565b611396868686868686612800565b505050505050565b6001816201000081106113b057600080fd5b015460ff81169150610100810463ffffffff1690600160281b810460060b90600160601b81046001600160581b031690600160b81b8104600290810b91600160d01b810490910b90600160e81b900461ffff1687565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114d4575060405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa1580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190615219565b6114dd57600080fd5b61132a816201000955565b62010006546001600160a01b03166115425760405162461bcd60e51b815260206004820152601660248201527f6272657669735265717565737420616464726573733000000000000000000000604482015260640161110c565b62010006546001600160a01b0316331461158f5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b604482015260640161110c565b61159a8383836129ab565b505050565b6001600160a01b03811615801590600090611651577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638a2ade586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611636919061543a565b6001600160a01b0316336001600160a01b0316149050611714565b62010003546001600160a01b031615611676575062010003546001600160a01b031633145b80611714577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638a2ade586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fd919061543a565b6001600160a01b0316336001600160a01b03161490505b806117615760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420616c6c6f77656420746f2073657420696e63656e7469766500000000604482015260640161110c565b60003061176c6129b5565b6001600160a01b031614905082156117cb57806117cb5760405162461bcd60e51b815260206004820152601360248201527f506c7567696e206e6f7420617474616368656400000000000000000000000000604482015260640161110c565b62010002546001600160a01b03640100000000909104811690851681036118345760405162461bcd60e51b815260206004820152600e60248201527f416c726561647920616374697665000000000000000000000000000000000000604482015260640161110c565b8315611891576001600160a01b038116156118915760405162461bcd60e51b815260206004820152601460248201527f4861732061637469766520696e63656e74697665000000000000000000000000604482015260640161110c565b6201000280547fffffffffffffffff0000000000000000000000000000000000000000ffffffff166401000000006001600160a01b038816908102919091179091556040519081527f915c5369e6580733735d1c2e30ca20dcaa395697a041033c9f35f80f53525e849060200160405180910390a183156119325762010003805473ffffffffffffffffffffffffffffffffffffffff191633179055611952565b62010003805473ffffffffffffffffffffffffffffffffffffffff191690555b81156111c4576111c46002612a39565b60005462010000900460ff161561198b5760405162dc149f60e41b815260040160405180910390fd5b306119946129b5565b6001600160a01b0316146119bb5760405163a909652b60e01b815260040160405180910390fd5b6000806119c661221e565b505091509150816001600160a01b03166000036119f657604051636fdc2d5b60e01b815260040160405180910390fd5b6119ff81612adb565b5050565b6000611a0d6121aa565b611a1682612adb565b62010004547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638e0055539060801c61ffff166040516001600160e01b031960e084901b16815261ffff9091166004820152602401600060405180830381600087803b158015611a8f57600080fd5b505af1158015611aa3573d6000803e3d6000fd5b5063416eb29160e11b93505050505b9392505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b0257604051631eb49d6d60e11b815260040160405180910390fd5b6000805461ff0019166101001781556040517f7927ef12e918a193ce943702d9620c7e6823bf81bbc8574572756d40719518629190a1565b6000806000611b4761221e565b505060008054919350630100000090910461ffff169150611b69600183612b1f565b90506000611b7c60014289878787612b52565b6040810151606090910151909890975095505050505050565b6000611b9f6121aa565b611ba76121f5565b611bb160c361276c565b506346f0547760e11b5b9695505050505050565b6000611ab28383612472565b6000611bdb6121aa565b611be488612dcd565b50639cb5a96360e01b9998505050505050505050565b6060806000611c0761221e565b5050915050611c31611c164290565b60005460019190879085906301000000900461ffff16612e7f565b9250925050915091565b60405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa158015611cb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd79190615219565b611cf457604051631eb49d6d60e11b815260040160405180910390fd5b62010002805461ffff191661ffff83169081179091556040519081527f1011f83fc34609d67eda9d83258819bf0713ae683f06389bbd69417645eed04690602001610e95565b6000611d446121aa565b611d4e60c361276c565b50630d68520160e41b9998505050505050505050565b60018261ffff16620100008110611d7d57611d7d615393565b015460ff1615611d9f5760405162dc149f60e41b815260040160405180910390fd5b61ffff81161580611dc457508061ffff168261ffff611dbe9190615457565b61ffff16105b15611de25760405163162908e360e11b815260040160405180910390fd5b61ffff82165b81830161ffff1681101561159a5760018082620100008110611e0c57611e0c615393565b01805463ffffffff929092166101000264ffffffff0019909216919091179055600101611de8565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f02575060405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa158015611ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f029190615219565b611f0b57600080fd5b62010006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612006575060405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120069190615219565b61200f57600080fd5b62010008805460ff191682151517905550565b62010002546000906001600160a01b03838116640100000000909204161461204c57506000919050565b306120556129b5565b6001600160a01b03161461206b57506000919050565b600061207561221e565b93505050506002811661208b5750600092915050565b50600192915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612162575060405163e8ae2b6960e01b815260008051602061571283398151915260048201523360248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e8ae2b6990604401602060405180830381865afa15801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190615219565b61216b57600080fd5b61159a838284613000565b6000805460ff16156121955750620100025462010000900461ffff1690565b6121a56121a06125e8565b613064565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146121f357604051636f61f64160e01b815260040160405180910390fd5b565b600054610100900460ff16156121f35760405163f935472560e01b815260040160405180910390fd5b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015612282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a69190615472565b5093989297509095509350915050565b6000805481906001906301000000900461ffff166201000081106122dc576122dc615393565b6040805160e081018252919092015460ff811615158252610100810463ffffffff166020830152600160281b810460060b92820192909252600160601b82046001600160581b03166060820152600160b81b8204600290810b60808301819052600160d01b840490910b60a0830152600160e81b90920461ffff1660c09091015292915050565b6040805180820190915260008082526020820181905290620100025461ffff8082169162010000900416600286810b9086900b146123cd576123a68686846130a8565b805160208201516001600160801b03908116600160801b02911617620100015592506123fa565b6040805180820190915262010001546001600160801b038082168352600160801b90910416602082015292505b600087612427576020840151606090612420906001600160801b031661ffff85166154ff565b901c612446565b8351606090612443906001600160801b031661ffff85166154ff565b901c5b905061ffff81111561245b575061ffff612467565b80600003612467575060015b979650505050505050565b6001600160a01b038116600090815262010005602052604081205461ffff16810361249e575081611382565b6001600160a01b03821660009081526201000560205260408120546124c99061ffff16612710615457565b61ffff168461ffff166124dc91906154ff565b90506124ea6127108261552c565b949350505050565b6000546301000000810461ffff1690600160281b810463ffffffff169062010000900460ff16806125655760405162461bcd60e51b815260206004820152600f60248201527f4e6f7420696e697469616c697a65640000000000000000000000000000000000604482015260640161110c565b4263ffffffff8082169084160361257c5750505050565b600061258661221e565b509092506000915061259d9050600187858561324a565b506000805463ffffffff909516600160281b0268ffffffff00000000001961ffff9093166301000000029290921668ffffffffffff0000001990951694909417179092555050505050565b600042816125f461221e565b505060008054919350630100000090910461ffff169150612616600183612b1f565b90506126266001858585856134df565b94505050505090565b620100045460009071ffffffffffffffffffffffffffffffffffff81169060101c61ffff1661ffff82161761ffff1660000361267557608081901c61ffff169150612682565b61267f8382613741565b91505b50919050565b60c08101516020820151825161ffff928316916126aa91908416908416615540565b6126b49190615540565b11156127025760405162461bcd60e51b815260206004820152601060248201527f4d61782066656520657863656564656400000000000000000000000000000000604482015260640161110c565b608081015161ffff1615801590612720575060a081015161ffff1615155b61132a5760405162461bcd60e51b815260206004820152601260248201527f47616d6d6173206d757374206265203e20300000000000000000000000000000604482015260640161110c565b600061277661221e565b93505050508160ff168160ff16146119ff5760405163bca57f8160e01b815260ff831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bca57f8190602401600060405180830381600087803b1580156127ec57600080fd5b505af1158015611396573d6000803e3d6000fd5b62010006546001600160a01b031661285a5760405162461bcd60e51b815260206004820152601660248201527f6272657669735265717565737420616464726573733000000000000000000000604482015260640161110c565b6201000654620100075460405163a66f791760e01b81526004810189905267ffffffffffffffff88166024820152604481018690526064810187905260848101919091526001600160a01b039091169063a66f79179060a401602060405180830381865afa1580156128d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f49190615219565b6129405760405162461bcd60e51b815260206004820152601560248201527f64617461206e6f7420726561647920746f207573650000000000000000000000604482015260640161110c565b8181604051612950929190615553565b604051809103902083146129a65760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642063697263756974206f757470757400000000000000000000604482015260640161110c565b611396565b61159a82826137d4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a15573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a5919061543a565b6000612a4361221e565b93505050828217905060ff8083169082161461159a5760405163bca57f8160e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bca57f81906024015b600060405180830381600087803b158015612abe57600080fd5b505af1158015612ad2573d6000803e3d6000fd5b50505050505050565b42612ae8600182846139a0565b6000805462ff00001963ffffffff8416600160281b021668ffffffff0000ff00001990911617620100001790556119ff6041612a39565b6000600182018361ffff8216620100008110612b3d57612b3d615393565b015460ff1615612b4b578091505b5092915050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915284860360008080612b9f8b8b868a8a613a3d565b506040805160e081018252845460ff811615158252610100810463ffffffff90811660208401819052600160281b830460060b94840194909452600160601b82046001600160581b03166060840152600160b81b8204600290810b6080850152600160d01b8304900b60a0840152600160e81b90910461ffff1660c0830152909950939650919450925090851603612c3a5750505050611bbb565b8015612c7857600080612c5a8d878c8c8c8c602001518d60400151613bff565b91509150612c6b87878c8585613c26565b9650505050505050611bbb565b815463ffffffff6101008204811691600160281b900460060b908616829003612d215750506040805160e081018252925460ff811615158452610100810463ffffffff166020850152600160281b810460060b91840191909152600160601b81046001600160581b03166060840152600160b81b8104600290810b6080850152600160d01b8204900b60a0840152600160e81b900461ffff1660c0830152509250611bbb915050565b602087015160408801518184039188039063ffffffff80831691908416600690810b918603900b81612d5557612d55615516565b60408c01805192909105929092020160060b90526060890151865463ffffffff80841692908516916001600160581b03600160601b9091048116919091031681612da157612da1615516565b60608c0180516001600160581b0393909204939093020116905250505050505050509695505050505050565b620100025464010000000090046001600160a01b03168015612e75576000612df361221e565b505060405163034d335960e41b8152600282900b600482015285151560248201529092506001600160a01b03841691506334d33590906044016020604051808303816000875af1158015612e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6f9190615219565b50505050565b6119ff6002613cde565b825160609081908067ffffffffffffffff811115612e9f57612e9f614faf565b604051908082528060200260200182016040528015612ec8578160200160208202803683370190505b5092508067ffffffffffffffff811115612ee457612ee4614faf565b604051908082528060200260200182016040528015612f0d578160200160208202803683370190505b5091506000612f1c8986612b1f565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529192505b83811015612ff257612f878b8b8b8481518110612f7757612f77615393565b60200260200101518b8b88612b52565b915081604001518260600151878381518110612fa557612fa5615393565b60200260200101878481518110612fbe57612fbe615393565b60200260200101826001600160581b03166001600160581b03168152508260060b60060b8152505050806001019050612f58565b505050509550959350505050565b600060405163a9059cbb60e01b6000526001600160a01b03841660045282602452602060006044600080895af19150813d1560203d146001600051141617169150806040525080612e6f57604051637232c81f60e11b815260040160405180910390fd5b620100045460009071ffffffffffffffffffffffffffffffffffff81169060101c61ffff1661ffff82161761ffff1660000361267557608081901c61ffff1661267f565b604080518082019091526000808252602082015260008360020b8560020b6130d09190615563565b90506130df620d89e719615583565b60020b811315613100576130f6620d89e719615583565b60020b9050613113565b620d89e7198112156131135750620d89e7195b600061311e82613d4e565b6001600160a01b031690506000600160601b61313b838083614029565b6131459190615563565b905060006103e861315a61ffff8816846155a5565b61316491906155d5565b6040805180820190915262010001546001600160801b03808216808452600160801b9092041660208301529096509091506000906131a6908390600f0b615563565b90508060001280156131bb5750600160611b81125b156131fc576040518060400160405280826001600160801b031681526020018388602001516131ea9190615603565b6001600160801b03169052955061323e565b60008113613223576040805180820190915260008152600160611b6020820152955061323e565b60408051808201909152600160611b81526000602082015295505b50505050509392505050565b6000806000868661ffff1662010000811061326757613267615393565b6040805160e081018252919092015460ff811615158252610100810463ffffffff90811660208401819052600160281b830460060b94840194909452600160601b82046001600160581b03166060840152600160b81b8204600290810b6080850152600160d01b8304900b60a0840152600160e81b90910461ffff1660c0830152909250861690036133005785600092509250506134d6565b856001019250868361ffff1662010000811061331e5761331e615393565b015460ff161561332c578291505b6000806133468988888b8888602001518960400151613bff565b915091508461ffff168161ffff160361335d576001015b61336a8388888585613c26565b898661ffff1662010000811061338257613382615393565b825191018054602084015160408501516060860151608087015160a088015160c09098015164ffffffffff1990951696151564ffffffff0019169690961761010063ffffffff90941693909302929092177fffffffffffffffffff000000000000000000000000000000000000ffffffffff16600160281b66ffffffffffffff909216919091027fffffffffffffffffff0000000000000000000000ffffffffffffffffffffffff1617600160601b6001600160581b03909216919091021765ffffffffffff60b81b1916600160b81b62ffffff948516027fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff1617600160d01b9390941692909202929092177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160e81b61ffff9283160217909155858116908516036134d2576001909301925b5050505b94509492505050565b600080868461ffff166201000081106134fa576134fa615393565b018054909150610100810463ffffffff90811690881614906001600160581b03600160601b8204169061ffff600160e81b9091041682613546576135438a8a60008b8b8b6140c2565b91505b60008a8761ffff1662010000811061356057613560615393565b0154610100900463ffffffff169050613580816201517f198c018c6141fb565b156136ab5760008415613679578b8361ffff166201000081106135a5576135a5615393565b0154610100900463ffffffff168c61ffff85166201000081106135ca576135ca615393565b0154909250600160601b90046001600160581b031690506000828d6001860161ffff166201000081106135ff576135ff615393565b015463ffffffff610100909104811691909103915081811690848e036201517f190116838f61ffff600189011662010000811061363e5761363e615393565b01600001600c9054906101000a90046001600160581b031603026001600160581b03168161366e5761366e615516565b04820191505061368d565b61368a8c8c620151808d8d8d6140c2565b90505b620151806001600160581b0382860316049650505050505050613738565b8063ffffffff168a63ffffffff16146137325760008b8861ffff166201000081106136d8576136d8615393565b0154600160601b90046001600160581b03169050818b03600163ffffffff8216111561370357600019015b8063ffffffff168286036001600160581b03168161372357613723615516565b04975050505050505050613738565b50505050505b95945050505050565b6000600f6001600160581b038416049250600061378a6001600160581b038516607085901c61ffff16601086901c61ffff16604087901c63ffffffff165b63ffffffff16614223565b6137b56001600160581b038616606086901c61ffff1661ffff8716602088901c63ffffffff1661377f565b01905061ffff608084901c81168201908111156124ea576124ea615642565b806138215760405162461bcd60e51b815260206004820152600a60248201527f656d707479206461746100000000000000000000000000000000000000000000604482015260640161110c565b61382c601682615658565b156138795760405162461bcd60e51b815260206004820152601560248201527f696e636f72726563742064617461206c656e6774680000000000000000000000604482015260640161110c565b60005b8181101561159a576000838284613894826014615540565b926138a19392919061566c565b6138aa91615696565b60601c9050806138ba5750505050565b600084846138c9856014615540565b6138d6926016929061566c565b6138df916156cb565b60f01c90506127108111156139365760405162461bcd60e51b815260206004820152601a60248201527f646973636f756e742067726561746572207468616e2031303025000000000000604482015260640161110c565b6001600160a01b0382166000818152620100056020526040808220805461ffff191661ffff861690811790915590519092917f6fa48722501f911e96af393141a0ad577ea317f8e766706bc3791260200d925991a3506139999050601682615540565b905061387c565b8254839060ff16156139c5576040516308ab11a360e11b815260040160405180910390fd5b8054600165ffffffffffff60b81b19909116600160d01b62ffffff949094169384027fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1617600160b81b939093029290921764ffffffffff191661010063ffffffff949094169390930260ff19169290921717905550565b6000806000806000898761ffff16620100008110613a5d57613a5d615393565b01805490915063ffffffff610100820481169161ffff600160e81b90910416908a8116908c161480613a955750613a95828b8d6141fb565b15613ab1575090945084935060019250505061ffff8516613bf3565b6000620151808b840363ffffffff1611613adf57819850620151808c0363ffffffff168b63ffffffff161490505b60008d8a61ffff16620100008110613af957613af9615393565b0154610100900463ffffffff169050613b13818d8f6141fb565b613b2f5760405162bc60f160e41b815260040160405180910390fd5b8b63ffffffff168163ffffffff1603613b8f578d8a61ffff16620100008110613b5a57613b5a615393565b018e8b61ffff16620100008110613b7357613b73615393565b919a50019750600196505061ffff89169450613bf39350505050565b8960010161ffff168b61ffff1603613bd4578d8a61ffff16620100008110613bb957613bb9615393565b019850939650600095505061ffff88169350613bf392505050565b50613be38d8d8d8d8d866142d7565b9199509750600096509450505050505b95509550955095915050565b600080600080613c148b8b8b8b8b8b8b614325565b909c909b509950505050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526020860180516001885263ffffffff878116909252604088018051918803928316600288810b82810290940160060b90925260a08a0151613ca99391928291810b9089900b61445d565b606088018051919091016001600160581b031690525050600292830b6080860152910b60a084015261ffff1660c08301525090565b6000613ce861221e565b9350505082198216905060ff8083169082161461159a5760405163bca57f8160e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063bca57f8190602401612aa4565b6000600282900b60171d62ffffff818401821816620d89e8811115613d8657604051633c10250f60e01b815260040160405180910390fd5b600160801b6001821615613da757506ffffcb933bd6fad37aa2d162d1a5940015b6002821615613dc6576ffff97272373d413259a46990580e213a0260801c5b6004821615613de5576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613e04576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613e23576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613e42576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613e61576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613e80576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613ea0576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613ec0576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613ee0576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613f00576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613f20576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613f40576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613f60576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613f80576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613fa1576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613fc1576e5d6af8dedb81196699c329225ee6040260801c5b6204000082106140075762040000821615613fea576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614007576b048a170391f7dc42444e8fa20260801c5b60008560020b131561401857600019045b63ffffffff0160201c949350505050565b6000838302816000198587098281108382030391505080841161404b57600080fd5b8060000361405e57508290049050611ab2565b8385870960008581038616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030291819003819004600101858411909403939093029190930391909104170290509392505050565b60008486038180806140d78b8b868a8a613a3d565b508254929550909350915063ffffffff61010082048116916001600160581b03600160601b90910416908616829003614117579550611bbb945050505050565b821561417e57600061413f8e888d8d8d888c60000160059054906101000a900460060b613bff565b50865490915061416e9063ffffffff858a03169060028e810b918291600160d01b909104810b9086900b61445d565b8201975050505050505050611bbb565b835463ffffffff61010082048116916001600160581b03600160601b909104169088168290036141b7579750611bbb9650505050505050565b83820384890363ffffffff8082169083166001600160581b0387860316816141e1576141e1615516565b040285019a50505050505050505050509695505050505050565b63ffffffff8082168482168110918416118103611ab257505063ffffffff9081169116111590565b6000818511156142835781850394508361ffff16600602851061424b575061ffff82166124ea565b600461ffff85160a60006142608787846144b8565b9050808201818661ffff16028161427957614279615516565b04925050506124ea565b93810393600661ffff851602851061429d575060006124ea565b600461ffff85160a60006142b28787846144b8565b8201905080828661ffff1602816142cb576142cb615516565b04979650505050505050565b6000808061ffff808616908290881682116142f6578761ffff16614301565b620100008861ffff16015b90506143118b8b8b85858b61462e565b919d909c50909a5098505050505050505050565b6000806000808a8761ffff1662010000811061434357614343615393565b0154610100900463ffffffff168b61ffff891662010000811061436857614368615393565b0154909250600160281b900460060b9050600289900b63ffffffff878c031602850161439b836201517f198d018d6141fb565b6143fc578263ffffffff168b63ffffffff16036143c757505050600287900b91505061ffff8416611358565b828b0363ffffffff1660060b82820360060b816143e6576143e6615516565b0560060b94505061ffff87169250611358915050565b61440c87620151808d038d6141fb565b1561442657505050600287900b91505061ffff8516611358565b60006144398d8d620151808e8e8e61479f565b955090506201518081830360060b0560060b95505050505097509795505050505050565b600082820385850303838603870260018089018902906002808b029091018202906006818c0a81029180870a8402868802860283020190860a8d0290910201816144a9576144a9615516565b059a9950505050505050505050565b6000808385048080156144f757600181146145085760028114614519576003811461452a576004811461453b576903248ca20bb7b5032f5f9250614549565b68056bc75e2d631000009250614549565b680ebc5fb417461211109250614549565b68280e60114edb805d039250614549565b686ce2482d63ef54b74c9250614549565b690127fa27722cc06cc5e392505b50509383900693600261ffff85160461ffff16851061459957600261ffff85160461ffff168503945068056bc75e2d63100000816808f00f760a4b2db55c028161459557614595615516565b0490505b8291508461ffff851683816145b0576145b0615516565b049350838102830192508461ffff1684816145cd576145cd615516565b0493508502600281850204830192508461ffff1684816145ef576145ef615516565b04935085026018600461ffff871683020282880201048301925068056bc75e2d631000008284028161462357614623615516565b049695505050505050565b600080600083801561464257506002868603115b15614651575060018501614659565b5084840160011c5b888161ffff1662010000811061467157614671615393565b01925082915060015b835460ff811690610100900463ffffffff16811561471e5761469d818b8d6141fb565b15614713578b8460010161ffff166201000081106146bd576146bd615393565b01805490955060ff811690610100900463ffffffff1681156146fe576146e48c828f6141fb565b156146f3575050505050614793565b856001019a5061470c565b508695506147939350505050565b5050614725565b600184039750614725565b8360010198505b60008380156147315750875b801561473f5750846001018a145b9050808015614750575060108a8a03115b1561476057896008019450614769565b89890160011c94505b8c8561ffff1662010000811061478157614781615393565b01965060009350505050600161467a57505b96509650969350505050565b600080858703818080806147b68d8d878c8c613a3d565b83549397509195509350915063ffffffff6101008204811691600160281b900460060b9087168290036147f3579750909550614893945050505050565b831561481a5781870363ffffffff168c60020b028101839850985050505050505050614893565b845463ffffffff6101008204811691600160281b900460060b90891682900361485557995050505060010161ffff1694506148939350505050565b838203848a0363ffffffff808216908316600690810b90878603900b8161487e5761487e615516565b05028501879c509c5050505050505050505050505b965096945050505050565b6001600160a01b038116811461132a57600080fd5b801515811461132a57600080fd5b60008083601f8401126148d357600080fd5b50813567ffffffffffffffff8111156148eb57600080fd5b60208301915083602082850101111561490357600080fd5b9250929050565b60008060008060008060008060e0898b03121561492657600080fd5b88356149318161489e565b975060208901356149418161489e565b96506040890135614951816148b3565b95506060890135945060808901356149688161489e565b935060a0890135614978816148b3565b925060c089013567ffffffffffffffff81111561499457600080fd5b6149a08b828c016148c1565b999c989b5096995094979396929594505050565b6000602082840312156149c657600080fd5b8135611ab2816148b3565b600060e0828403121561268257600080fd5b60008060008060008060008060e0898b0312156149ff57600080fd5b8835614a0a8161489e565b97506020890135614a1a8161489e565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561499457600080fd5b60008083601f840112614a6457600080fd5b50813567ffffffffffffffff811115614a7c57600080fd5b6020830191508360208260051b850101111561490357600080fd5b60008060008060008060008060008060a08b8d031215614ab657600080fd5b8a3567ffffffffffffffff80821115614ace57600080fd5b614ada8e838f01614a52565b909c509a5060208d0135915080821115614af357600080fd5b614aff8e838f01614a52565b909a50985060408d0135915080821115614b1857600080fd5b614b248e838f01614a52565b909850965060608d0135915080821115614b3d57600080fd5b614b498e838f01614a52565b909650945060808d0135915080821115614b6257600080fd5b50614b6f8d828e01614a52565b915080935050809150509295989b9194979a5092959850565b61ffff8116811461132a57600080fd5b8035614ba381614b88565b919050565b600060208284031215614bba57600080fd5b8135611ab281614b88565b60008060008060408587031215614bdb57600080fd5b843567ffffffffffffffff80821115614bf357600080fd5b614bff88838901614a52565b90965094506020870135915080821115614c1857600080fd5b50614c2587828801614a52565b95989497509550505050565b600060208284031215614c4357600080fd5b5035919050565b8060020b811461132a57600080fd5b8035600f81900b8114614ba357600080fd5b600080600080600080600060c0888a031215614c8657600080fd5b8735614c918161489e565b96506020880135614ca18161489e565b95506040880135614cb181614c4a565b94506060880135614cc181614c4a565b9350614ccf60808901614c59565b925060a088013567ffffffffffffffff811115614ceb57600080fd5b614cf78a828b016148c1565b989b979a50959850939692959293505050565b60008060408385031215614d1d57600080fd5b8235614d288161489e565b91506020830135614d388161489e565b809150509250929050565b803567ffffffffffffffff81168114614ba357600080fd5b60008060008060008060a08789031215614d7457600080fd5b86359550614d8460208801614d43565b94506040870135935060608701359250608087013567ffffffffffffffff811115614dae57600080fd5b614dba89828a016148c1565b979a9699509497509295939492505050565b600080600060408486031215614de157600080fd5b83359250602084013567ffffffffffffffff811115614dff57600080fd5b614e0b868287016148c1565b9497909650939450505050565b600060208284031215614e2a57600080fd5b8135611ab28161489e565b600080600060608486031215614e4a57600080fd5b8335614e558161489e565b92506020840135614e658161489e565b91506040840135614e7581614c4a565b809150509250925092565b803563ffffffff81168114614ba357600080fd5b600060208284031215614ea657600080fd5b611ab282614e80565b60008060008060008060a08789031215614ec857600080fd5b8635614ed38161489e565b95506020870135614d848161489e565b60008060408385031215614ef657600080fd5b8235614d2881614b88565b60008060008060008060008060006101008a8c031215614f2057600080fd5b8935614f2b8161489e565b985060208a0135614f3b8161489e565b975060408a0135614f4b816148b3565b965060608a0135955060808a0135614f628161489e565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff811115614f8c57600080fd5b614f988c828d016148c1565b915080935050809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614fee57614fee614faf565b604052919050565b6000602080838503121561500957600080fd5b823567ffffffffffffffff8082111561502157600080fd5b818501915085601f83011261503557600080fd5b81358181111561504757615047614faf565b8060051b9150615058848301614fc5565b818152918301840191848101908884111561507257600080fd5b938501935b838510156150975761508885614e80565b82529385019390850190615077565b98975050505050505050565b604080825283519082018190526000906020906060840190828701845b828110156150df57815160060b845292840192908401906001016150c0565b5050508381038285015284518082528583019183019060005b8181101561511d5783516001600160581b0316835292840192918401916001016150f8565b5090979650505050505050565b6000806040838503121561513d57600080fd5b50508035926020909101359150565b60008060008060008060008060006101008a8c03121561516b57600080fd5b89356151768161489e565b985060208a01356151868161489e565b975060408a013561519681614c4a565b965060608a01356151a681614c4a565b9550614f6260808b01614c59565b600080604083850312156151c757600080fd5b82356151d281614b88565b91506020830135614d3881614b88565b6000806000606084860312156151f757600080fd5b83356152028161489e565b9250602084013591506040840135614e758161489e565b60006020828403121561522b57600080fd5b8151611ab2816148b3565b600060e0828403121561524857600080fd5b60405160e0810181811067ffffffffffffffff8211171561526b5761526b614faf565b604052823561527981614b88565b8152602083013561528981614b88565b602082015261529a60408401614e80565b60408201526152ab60608401614e80565b606082015260808301356152be81614b88565b608082015260a08301356152d181614b88565b60a08201526152e260c08401614b98565b60c08201529392505050565b60e0810182356152fd81614b88565b61ffff908116835260208401359061531482614b88565b808216602085015261532860408601614e80565b915063ffffffff80831660408601528061534460608801614e80565b166060860152506080850135915061535b82614b88565b908116608084015260a08401359061537282614b88565b1660a083015261538460c08401614b98565b61ffff811660c0840152612b4b565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156153bb57600080fd5b611ab282614d43565b6000808335601e198436030181126153db57600080fd5b83018035915067ffffffffffffffff8211156153f657600080fd5b60200191503681900382131561490357600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016154335761543361540b565b5060010190565b60006020828403121561544c57600080fd5b8151611ab28161489e565b61ffff828116828216039080821115612b4b57612b4b61540b565b60008060008060008060c0878903121561548b57600080fd5b86516154968161489e565b60208801519096506154a781614c4a565b60408801519095506154b881614b88565b606088015190945060ff811681146154cf57600080fd5b60808801519093506154e081614b88565b60a08801519092506154f1816148b3565b809150509295509295509295565b80820281158282048414176113825761138261540b565b634e487b7160e01b600052601260045260246000fd5b60008261553b5761553b615516565b500490565b808201808211156113825761138261540b565b8183823760009101908152919050565b8181036000831280158383131683831282161715612b4b57612b4b61540b565b60008160020b627fffff19810361559c5761559c61540b565b60000392915050565b80820260008212600160ff1b841416156155c1576155c161540b565b81810583148215176113825761138261540b565b6000826155e4576155e4615516565b600160ff1b8214600019841416156155fe576155fe61540b565b500590565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff19821217156113825761138261540b565b634e487b7160e01b600052600160045260246000fd5b60008261566757615667615516565b500690565b6000808585111561567c57600080fd5b8386111561568957600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156156c35780818660140360031b1b83161692505b505092915050565b7fffff00000000000000000000000000000000000000000000000000000000000081358181169160028510156156c35760029490940360031b84901b169092169291505056fe8e8000aba5b365c0be9685da1153f7f096e76d1ecfb42c050ae1e387aa65b4f5a26469706673582212204308c4aa179312e6135cca3fc111c447fbdc4adfb4a27f12020f82f4822f5d6e64736f6c6343000814003300000000000000000000000058f04aada1051885a3c4e296aab0a454ea1233a300000000000000000000000030055f87716d3dfd0e5198c27024481099fb4a98000000000000000000000000f807462b5ce54a89e2f5b847d8281030eafe241b