0 txs
445.5k calls
constructor
constructor()
functions
isDone
viewfunction isDone() view returns (bool)
isPaused
viewfunction isPaused() view returns (bool)
maxSl_P
viewfunction maxSl_P() view returns (uint8)
registry
viewfunction registry() view returns (address)
closeTradeMarketCallback
nonpayablefunction closeTradeMarketCallback(tuple a)
done
nonpayablefunction done()
executeAutomationCloseOrderCallback
nonpayablefunction executeAutomationCloseOrderCallback(tuple a)
executeAutomationOpenOrderCallback
nonpayablefunction executeAutomationOpenOrderCallback(tuple a)
handleRemoveCollateral
nonpayablefunction handleRemoveCollateral(tuple a)
initialize
nonpayablefunction initialize(address _registry)
openTradeMarketCallback
nonpayablefunction openTradeMarketCallback(tuple a)
pause
nonpayablefunction pause()
setMaxSl_P
nonpayablefunction setMaxSl_P(uint256 _maxSl_P)
setVaultMaxAllowance
nonpayablefunction setVaultMaxAllowance()
unsetVaultMaxAllowance
nonpayablefunction unsetVaultMaxAllowance(address _oldVault)
events
AutomationCloseOrderCanceled
event AutomationCloseOrderCanceled(uint256 indexed orderId, uint256 indexed tradeId, address indexed trader, uint256 pairIndex, uint8 orderType, uint8 cancelReason)
AutomationOpenOrderCanceled
event AutomationOpenOrderCanceled(uint256 indexed orderId, address indexed trader, uint256 indexed pairIndex, uint8 cancelReason)
DevFeeCharged
event DevFeeCharged(uint256 indexed tradeId, address indexed trader, uint256 amount)
Done
event Done(bool done)
FeesCharged
event FeesCharged(uint256 indexed orderId, uint256 indexed tradeId, address indexed trader, uint256 rolloverFees, int256 fundingFees)
Initialized
event Initialized(uint64 version)
LimitCloseExecuted
event LimitCloseExecuted(uint256 indexed orderId, uint256 indexed tradeId, uint8 orderType, uint256 price, uint256 priceImpactP, int256 percentProfit, uint256 usdcSentToTrader)
LimitOpenExecuted
event LimitOpenExecuted(uint256 indexed orderId, uint256 limitIndex, (uint256 collateral, uint192 openPrice, uint192 tp, uint192 sl, address trader, uint32 leverage, uint16 pairIndex, uint8 index, bool buy) t, uint256 priceImpactP, uint256 tradeNotional)
MarketCloseCanceled
event MarketCloseCanceled(uint256 indexed orderId, uint256 indexed tradeId, address indexed trader, uint256 pairIndex, uint256 index, uint8 cancelReason)
MarketCloseExecuted
event MarketCloseExecuted(uint256 indexed orderId, uint256 indexed tradeId, uint256 price, uint256 priceImpactP, int256 percentProfit, uint256 usdcSentToTrader)
MarketCloseExecutedV2
event MarketCloseExecutedV2(uint256 indexed orderId, uint256 indexed tradeId, uint256 price, uint256 priceImpactP, int256 percentProfit, uint256 usdcSentToTrader, uint256 percentageClosed)
MarketOpenCanceled
event MarketOpenCanceled(uint256 indexed orderId, address indexed trader, uint256 indexed pairIndex, uint8 cancelReason)
MarketOpenExecuted
event MarketOpenExecuted(uint256 indexed orderId, (uint256 collateral, uint192 openPrice, uint192 tp, uint192 sl, address trader, uint32 leverage, uint16 pairIndex, uint8 index, bool buy) t, uint256 priceImpactP, uint256 tradeNotional)
MaxSlPUpdated
event MaxSlPUpdated(uint256 value)
OracleFeeCharged
event OracleFeeCharged(uint256 indexed tradeId, address indexed trader, uint256 amount)
Paused
event Paused(bool paused)
RemoveCollateralExecuted
event RemoveCollateralExecuted(uint256 indexed orderId, uint256 indexed tradeId, address indexed trader, uint16 pairIndex, uint256 removeAmount, uint32 leverage, uint192 tp, uint192 sl)
RemoveCollateralRejected
event RemoveCollateralRejected(uint256 indexed orderId, uint256 indexed tradeId, address indexed trader, uint16 pairIndex, uint256 removeAmount, uint8 reason)
TradeSizeRefUpdated
event TradeSizeRefUpdated(uint256 value)
VaultLiqFeeCharged
event VaultLiqFeeCharged(uint256 indexed orderId, uint256 indexed tradeId, address indexed trader, uint256 amount)
VaultOpeningFeeCharged
event VaultOpeningFeeCharged(uint256 indexed tradeId, address indexed trader, uint256 amount)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
IsDone
error IsDone()
IsPaused
error IsPaused()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotGov
error NotGov(address a)
NotInitializing
error NotInitializing()
NotManager
error NotManager(address a)
NotPriceUpKeep
error NotPriceUpKeep(address a)
NotTrading
error NotTrading(address a)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WrongParams
error WrongParams()
creation bytecode
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b604051615e949081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe610140604052600436101561001357600080fd5b600060a05260a0513560e01c806311008081146114775780631b0268f1146112d6578063278f6f82146107725780634e8fdedb146107515780635f7a93af146107305780636c4dd9ef1461070a5780637b103999146106df5780638456cb59146105e65780638f062227146105be578063a4cd32461461059d578063ae8421e114610528578063b187bd2614610500578063bfbf1d051461030b578063c4d66de8146101855763d01a4f4e146100c857600080fd5b3461017f57602036600319011261017f576004356100e461525c565b80158015610175575b6101635760ff8111610144576000805460ff60a01b191660a083901b60ff60a01b161790556040519081527fd5d405e0c1d25062ed37804ebd9019e1b2c494014d55c74d5df811301a76fae890602090a160a05180f35b604490604051906306dfcc6560e41b8252600860048301526024820152fd5b604051635863f78960e01b8152600490fd5b50606481116100ed565b60a05180fd5b3461017f57602036600319011261017f576004356001600160a01b0381169081900361017f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c1615916001600160401b03811680159081610303575b60011490816102f9575b1590816102f0575b506102de5767ffffffffffffffff1981166001178455826102bf575b5080156101635760a05180546001600160a01b0319169190911790556000805460ff60a01b1916605560a01b179055604051605581527fd5d405e0c1d25062ed37804ebd9019e1b2c494014d55c74d5df811301a76fae890602090a1610281575b60a05180f35b805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a18061027b565b68ffffffffffffffffff1916680100000000000000011783558361021a565b60405163f92ee8a960e01b8152600490fd5b905015856101fe565b303b1591506101f6565b8491506101ec565b3461017f5760208060031936011261017f576004356001600160a01b03818116929183900361017f5761033c61525c565b6024828260a051541660405192838092630d2020dd60e01b82526d74726164696e6753746f7261676560901b60048301525afa9081156104bc578291849160a051916104c9575b50600460405180948193631f209df760e11b8352165afa9081156104bc5760a05191610487575b5016604051918083019060008063095ea7b360e01b93848152876024880152816044880152604487526103dc87612184565b86519082875af16103eb615c4d565b8161044a575b5080610440575b156104035760a05180f35b6104369461043192604051928301526024820152600060448201526044815261042b81612184565b82615c7d565b615c7d565b808080808061027b565b50823b15156103f8565b80915051828115918215610463575b50509050866103f1565b8380929350010312610482578161047a910161229b565b808288610459565b600080fd5b90508281813d83116104b5575b61049e818361219f565b8101031261017f576104af906121c0565b846103aa565b503d610494565b6040513d60a051823e3d90fd5b92505081813d83116104f9575b6104e0818361219f565b8101031261017f57826104f383926121c0565b86610383565b503d6104d6565b3461017f5760a05136600319011261017f57602060ff60a0515460a81c166040519015158152f35b3461017f5760a05136600319011261017f5761054261525c565b7fc3a6f986261de9467c2838c6df8ef74f9107855159205600c0bc7a14cdfd3888602060a0515460ff60b01b60ff8260b01c161560b01b169060ff60b01b1916178060a0515560ff6040519160b01c1615158152a160a05180f35b3461017f5760a036600319011261017f576105b6614857565b61027b613a0e565b3461017f5760a05136600319011261017f57602060ff60a0515460b01c166040519015158152f35b3461017f5760a05136600319011261017f5760a0515460405163481c6a7560e01b81526001600160a01b03906020816004818587165afa9081156104bc5760a051916106a5575b5016330361068d5760207f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29160ff60a81b60ff8260a81c161560a81b169060ff60a81b1916178060a0515560ff6040519160a81c1615158152a160a05180f35b604051632a19e83360e01b8152336004820152602490fd5b90506020813d6020116106d7575b816106c06020938361219f565b8101031261017f576106d1906121c0565b8361062d565b3d91506106b3565b3461017f5760a05136600319011261017f5760a051546040516001600160a01b039091168152602090f35b3461017f5760a05136600319011261017f57602060ff60a0515460a01c16604051908152f35b3461017f5760a036600319011261017f57610749614857565b61027b61302e565b3461017f5760a036600319011261017f5761076a614857565b61027b6126ec565b3461017f5760a036600319011261017f5761078b614857565b60a05154604051630d2020dd60e01b81526d74726164696e6753746f7261676560901b60048201526001600160a01b03821691602082602481865afa9182156104bc5760a05192611297575b5060206024929360405193848092630d2020dd60e01b82526870616972496e666f7360b81b60048301525afa9182156104bc5760a0519261125b575b50604051632427913560e21b81526004803590820152906080826024816001600160a01b0388165afa9081156104bc5760a0519384938493611222575b5061085a846148b6565b604051634037cc4760e11b815291610180838061087c87898b60048501612351565b03816001600160a01b038b165afa9283156104bc5760a051936110e7575b5060a81c60ff161561101a576001915b82600f8110156109fa5715610a12575b5050600f8110156109fa57806109ac575b506001600160a01b0384163b1561017f57604051633f48b99160e21b81526001600160a01b03938416600482015261ffff92909216602483015260ff1660448201526003606482015260a051909182906084908290849087165af180156104bc57610996575b506001600160a01b0381163b1561017f57604051631520bc8160e21b8152600480359082015260a05190918290602490829084906001600160a01b03165af180156104bc576109805760a05180f35b6109899061213a565b60a05161017f578061027b565b61099f9061213a565b60a05161017f5781610931565b6109b9604051809261260d565b61ffff8316906001600160a01b03851690600435907fd8c35243e8d92c5b0d8cf4cf02513a8d499dd7fd84c2c1514dc4d6a433a2b1d390602090a4846108cb565b634e487b7160e01b60a051526021600452602460a051fd5b909150610a1d612379565b906040610a28612389565b610a30612399565b6101608401518351636f641d8f60e01b8152601796870b600482015292860b6024840152940b60448201526001606482015292151560848401528260a48173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af480156104bc5760a051928391610fe5575b506024610aa1612379565b60a05154604051630d2020dd60e01b81526b706169727353746f7261676560a01b60048201529196919260209184919082906001600160a01b03165afa9182156104bc5760a05192610fa9575b50604080516302a100af60e31b81528551600482015260208601516001600160c01b03908116602483015291860151821660448201526060860151909116606482015260808501516001600160a01b0316608482015260a085015163ffffffff90811660a483015260c0860151811660c483015260e08601511660e482015261010085015161ffff1661010482015261012085015190969060038110156109fa5761012488015261014085015160ff16610144880152610160850151151561016488015261018487018490526001600160c01b03166101a48701526101c486018590526001600160a01b039081166101e487015290811661020486015288166102248501526020846102448173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af49384156104bc5760a05194610f78575b5083600f8110156109fa5715610c38575b506108ba565b610cea90610c478351916152fa565b60018060c01b0360408501511660018060c01b0360608601511660018060a01b0360808701511663ffffffff60a0880151169161ffff610100890151169361016089015115159560405197610c9b8961214d565b885260018060c01b0316602088015260408701526060860152608085015260a084015260c083015260a05160e083015261010082015260018060c01b03610ce0612379565b169060043561532d565b9160018060a01b0360808401511660e061ffff60c08601511660ff828701511692610d2860405194859384936354307131871b855260048501612351565b03816001600160a01b038d165afa80156104bc5760209160a05191610f49575b50015160a05154604051630d2020dd60e01b8152661bdc195b941b9b60ca1b600482015291939190602090829060249082906001600160a01b03165afa9081156104bc5760a05191610f0f575b50610d9e612379565b602086015160c087015161010088015115159361ffff909116916001600160c01b03166001600160a01b0382163b1561017f578790610df7604051968795869485946319c819fb60e01b865260a051996004870161261a565b60a051919003926001600160a01b03165af180156104bc57610ef9575b50608081015161010082015161014083015161ffff909116916001600160a01b039081169160ff16908c163b1561017f57610e689260405193849283926304d8c22960e01b845260a0519560048501612351565b60a0519190039082906001600160a01b038f165af180156104bc57610ee3575b5060ff610140610ea692015116936040519485526020850190612553565b6101408301526101608201527f19c8a7be769082e3461a241a3b6af0adad9302b7c1623ab8adb4d787fd9df67c61018060043592a2858080610c32565b610eec9061213a565b60a05161017f5789610e88565b610f029061213a565b60a05161017f5789610e14565b90506020813d602011610f41575b81610f2a6020938361219f565b8101031261017f57610f3b906121c0565b8a610d95565b3d9150610f1d565b610f6b915060e03d60e011610f71575b610f63818361219f565b8101906123a9565b8a610d48565b503d610f59565b610f9b91945060203d602011610fa2575b610f93818361219f565b810190612518565b9288610c21565b503d610f89565b9091506020813d602011610fdd575b81610fc56020938361219f565b8101031261017f57610fd6906121c0565b908a610aee565b3d9150610fb8565b905061100a91925060403d604011611013575b611002818361219f565b810190612426565b91909188610a96565b503d610ff8565b611022612379565b60170b6110325760025b916108aa565b604051633d3aa41760e01b81526020818061105287898b60048501612351565b03816001600160a01b038b165afa9081156104bc5760a051916110ad575b5061107c57600961102c565b61109963ffffffff60a084015116611092612509565b9086614b23565b156110a557600d61102c565b60a05161102c565b90506020813d6020116110df575b816110c86020938361219f565b8101031261017f576110d99061229b565b87611070565b3d91506110bb565b909250610180813d6101801161121a575b81611106610180938361219f565b8101031261017f57604051806101808101106001600160401b03610180830111176112045761018081016040528151815261114360208301612276565b602082015261115460408301612276565b604082015261116560608301612276565b6060820152611176608083016121c0565b608082015261118760a0830161228a565b60a082015261119860c0830161228a565b60c08201526111a960e0830161228a565b60e08201526101006111bc818401612219565b9082015261012082015191600383101561017f5760ff926101208301526101406111e7818301612228565b908301526111f961016080920161229b565b90820152929061089a565b634e487b7160e01b600052604160045260246000fd5b3d91506110f8565b9194509250611249915060803d608011611254575b611241818361219f565b810190612236565b509193909286610850565b503d611237565b9091506020813d60201161128f575b816112776020938361219f565b8101031261017f57611288906121c0565b9083610813565b3d915061126a565b91506020823d6020116112ce575b816112b26020938361219f565b8101031261017f5760206112c76024936121c0565b92506107d7565b3d91506112a5565b3461017f5760a05136600319011261017f576112f061525c565b60a05154604051630d2020dd60e01b8082526d74726164696e6753746f7261676560901b60048301526001600160a01b0392602092908416908381602481855afa9081156104bc578591859160a05191611440575b50600460405180948193631f209df760e11b8352165afa9081156104bc578491869160a05191611407575b5016926024604051809481938252641d985d5b1d60da1b60048301525afa9081156104bc5760a051916113d2575b50604051926000808286019663095ea7b360e01b94858952169687602488015281196044880152604487526103dc87612184565b90508281813d8311611400575b6113e9818361219f565b8101031261017f576113fa906121c0565b8461139e565b503d6113df565b928092508391503d8311611439575b611420818361219f565b8101031261017f578461143385926121c0565b87611370565b503d611416565b92505081813d8311611470575b611457818361219f565b8101031261017f578361146a86926121c0565b87611345565b503d61144d565b3461017f5760a036600319011261017f57611490614857565b60a05154604051630d2020dd60e01b81526d74726164696e6753746f7261676560901b60048201526001600160a01b0390911690602081602481855afa80156104bc5760a0516080526120f9575b50602060249160405192838092630d2020dd60e01b82526870616972496e666f7360b81b60048301525afa9081156104bc5760a051916120bf575b506115226121d4565b50604051632427913560e21b8152600480359082015260808051829060249082906001600160a01b03165afa9182156104bc5760a0519283928391829190612092575b509061159491611574856148b6565b604051809381926309ef0c9160e31b835261012097889560048501612351565b038160018060a01b03608051165afa9283156104bc5760a05193612058575b50506115bd612379565b60170b61203a5760025b809160018060a01b036080850151169160e061ffff60c08701511660ff82880151169461160760405196879384936354307131871b855260048501612351565b038160018060a01b03608051165afa9283156104bc5760a05193612019575b50600f8110156109fa57156118c4575b50600f8210156109fa5781611730575b505060018060a01b036080820151169160ff60e061ffff60c0850151169301511660018060a01b03608051163b1561017f576116a39260405194633f48b99160e21b86526004860152602485015260448401526064830190612530565b60a0516080518290608490829084906001600160a01b03165af180156104bc5761171a575b506080516001600160a01b03163b1561017f57604051631520bc8160e21b8152600480359082015260a0516080518290602490829084906001600160a01b03165af180156104bc576109805760a05180f35b6117239061213a565b60a05161017f57806116c8565b60a05154604051630d2020dd60e01b8152661bdc195b941b9b60ca1b600482015290602090829060249082906001600160a01b03165afa9081156104bc5760a0519161188a575b50611780612379565b60c085015161ffff166001600160a01b0383163b1561017f576117ee9260405180809581946319c819fb60e01b835260a051966004840160c09061ffff600093959460e083019660170b83528460208401528460408401528460608401521660808201528260a08201520152565b60a051919003926001600160a01b03165af180156104bc57611874575b505160018060a01b036080840151169161184561ffff60c0860151169160405192835261183b6020840188612530565b604083019061260d565b7ff754b2e693db8bafa46ae13e0166d6d837c248125448464978f89113b1dfe68b606060043592a48280611646565b61187d9061213a565b60a05161017f578461180b565b90506020813d6020116118bc575b816118a56020938361219f565b8101031261017f576118b6906121c0565b85611777565b3d9150611898565b915060068410156109fa576002841491821561200e575b6118e3612379565b9060406118ee612389565b6118f6612399565b9361191c610100890151151584519687948594636f641d8f60e01b86526004860161243c565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af49081156104bc5760a051928392611fea575b50602086015161195f906001600160c01b0316614afa565b8515611fda57604061196f612379565b60170b5b6101008901511515926119b763ffffffff60a08c0151169163ffffffff858b01511660030b908551968795869563020b139360e01b875260030b9260048701612469565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af49081156104bc5760a05191611fba575b50808760018060a01b0360808201511661ffff60c08301511690602460ff60e08501511694610100850151151563ffffffff60a087519701511690602060018060a01b0360a051541660405195868092630d2020dd60e01b82526b706169727353746f7261676560a01b60048301525afa9384156104bc578f9060a05195611f73575b5060c00151604051630bdf25df60e01b815261ffff909116600482015293602090859060249082906001600160a01b03165afa9384156104bc5760a05194611f2b575b5090608096611acc949392604051998a98899863c64d8bd360e01b8a5260048a016124b7565b038160a05160018060a01b0388165af19081156104bc5760a051938a60a0519160a0519360a05195611ef1575b508b87611b4a611b2461ffff60c08501511663ffffffff60a086015116611b1e612509565b91614b23565b92611b4060405196636edb5cd360e11b88526004880190612530565b6024860190612553565b8961014485015261016484015215156101848301526020826101a48173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af49182156104bc5760a05192611ed0575b50819a600f8310156109fa578c9215611baf575b505050505050505050611636565b611d94575b50508751611bcf9186611d8b575b868c805193600435614c5f565b60a05154604051630d2020dd60e01b8152661bdc195b941b9b60ca1b600482015290602090829060249082906001600160a01b03165afa80156104bc578a9160a05191611d4f575b506001600160a01b0316611c29612379565b9060018060c01b036020840151169060208b01519161010061ffff60c087015116950151151590823b1561017f57611c7d8b92604051978896879586956319c819fb60e01b875260a0519a600488016125cd565b039160a051905af180156104bc57611d40575b5086519060018060a01b0360808b0151169260405191825260208201527f90e193c8ac2d820046673ee09b9e03c84c83e4ba84ccfedc382c46cc93a5fe1b604060043592a484519382611d39576002935b611cee6040518096612530565b60208501526040840152606083015260808201527f6d2428396742e21de629bc9398950301d56c1aa493d8de859c4ee751aa02a9b660a060043592a384808080808080898180611ba1565b8893611ce1565b611d499061213a565b8a611c90565b9150506020813d602011611d83575b81611d6b6020938361219f565b8101031261017f57611d7d8a916121c0565b8c611c17565b3d9150611d5e565b5060a051611bc2565b91955093506040611db060018060c01b03602087015116614afa565b611db988614afa565b90611df88b63ffffffff858160a06101008d015115159c01511660030b9201511660030b908551998a95869563020b139360e01b875260048701612469565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af49384156104bc5760a05194611eae575b5060208460a48c51604051948593849263c22ff7bf60e01b84526004840152602483015286604483015287606483015289608483015260018060a01b03165afa80156104bc5760a05190611e7a575b949050898c611bb4565b506020813d602011611ea6575b81611e946020938361219f565b8101031261017f57611bcf9051611e70565b3d9150611e87565b611ec891945060403d60401161101357611002818361219f565b50928b611e21565b611eea91925060203d602011610fa257610f93818361219f565b908d611b8d565b925093509450611f19915060803d608011611f24575b611f11818361219f565b810190612495565b92959092938d611af9565b503d611f07565b935091906020843d602011611f6b575b81611f486020938361219f565b8101031261017f57608096611f5f611acc9561228a565b94509692909192611aa6565b3d9150611f3b565b9450506020843d602011611fb2575b81611f8f6020938361219f565b8101031261017f5760208f9460c0611fa961ffff926121c0565b96925050611a63565b3d9150611f82565b611fd3915060403d60401161101357611002818361219f565b50886119e0565b6040611fe584614afa565b611973565b909250612006915060403d60401161101357611002818361219f565b909187611947565b6001851492506118db565b61203391935060e03d60e011610f7157610f63818361219f565b9186611626565b60a082015163ffffffff166120505760096115c7565b60a0516115c7565b80919293503d821161208b575b61206f818461219f565b8201908282031261017f57612083916122a8565b9083806115b3565b503d612065565b9150506120b4919350611594925060803d60801161125457611241818361219f565b949193919291611565565b90506020813d6020116120f1575b816120da6020938361219f565b8101031261017f576120eb906121c0565b81611519565b3d91506120cd565b6020813d602011612132575b816121126020938361219f565b8101031261017f576024916121286020926121c0565b60805291506114de565b3d9150612105565b6001600160401b03811161120457604052565b61012081019081106001600160401b0382111761120457604052565b60e081019081106001600160401b0382111761120457604052565b608081019081106001600160401b0382111761120457604052565b90601f801991011681019081106001600160401b0382111761120457604052565b51906001600160a01b038216820361048257565b604051906121e18261214d565b816101006000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b519061ffff8216820361048257565b519060ff8216820361048257565b91908260809103126104825761224b826121c0565b9161225860208201612219565b91606061226760408401612228565b92015160068110156104825790565b51906001600160c01b038216820361048257565b519063ffffffff8216820361048257565b5190811515820361048257565b919082610120910312610482576040516122c18161214d565b8092805182526122d360208201612276565b60208301526122e460408201612276565b60408301526122f560608201612276565b6060830152612306608082016121c0565b608083015261231760a0820161228a565b60a083015261232860c08201612219565b60c083015261233960e08201612228565b60e083015261234c61010080920161229b565b910152565b6001600160a01b03909116815261ffff909116602082015260ff909116604082015260600190565b6024358060170b81036104825790565b6064358060170b81036104825790565b6044358060170b81036104825790565b908160e09103126104825761241e60c0604051926123c684612169565b80518452602081015160208501526123e06040820161228a565b60408501526123f16060820161228a565b60608501526124026080820161228a565b608085015261241360a0820161228a565b60a08501520161229b565b60c082015290565b9190826040910312610482576020825192015190565b601791820b815291810b60208301529190910b604082015260006060820152901515608082015260a00190565b93909594919260809360a0860197865260208601521515604085015260030b606084015260030b910152565b9190826080910312610482578151916020810151916060604083015192015190565b969260ff9061ffff60e09897949b9a96939b6101008b019c60018060a01b03168b521660208a015216604088015215156060870152608086015263ffffffff80931660a086015260c085015216910152565b60843580151581036104825790565b908160209103126104825751600f8110156104825790565b90600682101561253d5752565b634e487b7160e01b600052602160045260246000fd5b80518252602081015160018060c01b038091166020840152806040830151166040840152606082015116606083015260018060a01b03608082015116608083015263ffffffff60a08201511660a083015261ffff60c08201511660c083015260ff60e08201511660e0830152610100809101511515910152565b929460c09460009661ffff9399989460e087019a60170b8752600180891b0316602087015260408601526060850152166080830152151560a08201520152565b90600f82101561253d5752565b60179190910b81526001600160c01b03909116602082015260006040820152606081019190915261ffff909116608082015290151560a0820152600160c082015260e00190565b91906101a0838203126104825782519261267d60208201612276565b926126a461018061269d6126936040860161228a565b95606086016122a8565b9301612219565b90565b919082039182116126b457565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03918216815291166020820152604081019190915260600190565b60008054604051630d2020dd60e01b81526d74726164696e6753746f7261676560901b60048201529291906001600160a01b0316602084602481845afa938415612ac0578294612fbc575b5092602060249460405195868092630d2020dd60e01b82526b706169727353746f7261676560a01b60048301525afa938415612ac0578294612f80575b5060405163b66e6b0560e01b81526004803590820152936101a080866024816001600160a01b0387165afa918215612f755784859786938795612f3a575b50506127c561ffff60c0860151166148b6565b15612f315760243560170b60243514159182612b285760643560170b60643503612b285760443560170b60443503612b28576128559495969760406101008601511515815180988192636f641d8f60e01b835260443560643560243560048601926080929594919560a085019660170b855260170b602085015260170b6040840152600160608401521515910152565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af48015612f265788968991612f01575b506001600160c01b0390612890906152fa565b16602086015261ffff60c08601511663ffffffff60a087015116608435151560843503612eea57906128c59160843591614b23565b15612d8c575050600d905b600f821015612d785781612b5e575050610482576128fd906024356001600160c01b03169060043561532d565b9060018060a01b0360808301511660e061ffff60c08501511660ff82860151169261293b60405194859384936354307131871b855260048501612351565b03816001600160a01b0388165afa908115612b5357906020918691612b34575b5001518454604051630d2020dd60e01b8152661bdc195b941b9b60ca1b600482015291929190602090829060249082906001600160a01b03165afa908115612ae7578691612af6575b50602084015160c085015161010086015115159261ffff909116916001600160a01b03909116906001600160c01b0316813b15612af257908589809493612a04604051978896879586946319c819fb60e01b86526024356004870161261a565b03925af18015612ae757908691612acf575b5050612a256040518094612553565b6101208301526101408201527ff14b61759b2364f919bb1ce7c68a72e7c012733a5225c194c4f9e8460d9bc0ee61016060043592a25b6001600160a01b0381163b15612acb57604051630195728b60e71b81526004803590820152600160248201529082908290604490829084906001600160a01b03165af18015612ac057612aac575050565b612ab6829161213a565b612abd5750565b80fd5b6040513d84823e3d90fd5b5080fd5b612ad89061213a565b612ae3578438612a16565b8480fd5b6040513d88823e3d90fd5b8880fd5b90506020813d602011612b2c575b81612b116020938361219f565b81010312612b2857612b22906121c0565b386129a4565b8580fd5b3d9150612b04565b612b4d915060e03d60e011610f7157610f63818361219f565b3861295b565b6040513d87823e3d90fd5b91509250602061ffff60c08401511660246040518094819363baceb00960e01b8352600483015260018060a01b03165afa8015612b53578590612d2f575b6001600160401b039150168151818111600014612d285760808301516001600160a01b031690612bcd9083906126a7565b906001600160a01b0386163b15612d2457604051633aa10bfd60e21b815291879183918291612c0a91906001600160a01b038b16600485016126ca565b0381836001600160a01b038a165af18015612ae757612d11575b505b6001600160a01b0384163b15612ae357604051635211337360e11b8152600481018290528581602481836001600160a01b038a165af18015612ae757908691612cfd575b505060808201805160405192835261ffff9260c092916001600160a01b031690600435907f9d91cd4852dddb0d19ffae8f8b59fe0b9517ff07645e219e7ddfdb6a3517257a90602090a360018060a01b039051169201511691612cd0604051809261260d565b7f1dc3532663e5566091476fb5aba1e514ef733714c83d4feec5723de6f16c3269602060043592a4612a5b565b612d069061213a565b612ae3578438612c6a565b612d1d9095919561213a565b9338612c24565b8680fd5b9050612c26565b506020813d602011612d70575b81612d496020938361219f565b81010312612ae357516001600160401b0381168103612ae3576001600160401b0390612b9c565b3d9150612d3c565b634e487b7160e01b87526021600452602487fd5b8754604051630d2020dd60e01b81526870616972496e666f7360b81b6004820152899550909290916020836024816001600160a01b0388165afa928315612ef6578a93612eaf575b50604051633c4d91af60e21b815260a89490941c60ff16151560048501526001600160c01b0390811660248086019190915263ffffffff90921660448501529035166064830152612e286084830186612553565b6101a482018690526001600160a01b039081166101c48301528281166101e483015286166102048201526020816102248173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4908115612ea4578791612e85575b50906128d0565b612e9e915060203d602011610fa257610f93818361219f565b38612e7e565b6040513d89823e3d90fd5b9092506020813d602011612eee575b81612ecb6020938361219f565b81010312612eea5790612ee263ffffffff926121c0565b929091612dd4565b8980fd5b3d9150612ebe565b6040513d8c823e3d90fd5b9050612f1d91965060403d60401161101357611002818361219f565b9590953861287d565b6040513d8a823e3d90fd5b50505050509050565b929850925050612f5f9250803d10612f6e575b612f57818361219f565b810190612661565b509196919290919038806127b2565b503d612f4d565b6040513d86823e3d90fd5b9093506020813d602011612fb4575b81612f9c6020938361219f565b81010312612acb57612fad906121c0565b9238612774565b3d9150612f8f565b93506020843d602011612ff3575b81612fd76020938361219f565b81010312612acb576020612fec6024956121c0565b9450612737565b3d9150612fca565b818102929181159184041417156126b457565b8115613018570490565b634e487b7160e01b600052601260045260246000fd5b600061012081905254604051630d2020dd60e01b81526d74726164696e6753746f7261676560901b600482015290602090829060249082906001600160a01b03165afa801561326357610120516101005261395b575b5060405163b66e6b0560e01b815260043560048201526101a0808260248160018060a01b0361010051165afa9182156132635761012051916101205160c0526101205193613930575b50506130e161ffff60c080510151166148b6565b1561392d5760018060a01b03608060c0510151169061012061ffff60c0805101511660ff60e060c0510151169361312c60405195869384936309ef0c9160e31b855260048501612351565b038160018060a01b0361010051165afa9182156132635761012051926138ea575b5060a08201516101205160e05263ffffffff166138c257600960e0525b60018060a01b036080830151169160e061ffff60c08301511660ff8284015116946131a860405196879384936354307131871b855260048501612351565b038160018060a01b0361010051165afa9283156132635761012051936138a1575b50600f60e051101591826132de57600960e051036132f8575b50506132de5760e051613271575b50610100516001600160a01b03163b1561325c57604051630195728b60e71b815260048035908201526101208051602483015251610100518290604490829084906001600160a01b03165af18015613263576132495750565b6132529061213a565b6101205161325c57565b6101205180fd5b6040513d61012051823e3d90fd5b5160018060a01b03608060c0510151169061ffff60c0805101511660ff60e060c05101511660405191825260208201526132b06040820160e05161260d565b7f0bdd660047df040d813bfc73384d39f74983d32bdbb147c7e4785df9d6f16e15606060043592a4386131f0565b634e487b7160e01b61012051526021600452602461012051fd5b909150610120519160e0516131e25761271061331a825161ffff851690612ffb565b049060243560170b6024350361325c5760643560170b6064350361325c5760443560170b6044350361325c5761337892604061010060c05101511515815180968192636f641d8f60e01b83526044356064356024356004860161243c565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4928315613263576101205194859461387a575b5060208301516133bc906001600160c01b0316614afa565b60406133c786614afa565b8961340761010088015115159463ffffffff858160a08c0151169401511660030b908551968795869563020b139360e01b875260030b9260048701612469565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af490811561326357610120519161385a575b506101205154604051630d2020dd60e01b81526870616972496e666f7360b81b600482015294906001600160a01b0316602086602481845afa95861561326357610120519661381e575b5060018060a01b036080830151169561ffff60c0840151169060ff60e085015116916101008501511515986024602063ffffffff60a0890151169660405192838092630d2020dd60e01b82526b706169727353746f7261676560a01b60048301525afa9081156132635761012051916137e4575b50602061ffff60c089015116602460405180948193630bdf25df60e01b8352600483015260018060a01b03165afa908115613263578890610120519261379f575b5090613557916080978b6040519e8f998a98899863c64d8bd360e01b8a5260048a016124b7565b61012051919003926001600160a01b03165af1908115613263576024956101205194610120518c6101205193610120519661376a575b50516135a79291889086908261375f57925b600435614c5f565b6101205154604051630d2020dd60e01b8152661bdc195b941b9b60ca1b60048201529760209189919082906001600160a01b03165afa968715613263576101205197613723575b5060018060c01b036020830151166127106136128d602061ffff8b16910151612ffb565b049761ffff60c0850151169061010085015115159960018060a01b0382163b1561325c578b61365f6040519c8d95869485946319c819fb60e01b86526101205199602435600488016125cd565b61012051919003926001600160a01b03165af19687156132635761ffff97613714575b508a5191608060018060a01b03910151169260405191825260208201527f90e193c8ac2d820046673ee09b9e03c84c83e4ba84ccfedc382c46cc93a5fe1b604060043592a48751956040519586526020860152604085015260608401521660808201527fcaa9acf31fbbd991f267d1fe36d806a81db477c3ad5df64ed81b5155b960e8da60a060043592a338806131e2565b61371d9061213a565b38613682565b9096506020813d602011613757575b8161373f6020938361219f565b8101031261325c57613750906121c0565b95386135ee565b3d9150613732565b50610120519261359f565b9095508497506135a792935061378f915060803d608011611f2457611f11818361219f565b929850919591939250908761358d565b9150506020813d6020116137dc575b816137bb6020938361219f565b8101031261325c57608095886137d36135579361228a565b92509096613530565b3d91506137ae565b90506020813d602011613816575b816137ff6020938361219f565b8101031261325c57613810906121c0565b386134ef565b3d91506137f2565b9095506020813d602011613852575b8161383a6020938361219f565b8101031261325c5761384b906121c0565b943861347b565b3d915061382d565b613873915060403d60401161101357611002818361219f565b5038613431565b90935061389791945060403d60401161101357611002818361219f565b93909392386133a4565b6138bb91935060e03d60e011610f7157610f63818361219f565b91386131c9565b6024358060170b810361325c5760170b6138e15760025b60e05261316a565b610120516138d9565b909150610120903d61012011613925575b613905828261219f565b61012081838101031261325c5761391e918101906122a8565b903861314d565b3d91506138fb565b50565b61394a935080919250903d10612f6e57612f57818361219f565b92509290509160c0529038806130cd565b6020813d60201161398f575b816139746020938361219f565b8101031261325c57613985906121c0565b6101005238613084565b3d9150613967565b6001600160c01b0391821681529116602082015263ffffffff918216604082015291166060820152901515608082015260a00190565b6001600160c01b0391821681529116602082015263ffffffff918216604082015291166060820152901515608082015260ff9190911660a082015260c00190565b60008054604051630d2020dd60e01b81526d74726164696e6753746f7261676560901b60048201526001600160a01b0390911691602082602481865afa9182156147cb57819261481b575b50604051630d2020dd60e01b81526b706169727353746f7261676560a01b600482015292602084602481845afa938415612ac05782946147d8575b5090602060249260405193848092630d2020dd60e01b82526870616972496e666f7360b81b60048301525afa9182156147cb57819261478f575b5060405163a1a7935560e01b81526004803590820152926080846024816001600160a01b0385165afa938415612ac05782946146f3575b50613b1761ffff6040860151166148b6565b6020840151604080860151606087015191516309ef0c9160e31b815297926101209289928392613b5c9260ff169161ffff16906001600160a01b031660048501612351565b03816001600160a01b0386165afa9586156140985783966146b1575b50602085015160408087015160608801519151635430713160e01b8152969260e09288928392613bbd9260ff169161ffff16906001600160a01b031660048501612351565b03816001600160a01b0387165afa948515612f75578495614690575b5060a087015163ffffffff168061426857505060095b8354604051630d2020dd60e01b8152661bdc195b941b9b60ca1b600482015290602090829060249082906001600160a01b03165afa908115612b5357859161422e575b5060243560170b60243503612ae35760c088015161ffff166001600160a01b0382163b15612b2857613cb2869283926040519485809481936319c819fb60e01b83526024356004840160c09061ffff600093959460e083019660170b83528460208401528460408401528460608401521660808201528260a08201520152565b03926001600160a01b03165af18015612b535761421b575b50600f811015614207578061415b575060208681015160408089015160a08a0151888301516101008c0151935163750e52c760e01b8152959486948594613d31949115159363ffffffff908116939216916001600160c01b03918216911660048701613997565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4908115612f75578491614121575b5060018060c01b0316604087015260018060c01b03602087015116602060018060c01b0360608901511663ffffffff60a08a01511692613dc863ffffffff60408a0151166101008c0151151560ff8a5460a01c16916040519788968796632b38c62360e11b8852600488016139cd565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4908115612f755784916140e3575b506001600160c01b0316606087015260208501518551906001600160a01b039081169084163b15612ae357604051633aa10bfd60e21b815291859183918291613e4691906001600160a01b038916600485016126ca565b0381836001600160a01b0388165af18015612f75579084916140cf575b50506001600160a01b0382163b156140cb576040516311729ded60e31b8152613e8f6004820188612553565b838161012481836001600160a01b0388165af18015612f75579084916140b7575b505060c086015185516101008801511515929161ffff166001600160a01b0383163b15612b285760405163acfd174160e01b815261ffff919091166004820152602481019190915291151560448301526000606483015283908290608490829084906001600160a01b03165af18015614098579083916140a3575b50506001600160a01b0381163b15612acb576040516323d1f4ed60e01b815260048035908201528281602481836001600160a01b0387165af1801561409857908391614084575b505060208401516040850151606086015160ff169261ffff909116916001600160a01b03908116919081163b15612ae357849291836084926040519687958694633f48b99160e21b86526004860152602485015260448401526005606484015260018060a01b03165af18015612ac057614070575b5050519060018060a01b036020820151169261ffff60408301511691519063ffffffff60a08201511660018060c01b0360408301511691606060018060c01b03910151169260405194855260208501526040840152606083015260808201527fd182bace90998b7a07a54165b7beb87743756042148ff3dceb8181dd446533f460a060043592a4565b61407a829161213a565b612abd5780613fe7565b61408d9061213a565b612acb578138613f72565b6040513d85823e3d90fd5b6140ac9061213a565b612acb578138613f2b565b6140c09061213a565b6140cb578238613eb0565b8280fd5b6140d89061213a565b6140cb578238613e63565b90506020813d602011614119575b816140fe6020938361219f565b810103126141155761410f90612276565b38613def565b8380fd5b3d91506140f1565b90506020813d602011614153575b8161413c6020938361219f565b810103126141155761414d90612276565b38613d58565b3d915061412f565b93919492955050519061419560018060a01b036020830151169361ffff60408401511692516040519384526020840152604083019061260d565b7ffa3942c9d7a3e3cc5d2acfd702a10e04da4cc44e8d69517043fb38ebee4157c4606060043592a46001600160a01b0381163b15612acb576040516323d1f4ed60e01b815260048035908201529082908290602490829084906001600160a01b03165af18015612ac057612aac575050565b634e487b7160e01b84526021600452602484fd5b6142279094919461213a565b9238613cca565b90506020813d602011614260575b816142496020938361219f565b81010312612ae35761425a906121c0565b38613c32565b3d915061423c565b60243560170b60243503612ae35760243560170b6142895750506002613bef565b614294908851615bf8565b6142a0875189516126a7565b8852620f4240818181020481148215171561467c576127106142ce63ffffffff936142d4938c51910261300e565b04615c1d565b168060a089015261ffff60c08901511690608435151560843503612b2857906143009160843591614b23565b1561430d5750600d613bef565b60643560170b606435036141155760443560170b604435036141155761435860406101008901511515815180938192636f641d8f60e01b83526044356064356024356004860161243c565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4908115612b5357859161465b575b5060208801516040906143a49061439e906001600160c01b0316614afa565b92614afa565b6101008a01511515926143e863ffffffff60a08d0151169163ffffffff858c01511660030b908551968795869563020b139360e01b875260030b9260048701612469565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4918215612b53576024928692839291614638575b508654604051630d2020dd60e01b81526b706169727353746f7261676560a01b60048201529460209186919082906001600160a01b03165afa938415612ea45787946145fc575b50602061ffff60c08c015116602460405180978193630bdf25df60e01b8352600483015260018060a01b03165afa938415612ea457908a9188956145bc575b5060809060018060a01b0382840151169061ffff60c0850151168a60ff60e087015116936144f88a896101008a015115159963ffffffff60a0825192015116906040519b8c9a8b998a9863c64d8bd360e01b8a5260048a016124b7565b03926001600160a01b03165af1908115612ea457879161459a575b5060405163a02efcd560e01b81529363ffffffff90614535600487018d612553565b16610124850152610144840152146101648201526020816101848173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4908115612f7557849161457b575b50613bef565b614594915060203d602011610fa257610f93818361219f565b38614575565b6145b3915060803d608011611f2457611f11818361219f565b50505038614513565b915093506020813d6020116145f4575b816145d96020938361219f565b81010312612d245760806145ed8b9261228a565b949061449b565b3d91506145cc565b9093506020813d602011614630575b816146186020938361219f565b81010312612d2457614629906121c0565b923861445c565b3d915061460b565b909250614654915060403d60401161101357611002818361219f565b9138614415565b614674915060403d60401161101357611002818361219f565b90503861437f565b634e487b7160e01b86526011600452602486fd5b6146aa91955060e03d60e011610f7157610f63818361219f565b9338613bd9565b9095506101203d610120116146ec575b6146cb818361219f565b61012082828101031261411557906146e5918101906122a8565b9438613b78565b503d6146c1565b9093506080813d608011614787575b8161470f6080938361219f565b81010312612acb5760405190608082018281106001600160401b0382111761477357614767916060916040528051845261474b602082016121c0565b602085015261475c60408201612219565b604085015201612228565b60608201529238613b05565b634e487b7160e01b84526041600452602484fd5b3d9150614702565b9091506020813d6020116147c3575b816147ab6020938361219f565b81010312612acb576147bc906121c0565b9038613ace565b3d915061479e565b50604051903d90823e3d90fd5b9093506020813d602011614813575b816147f46020938361219f565b81010312612acb5790602061480a6024936121c0565b94919250613a94565b3d91506147e7565b9091506020813d60201161484f575b816148376020938361219f565b81010312612acb57614848906121c0565b9038613a59565b3d915061482a565b60ff60005460b01c1661486657565b60405163084986e760e01b8152600490fd5b6001600160401b03811161120457601f01601f191660200190565b60005b8381106148a65750506000910152565b8181015183820152602001614896565b6000805460408051630d2020dd60e01b8082526b706169727353746f7261676560a01b600483015291946001600160a01b03946020948616939092918583602481885afa928315614af0579084918294614ab0575b50602461ffff91898b519687948593630185b6f160e21b8552166004840152165afa918215614aa657908592918492614a2a575b50875161497f602b828661495c8183019788815193849201614893565b81016a0507269636555706b6565760ac1b8882015203600b81018452018261219f565b51915191838110614a15575b5060249088519586938492835260048301525afa928315614a095781936149d0575b5050501633036149ba5750565b5163149d619b60e11b8152336004820152602490fd5b9091809350813d8311614a02575b6149e8818361219f565b81010312612abd57506149fa906121c0565b3880806149ad565b503d6149de565b508451903d90823e3d90fd5b60001990840360031b1b90911690602461498b565b915091503d8084833e614a3d818361219f565b8101908581830312614115578051906001600160401b038211612ae3570181601f8201121561411557805190614a7282614878565b92614a7f8a51948561219f565b828452878383010111612ae3578291614a9f918880809796019101614893565b903861493f565b87513d85823e3d90fd5b87809295508193503d8311614ae9575b614aca818361219f565b810103126141155761ffff6024614ae186936121c0565b94915061490b565b503d614ac0565b88513d86823e3d90fd5b6001600160ff1b038111614b0b5790565b6024906040519063123baf0360e11b82526004820152fd5b9091614b31575b5050600090565b60008054604051630d2020dd60e01b81526b706169727353746f7261676560a01b600482015292602092916001600160a01b039084908690602490829085165afa948515614098578395614c1e575b506024849261ffff926040519788948593630d3cd59f60e01b8552166004840152165afa9182156147cb578192614be2575b505063ffffffff9150168015159182614bd8575b5050614bd3573880614b2a565b600190565b1190503880614bc6565b90915082813d8311614c17575b614bf9818361219f565b81010312612abd5750614c1063ffffffff9161228a565b3880614bb2565b503d614bef565b9094508381813d8311614c58575b614c36818361219f565b810103126140cb5760248492614c4e61ffff936121c0565b9692509250614b80565b503d614c2c565b929360009560018060a01b038754169460405193630d2020dd60e01b96878652641d985d5b1d60da1b6004870152602086602481845afa958615612ef6578a96615220575b50604051978089526d74726164696e6753746f7261676560901b60048a0152602089602481855afa988915615215578b996151d3575b5060209060246040518094819382526b706169727353746f7261676560a01b60048301525afa908115612ef6578a91615199575b5060c08701516101008801511515919061ffff166001600160a01b0382163b156151825760405163acfd174160e01b815261ffff919091166004820152602481018690529115156044830152600060648301528a908290608490829084906001600160a01b03165af18015612ef657615186575b5060808601805160c088015160e09098015191976001600160a01b039182169260ff169161ffff909116908a163b15615182576040516332dedfc760e21b8152600481019390935260248301526044820152606481018490528981608481836001600160a01b038d165af18015612ef657908a9161516e575b505083615065575b505090614e0f916126a7565b9384811115614ef45784614e22916126a7565b82516001600160a01b0390811692919082163b15612d245760405163e66a6e3b60e01b815260048101919091526001600160a01b039283166024820152918691839160449183918591165af18015612b5357908591614ee0575b5050516001600160a01b039081169082163b1561411557604051633aa10bfd60e21b815292849284929091839185918391614ec591906001600160a01b038716600485016126ca565b03926001600160a01b03165af18015612ac057612aac575050565b614ee99061213a565b614115578338614e7c565b9384614f02919392936126a7565b6001600160a01b0384163b15612b2857604051633aa10bfd60e21b8082529390878180614f3d86306001600160a01b038c16600485016126ca565b0381836001600160a01b038b165af18015612f2657908891615051575b505082516001600160a01b03908116929082163b1561504d5760405163a481c14b60e01b815260048101919091526001600160a01b039283166024820152918791839160449183918591165af18015612ae757908691615039575b505083614fc4575b5050505050565b516001600160a01b03908116919083163b15612ae3576040519081529284928492909183918591839161500591906001600160a01b038716600485016126ca565b03926001600160a01b03165af18015612ac057615025575b808080614fbd565b61502f829161213a565b612abd578061501d565b6150429061213a565b612ae3578438614fb5565b8780fd5b61505a9061213a565b612d24578638614f5a565b6001600160a01b0387163b15612af257604051633aa10bfd60e21b815289818061509d88306001600160a01b038e16600485016126ca565b0381836001600160a01b038d165af18015612ef657908a9161515a575b50506001600160a01b0385163b15612af25760405163940a4e4560e01b8152600481018590528981602481836001600160a01b038b165af18015612ef657908a91615146575b505090614e0f93929160018060a01b03875116917f3f6d474cf964df162e489afe448b2ec81e8c3e36738310ed575d7bae97e978766020604051878152a4909138614e03565b61514f9061213a565b612af2578838615100565b6151639061213a565b612af25788386150ba565b6151779061213a565b612af2578838614dfb565b8b80fd5b6151929099919961213a565b9738614d82565b90506020813d6020116151cb575b816151b46020938361219f565b81010312612eea576151c5906121c0565b38614d0e565b3d91506151a7565b9098506020813d60201161520d575b816151ef6020938361219f565b81010312615209576152026020916121c0565b9890614cda565b8a80fd5b3d91506151e2565b6040513d8d823e3d90fd5b9095506020813d602011615254575b8161523c6020938361219f565b81010312612eea5761524d906121c0565b9438614ca4565b3d915061522f565b6000546040516312d43a5160e01b81526001600160a01b03916020908290600490829086165afa9081156152ee576000916152b4575b5016330361529c57565b60405163093650d560e01b8152336004820152602490fd5b90506020813d6020116152e6575b816152cf6020938361219f565b81010312610482576152e0906121c0565b38615292565b3d91506152c2565b6040513d6000823e3d90fd5b6001600160c01b039081811161530e571690565b604490604051906306dfcc6560e41b825260c060048301526024820152fd5b90916153376121d4565b5060008054604051630d2020dd60e01b81526d74726164696e6753746f7261676560901b600482015291939192906001600160a01b0316602084602481845afa938415612b53578594615bb5575b5090602060249260405193848092630d2020dd60e01b82526870616972496e666f7360b81b60048301525afa918215612b53578592615b79575b5061ffff60c087015116906153e0875163ffffffff60a08a01511690615bf8565b63ffffffff60a08901511690610100890151151592604051946310b5d24d60e01b86526004860152602485015260448401526064830152608482015260408160a4818860018060a01b0389165af1908115612b535785908692615b57575b5061544a8188516126a7565b875260808701516040519182526001600160a01b03169084907ff517fcc4f1a1a315b8306bfa646d54670fc02888aa4bce0bc4316c65622cf74090602090a3806159c6575b50608085015160c0860151604051630efb90b760e41b81526001600160a01b03928316600482015261ffff9091166024820152906020908290604490829088165afa8015612b5357859061598c575b60ff91501660e086015260018060c01b03602086015116602060018060c01b0360408801511663ffffffff60a089015116926155376101008a0151151585604051968795869563750e52c760e01b875260048701613997565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4908115612b53578591615952575b5060018060c01b0316604086015260018060c01b03602086015116602060018060c01b0360608801511663ffffffff60a089015116926155c46101008a0151151560ff8a5460a01c169086604051978896879663d6abd20760e01b8852600488016139cd565b038173ed5da206cbbf9c0923362c0a18b19ba03b0bc6645af4908115612b53578591615918575b506001600160c01b03166060860152608085015160c086015160e087015161010088015160ff9091169361ffff909216926001600160a01b03908116929115159082163b1561504d57918760a4928195946040519788968795637b13320760e01b87528b6004880152602487015260448601526064850152608484015260018060a01b03165af18015612f7557908491615904575b50508254604051630d2020dd60e01b81526b706169727353746f7261676560a01b600482015290602090829060249082906001600160a01b03165afa908115612f755784916158ca575b5060c08501518551610100870151151592909161ffff16906001600160a01b0316803b15612d245786929183608492604051968795869463acfd174160e01b8652600486015260248501526044840152600160648401525af18015612f75579084916158b6575b505061574361573e615cf7565b615c1d565b845164e8d4a51000908181029181830414901517156158a25761577360649163ffffffff60a08901511690612ffb565b0490670de0b6b3a7640000918281029281840414901517156126b457602086015163ffffffff926157ad916001600160c01b03169061300e565b8260a08801511690604051946157c286612169565b85526020850152604084015216606082018190526080820181905260a082015260c081018390526001600160a01b0382163b156140cb5760c0610204849283604051958694859363582f039160e11b8552615820600486018c612553565b80516101248601526020810151610144860152604081015163ffffffff90811661016487015260608201518116610184870152608082015181166101a487015260a0820151166101c4860152015115156101e48401526001600160a01b03165af18015612ac05761589057505090565b61589a829161213a565b612abd575090565b634e487b7160e01b85526011600452602485fd5b6158bf9061213a565b6140cb578238615731565b90506020813d6020116158fc575b816158e56020938361219f565b81010312614115576158f6906121c0565b386156ca565b3d91506158d8565b61590d9061213a565b6140cb578238615680565b90506020813d60201161594a575b816159336020938361219f565b81010312612ae35761594490612276565b386155eb565b3d9150615926565b90506020813d602011615984575b8161596d6020938361219f565b81010312612ae35761597e90612276565b3861555e565b3d9150615960565b506020813d6020116159be575b816159a66020938361219f565b81010312612ae3576159b960ff91612228565b6154de565b3d9150615999565b8454604051630d2020dd60e01b8152641d985d5b1d60da1b600482015290602090829060249082906001600160a01b03165afa908115612ae7578691615b1d575b506001600160a01b0385163b15612b2857604051633aa10bfd60e21b8152868180615a4086306001600160a01b038c16600485016126ca565b0381836001600160a01b038b165af18015612ea457615b0a575b506001600160a01b0381163b15612b285760405163940a4e4560e01b8152600481018390529086908290602490829084906001600160a01b03165af18015612ae757908691615af6575b5050615ab18187516126a7565b865260808601516040519182526001600160a01b03169083907f02ee2a74468f7653df86027c1d8fc31e42c062489a5b11098a8913b4ec6231f590602090a33861548f565b615aff9061213a565b612ae3578438615aa4565b615b169096919661213a565b9438615a5a565b90506020813d602011615b4f575b81615b386020938361219f565b81010312612b2857615b49906121c0565b38615a07565b3d9150615b2b565b9050615b72915060403d60401161101357611002818361219f565b903861543e565b9091506020813d602011615bad575b81615b956020938361219f565b81010312612ae357615ba6906121c0565b90386153bf565b3d9150615b88565b9093506020813d602011615bf0575b81615bd16020938361219f565b81010312612ae357906020615be76024936121c0565b94919250615385565b3d9150615bc4565b90606490615c068184615d82565b9209615c0f5790565b600181018091116126b45790565b63ffffffff90818111615c2e571690565b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b3d15615c78573d90615c5e82614878565b91615c6c604051938461219f565b82523d6000602084013e565b606090565b600080615ca69260018060a01b03169360208151910182865af1615c9f615c4d565b9083615dfb565b8051908115159182615cd4575b5050615cbc5750565b60249060405190635274afe760e01b82526004820152fd5b8192509060209181010312610482576020615cef910161229b565b153880615cb3565b61a4b146148015615d76575b8015615d6a575b615d12574390565b60405163a3b1b31d60e01b815260208160048160645afa9081156152ee57600091615d3b575090565b90506020813d602011615d62575b81615d566020938361219f565b81010312610482575190565b3d9150615d49565b5062066eee4614615d0a565b5062066eed4614615d03565b8082029060001983820990828083109203918083039214615df1578160641115615ddf577f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c29936064910990828211900360fe1b910360021c170290565b60405163227bc15360e01b8152600490fd5b5050606491500490565b90615e225750805115615e1057805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580615e55575b615e33575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15615e2b56fea2646970667358221220d80fa068143789add1cc3876d56b82bc5f7dc82ff9c098441a5701727259b3af64736f6c63430008180033