0 txs
0 calls
constructor
No constructor.
functions
getMarketTokenPrice
viewfunction getMarketTokenPrice(DataStore dataStore, tuple market, tuple indexTokenPrice, tuple longTokenPrice, tuple shortTokenPrice, bytes32 pnlFactorType, bool maximize) view returns (int256, tuple)
getPoolValueInfo
viewfunction getPoolValueInfo(DataStore dataStore, tuple market, tuple indexTokenPrice, tuple longTokenPrice, tuple shortTokenPrice, bytes32 pnlFactorType, bool maximize) view returns (tuple)
validateMarketTokenBalance
viewfunction validateMarketTokenBalance(DataStore dataStore, tuple market) view
validateMarketTokenBalance
viewfunction validateMarketTokenBalance(DataStore dataStore, tuple[] markets) view
validateMarketTokenBalance
viewfunction validateMarketTokenBalance(DataStore dataStore, address _market) view
events
No events.
errors
DisabledMarket
error DisabledMarket(address market)
EmptyAddressInMarketTokenBalanceValidation
error EmptyAddressInMarketTokenBalanceValidation(address market, address token)
EmptyMarket
error EmptyMarket()
InvalidMarketTokenBalance
error InvalidMarketTokenBalance(address market, address token, uint256 balance, uint256 expectedMinBalance)
InvalidMarketTokenBalanceForClaimableFunding
error InvalidMarketTokenBalanceForClaimableFunding(address market, address token, uint256 balance, uint256 claimableFundingFeeAmount)
InvalidMarketTokenBalanceForCollateralAmount
error InvalidMarketTokenBalanceForCollateralAmount(address market, address token, uint256 balance, uint256 collateralAmount)
PRBMath__MulDivFixedPointOverflow
error PRBMath__MulDivFixedPointOverflow(uint256 prod1)
PRBMathUD60x18__Exp2InputTooBig
error PRBMathUD60x18__Exp2InputTooBig(uint256 x)
PRBMathUD60x18__LogInputTooSmall
error PRBMathUD60x18__LogInputTooSmall(uint256 x)
UnableToGetBorrowingFactorEmptyPoolUsd
error UnableToGetBorrowingFactorEmptyPoolUsd()
UnableToGetFundingFactorEmptyOpenInterest
error UnableToGetFundingFactorEmptyOpenInterest()
creation bytecode
0x6150d861003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061008d5760003560e01c80631450a8791461009257806339b1348f146100b45780635930015e146100c75780637b672c9a146100da5780637d494dc3146100ed578063b656ff7a14610117578063c468d13514610137578063d2ab7dc014610157578063f2e2a4f514610177575b600080fd5b81801561009e57600080fd5b506100b26100ad3660046149fc565b610197565b005b6100b26100c2366004614a6d565b610240565b6100b26100d5366004614aa3565b610287565b6100b26100e8366004614adc565b6102a4565b6101006100fb366004614ba3565b6102e5565b60405161010e929190614ca2565b60405180910390f35b81801561012357600080fd5b506100b2610132366004614cb7565b61037e565b81801561014357600080fd5b506100b2610152366004614d25565b6103a8565b81801561016357600080fd5b506100b2610172366004614d70565b6104ce565b61018a610185366004614ba3565b610620565b60405161010e9190614dcb565b60006101a5868585856108f4565b9150506101b9868686600001518585610958565b856001600160a01b031663e2a4853a6101d6866000015185610a68565b426040518363ffffffff1660e01b81526004016101f4929190614dda565b6020604051808303816000875af1158015610213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102379190614de8565b50505050505050565b61024f82828360400151610b0f565b80606001516001600160a01b031681604001516001600160a01b031603610274575050565b61028382828360600151610b0f565b5050565b60006102938383610d0d565b905061029f8382610240565b505050565b60005b815181101561029f576102d3838383815181106102c6576102c6614e01565b6020026020010151610240565b806102dd81614e2d565b9150506102a7565b60006102ef614721565b60006102fe8960000151610dc1565b905060006103118b8b8b8b8b8b8b610620565b90508160000361033b5761033068327cb2734119d3b7a9601e1b610e25565b935091506103729050565b8051600003610351576000935091506103729050565b600061036a670de0b6b3a7640000836000015185610e93565b945090925050505b97509795505050505050565b600061038f88888888888888610edc565b905061039d88888884610f23565b505050505050505050565b6000806103b58584610faa565b915091508160001461044d576103de8585856103d086610e25565b6103d990614e46565b611140565b50604051633a5d319360e21b8152737ad48fe9b0605cae1eaf719e7b3c1ba54e96caf09063e974c64c9061041c908790879087908790600401614e62565b60006040518083038186803b15801561043457600080fd5b505af4158015610448573d6000803e3d6000fd5b505050505b846001600160a01b031663e2a4853a61046585611236565b426040518363ffffffff1660e01b8152600401610483929190614dda565b6020604051808303816000875af11580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c69190614de8565b505050505050565b60006104db8584846112cf565b905061050085858560000151866040015160018660600151600001516000015161167d565b61052385858560000151866040015160008660600151602001516000015161167d565b61054685858560000151866060015160018660600151600001516020015161167d565b61056985858560000151866060015160008660600151602001516020015161167d565b8251604084015160808301515151610587928892889260019061177c565b6105aa85858560000151866040015160008660800151602001516000015161177c565b6105cd85858560000151866060015160018660800151600001516020015161177c565b6105f085858560000151866060015160008660800151602001516020015161177c565b6106038584600001518360400151611843565b50846001600160a01b031663e2a4853a61046585600001516118be565b610628614721565b610630614721565b61063f89898a604001516118f6565b60808201526060880151610656908a908a906118f6565b60a08201526106658684611994565b81608001516106749190614e8b565b60c08201526106838584611994565b8160a001516106929190614e8b565b60e0820181905260c08201516106b0916106ab91614ea2565b610e25565b815260408051606081018252888152602081018890529081018690526106d98a8a8360016119ab565b6101008301526106ec8a8a8360006119ab565b82610100018181516106fe9190614ea2565b9052506040516001600160a01b038b169063bd02d0f590610753906020016020808252601d908201527f424f52524f57494e475f4645455f52454345495645525f464143544f52000000604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161078791815260200190565b602060405180830381865afa1580156107a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c89190614de8565b6107de9068327cb2734119d3b7a9601e1b614eb5565b61012083018190526101008301516107fa916106ab9190611a00565b82518390610809908390614ec8565b90525061081b8a8a8a60018815611a19565b60208301819052895160c084015161083a928d9291600191908a611aa5565b602083015261084e8a8a8a60008815611a19565b60408301819052895160e084015161086d928d9291600091908a611aa5565b6040830181905260208301516108839190614ec8565b6060830181905282516108969190614ef0565b825288516108a5908b90611af5565b61014083015260006108b8898615611994565b8361014001516108c89190614e8b565b90506108d381610e25565b835184906108e2908390614ef0565b905250919a9950505050505050505050565b600080600061090887876000015186611b02565b9050600061091888888888611b2e565b9050600061092b89896000015188611d4e565b905060006109398385614e8b565b905060006109478284614ea2565b9b919a509098505050505050505050565b6000856001600160a01b031663340dbab36109738686611da4565b846040518363ffffffff1660e01b8152600401610991929190614dda565b6020604051808303816000875af11580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d49190614de8565b60405163d206b70560e01b81526001600160a01b0380881660048301528616602482015284151560448201526064810184905260848101829052909150737ad48fe9b0605cae1eaf719e7b3c1ba54e96caf09063d206b7059060a40160006040518083038186803b158015610a4857600080fd5b505af4158015610a5c573d6000803e3d6000fd5b50505050505050505050565b6000604051602001610aba9060208082526026908201527f43554d554c41544956455f424f52524f57494e475f464143544f525f5550444160408201526515115117d05560d21b606082015260800190565b60408051601f198184030181528282528051602091820120908301526001600160a01b0385169082015282151560608201526080015b6040516020818303038152906040528051906020012090505b92915050565b81516001600160a01b03161580610b2d57506001600160a01b038116155b15610b5957815160405163e474a42560e01b8152610b5091908390600401614f17565b60405180910390fd5b81516040516370a0823160e01b81526000916001600160a01b038416916370a0823191610b8891600401614f31565b602060405180830381865afa158015610ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc99190614de8565b90506000610bd8858585611de5565b905080821015610c045783516040516333a1ea6b60e01b8152610b509190859085908590600401614e62565b6000610c18868660000151866001806120ff565b9050610c2d86866000015186600060016120ff565b610c379082614ea2565b905080831015610c6357845160405163808c464f60e01b8152610b509190869086908590600401614e62565b6000866001600160a01b031663bd02d0f5610c82886000015188612185565b6040518263ffffffff1660e01b8152600401610ca091815260200190565b602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190614de8565b905080841015610237578551604051639dd026db60e01b8152610b509190879087908590600401614e62565b60408051608081018252600080825260208201819052918101829052606081019190915260405163a8d8fff560e01b815260009073846d1b8c17adfa67fffefe83b7dbebfd598f91069063a8d8fff590610d6d9087908790600401614f17565b608060405180830381865af4158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae9190614f45565b9050610dba8482612200565b9392505050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b099190614de8565b60006001600160ff1b03821115610e8f5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610b50565b5090565b600080610ea985610ea3866122c9565b856122dc565b905060008413610eca57610ebc81610e25565b610ec590614e46565b610ed3565b610ed381610e25565b95945050505050565b600080610eea8989896122e9565b9050610ef68686611a00565b610f009082614eb5565b9050610f0c8484611a00565b610f169082614ea2565b9998505050505050505050565b6000846001600160a01b031663e2a4853a610f3e8686612300565b846040518363ffffffff1660e01b8152600401610f5c929190614dda565b6020604051808303816000875af1158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f9190614de8565b90505b949350505050565b6000806000610fb98585612335565b905080600003610fce57600092509050611139565b6000856001600160a01b031663bd02d0f5610fe8876123ae565b6040518263ffffffff1660e01b815260040161100691815260200190565b602060405180830381865afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190614de8565b90508060000361105d5750600092509050611139565b6000866001600160a01b031663bd02d0f561107788612400565b6040518263ffffffff1660e01b815260040161109591815260200190565b602060405180830381865afa1580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d69190614de8565b90508083116110ee5760008394509450505050611139565b60006110fa8285614eb5565b905060006111088989612443565b905060006111168286611a00565b9050828111156111235750815b8061112e8188614eb5565b975097505050505050505b9250929050565b600080856001600160a01b0316638ca498b061115b866124db565b856040518363ffffffff1660e01b8152600401611179929190614dda565b6020604051808303816000875af1158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc9190614de8565b60405163555a997960e01b8152909150737ad48fe9b0605cae1eaf719e7b3c1ba54e96caf09063555a9979906111fc908890889088908790600401614e62565b60006040518083038186803b15801561121457600080fd5b505af4158015611228573d6000803e3d6000fd5b509298975050505050505050565b60006040516020016112859060208082526023908201527f504f534954494f4e5f494d504143545f504f4f4c5f444953545249425554454460408201526217d05560ea1b606082015260800190565b60408051601f198184030181528282528051602091820120908301526001600160a01b03841690820152606001604051602081830303815290604052805190602001209050919050565b6112d761477b565b6112df61477b565b6112e76147b7565b60006112fb8660400151876060015161251c565b9050611313878760000151886040015160018561254b565b825151528551606087015161132c91899160018561254b565b825151602001528551604087015161134891899160008561254b565b825160200151528551606087015161136491899160008561254b565b82516020908101518101919091528251519081015190516113859190614ea2565b60208084019190915282518101519081015190516113a39190614ea2565b6040830152602082015115806113bb57506040820151155b156113cb57829350505050610dba565b6113d9878760000151612568565b606083015260408201516020830151116113f75781604001516113fd565b81602001515b826080018181525050611423878760000151846020015185604001518660600151612583565b604086015215158452602084018190526080830151606084015161144f9261144a91614e8b565b611a00565b60a08301819052611461908290614fc2565b60a08301528251156114b25760a08201518251515160208401516114869291906122dc565b60c083015260a0820151825151602090810151908401516114a89291906122dc565b60e08301526114f8565b60a08201518251602001515160408401516114ce9291906122dc565b60c083015260a08201518251602090810151015160408401516114f29291906122dc565b60e08301525b8251156115b65760c082015182515151602080880151015161151d9291906001612c8c565b6060840151515260e08201518251516020908101516040880151909101516115489291906001612c8c565b83606001516000015160200181815250506115768260c0015183604001518760200151602001516000612c8c565b83608001516020015160000181815250506115a48260e0015183604001518760400151602001516000612c8c565b60808401516020908101510152611672565b6115db8260c00151836000015160200151600001518760200151602001516001612c8c565b83606001516020015160000181815250506116118260e00151836000015160200151602001518760400151602001516001612c8c565b836060015160200151602001818152505061163f8260c0015183602001518760200151602001516000612c8c565b6080840151515260e08201516020808401516040880151909101516116679291906000612c8c565b608084015151602001525b509095945050505050565b80156104c6576000866001600160a01b0316633dbacd1a61169f878787612cf4565b846040518363ffffffff1660e01b81526004016116bd929190614dda565b6020604051808303816000875af11580156116dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117009190614de8565b6040516261034760e41b8152909150737ad48fe9b0605cae1eaf719e7b3c1ba54e96caf09063061034709061174390899089908990899089908990600401614fd6565b60006040518083038186803b15801561175b57600080fd5b505af415801561176f573d6000803e3d6000fd5b5050505050505050505050565b80156104c6576000866001600160a01b0316633dbacd1a61179e878787612d95565b846040518363ffffffff1660e01b81526004016117bc929190614dda565b6020604051808303816000875af11580156117db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ff9190614de8565b604051636d6b205960e01b8152909150737ad48fe9b0605cae1eaf719e7b3c1ba54e96caf090636d6b20599061174390899089908990899089908990600401614fd6565b6000836001600160a01b0316633e49bed061185d85612de2565b846040518363ffffffff1660e01b815260040161187b929190614dda565b6020604051808303816000875af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa29190614de8565b60006040516020016112859060208082526012908201527111955391125391d7d554111055115117d05560721b604082015260600190565b60008061190b8460400151856060015161251c565b905080856001600160a01b031663bd02d0f561192b876000015187612e25565b6040518263ffffffff1660e01b815260040161194991815260200190565b602060405180830381865afa158015611966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198a9190614de8565b610ed39190614fc2565b6000816119a2578251610dba565b50506020015190565b6000806119b9868685612e56565b905060006119c9878787876108f4565b50905060006119dd888860000151876122e9565b9050806119ea8484611a00565b6119f49190614eb5565b98975050505050505050565b6000610dba838368327cb2734119d3b7a9601e1b6122dc565b600080611a2a6106ab888887612e56565b90506000611a39888887612eb4565b9050811580611a46575080155b15611a5657600092505050610ed3565b6000611a63878787612efb565b90506000611a746106ab8385614e8b565b9050600087611a8c57611a878286614ef0565b611a96565b611a968583614ef0565b9b9a5050505050505050505050565b600080841215611ab6575082611aeb565b6000611ac488848989612f34565b90506000611ad56106ab8684611a00565b9050808613611ae45785611ae6565b805b925050505b9695505050505050565b600080610ed38484610faa565b600080611b10858585612f8b565b905080600003611b24576000915050610dba565b610ed38142614eb5565b600080611b3d86868686612fa6565b905080600003611b51576000915050610fa2565b6000866001600160a01b0316637ae1cfca604051602001611baf9060208082526023908201527f534b49505f424f52524f57494e475f4645455f464f525f534d414c4c45525f5360408201526249444560e81b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611be391815260200190565b602060405180830381865afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c249190615011565b90508015611c8c576000611c3a88886001612e56565b90506000611c4a89896000612e56565b9050858015611c5857508082105b15611c6a576000945050505050610fa2565b85158015611c7757508181105b15611c89576000945050505050610fa2565b50505b6000611c9c888888886000612fe2565b905080600003611cbf57604051630d5f5aef60e31b815260040160405180910390fd5b6000611cd08989600001518861305b565b90508015611cf157611ce6898988878686613076565b945050505050610fa2565b6000611d028a8a6000015189613225565b90506000611d108683613240565b90506000611d1e828661329f565b90506000611d318d8d600001518c6132ad565b9050611d3d8282611a00565b9d9c50505050505050505050505050565b6000836001600160a01b031663bd02d0f5611d698585611da4565b6040518263ffffffff1660e01b8152600401611d8791815260200190565b602060405180830381865afa15801561189a573d6000803e3d6000fd5b6000604051602001610aba906020808252601b908201527a21aaa6aaa620aa24ab22afa127a92927aba4a723afa320a1aa27a960291b604082015260600190565b6000611e206040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b846001600160a01b031663bd02d0f5611e3d866000015186612e25565b6040518263ffffffff1660e01b8152600401611e5b91815260200190565b602060405180830381865afa158015611e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9c9190614de8565b81528351611eac908690856132c8565b602082015283516001600160a01b0386169063bd02d0f590611ece90866132e3565b6040518263ffffffff1660e01b8152600401611eec91815260200190565b602060405180830381865afa158015611f09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2d9190614de8565b604082015283516001600160a01b0386169063bd02d0f590611f4f9086613324565b6040518263ffffffff1660e01b8152600401611f6d91815260200190565b602060405180830381865afa158015611f8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fae9190614de8565b606082015283516001600160a01b0386169063bd02d0f590611fd0908661335e565b6040518263ffffffff1660e01b8152600401611fee91815260200190565b602060405180830381865afa15801561200b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202f9190614de8565b608082015283516001600160a01b0386169063bd02d0f590612051908661339b565b6040518263ffffffff1660e01b815260040161206f91815260200190565b602060405180830381865afa15801561208c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b09190614de8565b60a08201819052608082015160608301516040840151602085015185516120d79190614ea2565b6120e19190614ea2565b6120eb9190614ea2565b6120f59190614ea2565b610ed39190614ea2565b600081866001600160a01b031663bd02d0f561211c8888886133d1565b6040518263ffffffff1660e01b815260040161213a91815260200190565b602060405180830381865afa158015612157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217b9190614de8565b611aeb9190614fc2565b60006040516020016121c39060208082526018908201527710d31052535050931157d1955391125391d7d05353d5539560421b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038086169183019190915283166060820152608001610af0565b80516001600160a01b0316612228576040516302fde0d760e11b815260040160405180910390fd5b6000826001600160a01b0316637ae1cfca6122468460000151613405565b6040518263ffffffff1660e01b815260040161226491815260200190565b602060405180830381865afa158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190615011565b9050801561029f5781516040516309f8c93760e01b8152610b509190600401614f31565b600080821215610e8f5781600003610b09565b6000610fa284848461343d565b6000836001600160a01b031663bd02d0f5611d6985855b6000604051602001610aba906020808252600f908201526e544f54414c5f424f52524f57494e4760881b604082015260600190565b6000826001600160a01b031663bd02d0f561234f846124db565b6040518263ffffffff1660e01b815260040161236d91815260200190565b602060405180830381865afa15801561238a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dba9190614de8565b60006040516020016112859060208082526026908201527f504f534954494f4e5f494d504143545f504f4f4c5f444953545249425554494f6040820152654e5f5241544560d01b606082015260800190565b6000604051602001611285906020808252601f908201527f4d494e5f504f534954494f4e5f494d504143545f504f4f4c5f414d4f554e5400604082015260600190565b600080836001600160a01b031663bd02d0f561245e85611236565b6040518263ffffffff1660e01b815260040161247c91815260200190565b602060405180830381865afa158015612499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124bd9190614de8565b9050806000036124d1576000915050610b09565b610fa28142614eb5565b6000604051602001611285906020808252601b908201527a1413d4d2551253d397d253541050d517d413d3d317d05353d55395602a1b604082015260600190565b6000816001600160a01b0316836001600160a01b03161461253e576001612541565b60025b60ff169392505050565b600081866001600160a01b031663bd02d0f561211c888888613527565b600080836001600160a01b031663bd02d0f561245e856118be565b60008060006125de604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6125e8878761355a565b81526125f48688614ea2565b8160200181815250506126366040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b896001600160a01b031663bd02d0f561264e8b61357c565b6040518263ffffffff1660e01b815260040161266c91815260200190565b602060405180830381865afa158015612689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ad9190614de8565b604082015281511580156126c357506040810151155b156126db576000600160009450945094505050612c81565b8160200151600003612700576040516311423d9560e01b815260040160405180910390fd5b61270a8a8a6135ca565b60608301819052825161271c91613240565b608083018190526020830151612732919061329f565b60a083015260408101516000036128025761274d8a8a6135e4565b604083015260006001600160a01b038b1663bd02d0f561276c8c6135fe565b6040518263ffffffff1660e01b815260040161278a91815260200190565b602060405180830381865afa1580156127a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127cb9190614de8565b905060006127e18460a001518560400151611a00565b9050818111156127ee5750805b95505050858711925060009150612c819050565b61280c8a8a613641565b60c0830181905261281c906122c9565b60e08301526001600160a01b038a1663bd02d0f56128398b61365b565b6040518263ffffffff1660e01b815260040161285791815260200190565b602060405180830381865afa158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190614de8565b81526001600160a01b038a1663bd02d0f56128b28b61369d565b6040518263ffffffff1660e01b81526004016128d091815260200190565b602060405180830381865afa1580156128ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129119190614de8565b602082015260c082015161010083018190526000908190811280156129355750888a115b8061294e575060008460c0015112801561294e57508989115b9050801561298657825160a0850151111561296c576001915061298b565b82602001518460a00151101561298157600291505b61298b565b600191505b600182600281111561299f5761299f61502e565b036129fc5760006129af89610e25565b6129c46106ab8760a001518760400151611a00565b6129ce9190615044565b9050898b10156129e4576129e181614e46565b90505b808560c001516129f49190614ec8565b610100860152505b6002826002811115612a1057612a1061502e565b148015612a20575060e084015115155b15612b2d578b6001600160a01b031663bd02d0f5612a3d8d6136e0565b6040518263ffffffff1660e01b8152600401612a5b91815260200190565b602060405180830381865afa158015612a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9c9190614de8565b60608401819052600090612ab1908a90614e8b565b9050808560e0015111612ae557612acb8560e00151610e25565b8560c00151612ada9190615074565b610100860152612b2b565b6000612af48660e00151610e25565b8660c00151612b039190615074565b905080612b19838860e001516106ab9190614eb5565b612b239190615044565b610100870152505b505b8b6001600160a01b031663bd02d0f5612b458d61372e565b6040518263ffffffff1660e01b8152600401612b6391815260200190565b602060405180830381865afa158015612b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba49190614de8565b60808401526001600160a01b038c1663bd02d0f5612bc18d6135fe565b6040518263ffffffff1660e01b8152600401612bdf91815260200190565b602060405180830381865afa158015612bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c209190614de8565b60a08401819052610100850151612c3991600090613771565b6101008501819052608084015160a0850151612c56929190613771565b6101208501819052612c67906122c9565b600085610120015113856101000151965096509650505050505b955095509592505050565b6000841580612c99575083155b15612ca657506000610fa2565b6000612cd086612cc966038d7ea4c6800068327cb2734119d3b7a9601e1b614e8b565b87866137d1565b90508215612cea57612ce281856137f8565b915050610fa2565b612ce28482614fc2565b6000604051602001612d35906020808252601b908201527a46554e44494e475f4645455f414d4f554e545f5045525f53495a4560281b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038087169183019190915284166060820152821515608082015260a0015b6040516020818303038152906040528051906020012090509392505050565b6000604051602001612d359060208082526021908201527f434c41494d41424c455f46554e44494e475f414d4f554e545f5045525f53495a6040820152604560f81b606082015260800190565b6000604051602001611285906020808252601f908201527f53415645445f46554e44494e475f464143544f525f5045525f5345434f4e4400604082015260600190565b60006040516020016121c3906020808252600b908201526a1413d3d317d05353d5539560aa1b604082015260600190565b600080612e6b8460400151856060015161251c565b90506000612e848686600001518760400151878661254b565b90506000612e9d8787600001518860600151888761254b565b9050612ea98183614ea2565b979650505050505050565b600080612ec98460400151856060015161251c565b90506000612ee28686600001518760400151878661381b565b90506000612e9d8787600001518860600151888761381b565b60008215612f1c5781612f0f578351612f15565b83602001515b9050610dba565b81612f2b578360200151610fa2565b50509051919050565b6000846001600160a01b031663bd02d0f5612f50868686613838565b6040518263ffffffff1660e01b8152600401612f6e91815260200190565b602060405180830381865afa158015610f7b573d6000803e3d6000fd5b6000836001600160a01b031663bd02d0f5611d698585610a68565b6000808215612fd7576000612fbc878786612eb4565b855160200151909150612fcf9082614e8b565b915050610f9f565b611aeb868685612e56565b60008083612ff4578560600151612ffa565b85604001515b905060006130098888846118f6565b905060008415613037578561302657866040015160200151613030565b8660200151602001515b9050613051565b856130475760408701515161304e565b6020870151515b90505b610f168183614e8b565b6000836001600160a01b031663bd02d0f5611d6985856138ac565b60008061308688888888886138e6565b90506000886001600160a01b031663bd02d0f56130a78a600001518a613a47565b6040518263ffffffff1660e01b81526004016130c591815260200190565b602060405180830381865afa1580156130e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131069190614de8565b905060006131148383611a00565b9050848311801561313057508468327cb2734119d3b7a9601e1b115b15611ae65760006131418685614eb5565b905060008b6001600160a01b031663bd02d0f56131628d600001518d613a82565b6040518263ffffffff1660e01b815260040161318091815260200190565b602060405180830381865afa15801561319d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c19190614de8565b90506000848211156131da576131d78583614eb5565b90505b60006131f28968327cb2734119d3b7a9601e1b614eb5565b9050806131ff8584614e8b565b6132099190614fc2565b6132139086614ea2565b9e9d5050505050505050505050505050565b6000836001600160a01b031663bd02d0f5611d698585613ad2565b600068327cb2734119d3b7a9601e1b83101561325e57506000610b09565b68327cb2734119d3b7a9601e1b8203613278575081610b09565b600061329461328685613b11565b61328f85613b11565b613b22565b9050610fa281613b64565b6000610dba83836000613b75565b6000836001600160a01b031663bd02d0f5611d698585613bbd565b6000836001600160a01b031663bd02d0f5611d698585613bf3565b60006040516020016121c3906020808252601b908201527a10d31052535050931157d0d3d31310551154905317d05353d55395602a1b604082015260600190565b60006040516020016121c39060208082526014908201527310d31052535050931157d1915157d05353d5539560621b604082015260600190565b60006040516020016121c39060208082526017908201527610d31052535050931157d55257d1915157d05353d55395604a1b604082015260600190565b60006040516020016121c39060208082526010908201526f10519192531250551157d49155d0549160821b604082015260600190565b6000604051602001612d35906020808252600e908201526d434f4c4c41544552414c5f53554d60901b604082015260600190565b6000604051602001611285906020808252601290820152711254d7d3505492d15517d11254d05093115160721b604082015260600190565b60008080600019858709858702925082811083820303915050806000036134775783828161346d5761346d614fac565b0492505050610dba565b8084116134be5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610b50565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000604051602001612d35906020808252600d908201526c13d4115397d2539511549154d5609a1b604082015260600190565b60008183116135725761356d8383614eb5565b610dba565b610dba8284614eb5565b60006040516020016112859060208082526022908201527f46554e44494e475f494e4352454153455f464143544f525f5045525f5345434f604082015261139160f21b606082015260800190565b6000826001600160a01b031663bd02d0f561234f84613c30565b6000826001600160a01b031663bd02d0f561234f84613c6d565b6000604051602001611285906020808252601d908201527f4d41585f46554e44494e475f464143544f525f5045525f5345434f4e44000000604082015260600190565b6000826001600160a01b031663dc97d96261234f84612de2565b6000604051602001611285906020808252601c908201527b5448524553484f4c445f464f525f535441424c455f46554e44494e4760201b604082015260600190565b6000604051602001611285906020808252601e908201527f5448524553484f4c445f464f525f44454352454153455f46554e44494e470000604082015260600190565b60006040516020016112859060208082526022908201527f46554e44494e475f44454352454153455f464143544f525f5045525f5345434f604082015261139160f21b606082015260800190565b6000604051602001611285906020808252601d908201527f4d494e5f46554e44494e475f464143544f525f5045525f5345434f4e44000000604082015260600190565b60008061377d856122c9565b90508381101561378a5750825b828111156137955750815b600085156137b8576137a96106ab876122c9565b6137b39087615074565b6137bb565b60015b9050806137c783610e25565b611aeb9190615044565b600081156137ed576137e68585856001613ca1565b9050610fa2565b610f9f85858561343d565b60008160016138078286614ea2565b6138119190614eb5565b610dba9190614fc2565b600081866001600160a01b031663bd02d0f561211c888888613cf2565b600060405160200161386c906020808252600e908201526d26a0ac2fa827262fa320a1aa27a960911b604082015260600190565b60408051601f1981840301815282825280516020918201209083015281018590526001600160a01b0384166060820152821515608082015260a001612d76565b6000604051602001610aba9060208082526014908201527327a82a24a6a0a62faaa9a0a3a2afa320a1aa27a960611b604082015260600190565b6000806138f887876000015187613d2f565b905060006139068483611a00565b90506000613914868361329f565b9050886001600160a01b0316637ae1cfca6040516020016139749060208082526025908201527f49474e4f52455f4f50454e5f494e5445524553545f464f525f55534147455f4660408201526420a1aa27a960d91b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016139a891815260200190565b602060405180830381865afa1580156139c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139e99190615011565b156139f8579250610ed3915050565b6000613a098a8a600001518a613d4a565b90506000613a188b8b8b612e56565b90506000613a26828461329f565b9050808411613a355780613a37565b835b9c9b505050505050505050505050565b6000604051602001610aba906020808252601590820152742120a9a2afa127a92927aba4a723afa320a1aa27a960591b604082015260600190565b6000604051602001610aba9060208082526024908201527f41424f56455f4f5054494d414c5f55534147455f424f52524f57494e475f464160408201526321aa27a960e11b606082015260800190565b6000604051602001610aba906020808252601990820152782127a92927aba4a723afa2ac2827a722a72a2fa320a1aa27a960391b604082015260600190565b6000610b0964e8d4a5100083614fc2565b600082600003613b4a578115613b39576000613b43565b670de0b6b3a76400005b9050610b09565b610dba613b5f613b5985613d65565b84613e1b565b613e27565b6000610b0964e8d4a5100083614e8b565b600083600003613b8757506000610dba565b8115613ba657612f158468327cb2734119d3b7a9601e1b856001613ca1565b610fa28468327cb2734119d3b7a9601e1b8561343d565b6000604051602001610aba9060208082526010908201526f2127a92927aba4a723afa320a1aa27a960811b604082015260600190565b60006040516020016121c39060208082526017908201527614d5d05417d253541050d517d413d3d317d05353d55395604a1b604082015260600190565b600060405160200161128590602080825260179082015276232aa72224a723afa2ac2827a722a72a2fa320a1aa27a960491b604082015260600190565b6000604051602001611285906020808252600e908201526d232aa72224a723afa320a1aa27a960911b604082015260600190565b600080613caf86868661343d565b90506001836002811115613cc557613cc561502e565b148015613ce2575060008480613cdd57613cdd614fac565b868809115b15610f9f57611aeb600182614ea2565b6000604051602001612d35906020808252601790820152764f50454e5f494e5445524553545f494e5f544f4b454e5360481b604082015260600190565b6000836001600160a01b031663bd02d0f5611d698585613e6d565b6000836001600160a01b031663bd02d0f5611d698585613eaf565b6000670de0b6b3a7640000821015613d9357604051633621413760e21b815260048101839052602401610b50565b6000613da8670de0b6b3a76400008404613ee6565b670de0b6b3a764000081029250905082811c670de0b6b3a763ffff198101613dd1575050919050565b6706f05b59d3b200005b8015613e1357670de0b6b3a7640000828002049150671bc16d674ec800008210613e0b579283019260019190911c905b60011c613ddb565b505050919050565b6000610dba8383613fc9565b6000680a688906bd8b0000008210613e5557604051634a4f26f160e01b815260048101839052602401610b50565b670de0b6b3a7640000604083901b04610dba8161408f565b6000604051602001610aba906020808252601c908201527b27a822a72fa4a72a22a922a9aa2fa922a9a2a92b22afa320a1aa27a960211b604082015260600190565b6000604051602001610aba9060208082526011908201527013505617d3d4115397d2539511549154d5607a1b604082015260600190565b6000600160801b8210613f0657608091821c91613f039082614ea2565b90505b600160401b8210613f2457604091821c91613f219082614ea2565b90505b600160201b8210613f4257602091821c91613f3f9082614ea2565b90505b620100008210613f5f57601091821c91613f5c9082614ea2565b90505b6101008210613f7b57600891821c91613f789082614ea2565b90505b60108210613f9657600491821c91613f939082614ea2565b90505b60048210613fb157600291821c91613fae9082614ea2565b90505b60028210613fc457610b09600182614ea2565b919050565b60008080600019848609848602925082811083820303915050670de0b6b3a7640000811061400d5760405163698d9a0160e11b815260048101829052602401610b50565b600080670de0b6b3a764000086880991506706f05b59d3b1ffff821190508260000361404b5780670de0b6b3a7640000850401945050505050610b09565b620400008285030493909111909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690201905092915050565b600160bf1b6001603f1b8216156140af5768016a09e667f3bcc9090260401c5b6001603e1b8216156140ca576801306fe0a31b7152df0260401c5b6001603d1b8216156140e5576801172b83c7d517adce0260401c5b6001603c1b8216156141005768010b5586cf9890f62a0260401c5b6001603b1b82161561411b576801059b0d31585743ae0260401c5b6001603a1b82161561413657680102c9a3e778060ee70260401c5b600160391b8216156141515768010163da9fb33356d80260401c5b600160381b82161561416c57680100b1afa5abcbed610260401c5b600160371b8216156141875768010058c86da1c09ea20260401c5b600160361b8216156141a2576801002c605e2e8cec500260401c5b600160351b8216156141bd57680100162f3904051fa10260401c5b600160341b8216156141d8576801000b175effdc76ba0260401c5b600160331b8216156141f357680100058ba01fb9f96d0260401c5b600160321b82161561420e5768010002c5cc37da94920260401c5b600160311b821615614229576801000162e525ee05470260401c5b600160301b8216156142445768010000b17255775c040260401c5b6001602f1b82161561425f576801000058b91b5bc9ae0260401c5b6001602e1b82161561427a57680100002c5c89d5ec6d0260401c5b6001602d1b8216156142955768010000162e43f4f8310260401c5b6001602c1b8216156142b057680100000b1721bcfc9a0260401c5b6001602b1b8216156142cb5768010000058b90cf1e6e0260401c5b6001602a1b8216156142e6576801000002c5c863b73f0260401c5b600160291b82161561430157680100000162e430e5a20260401c5b600160281b82161561431c576801000000b1721835510260401c5b600160271b82161561433757680100000058b90c0b490260401c5b600160261b8216156143525768010000002c5c8601cc0260401c5b600160251b82161561436d576801000000162e42fff00260401c5b600160241b8216156143885768010000000b17217fbb0260401c5b600160231b8216156143a3576801000000058b90bfce0260401c5b600160221b8216156143be57680100000002c5c85fe30260401c5b600160211b8216156143d95768010000000162e42ff10260401c5b600160201b8216156143f457680100000000b17217f80260401c5b638000000082161561440f5768010000000058b90bfc0260401c5b634000000082161561442a576801000000002c5c85fe0260401c5b632000000082161561444557680100000000162e42ff0260401c5b6310000000821615614460576801000000000b17217f0260401c5b630800000082161561447b57680100000000058b90c00260401c5b63040000008216156144965768010000000002c5c8600260401c5b63020000008216156144b1576801000000000162e4300260401c5b63010000008216156144cc5768010000000000b172180260401c5b628000008216156144e6576801000000000058b90c0260401c5b6240000082161561450057680100000000002c5c860260401c5b6220000082161561451a5768010000000000162e430260401c5b6210000082161561453457680100000000000b17210260401c5b6208000082161561454e5768010000000000058b910260401c5b62040000821615614568576801000000000002c5c80260401c5b6202000082161561458257680100000000000162e40260401c5b6201000082161561459b5761b172600160401b010260401c5b6180008216156145b3576158b9600160401b010260401c5b6140008216156145cb57612c5d600160401b010260401c5b6120008216156145e35761162e600160401b010260401c5b6110008216156145fb57610b17600160401b010260401c5b6108008216156146135761058c600160401b010260401c5b61040082161561462b576102c6600160401b010260401c5b61020082161561464357610163600160401b010260401c5b61010082161561465a5760b1600160401b010260401c5b6080821615614670576059600160401b010260401c5b604082161561468657602c600160401b010260401c5b602082161561469c576016600160401b010260401c5b60108216156146b257600b600160401b010260401c5b60088216156146c8576006600160401b010260401c5b60048216156146de576003600160401b010260401c5b60028216156146f4576001600160401b010260401c5b600182161561470a576001600160401b010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060001515815260200160008152602001600081526020016147a5614802565b81526020016147b2614802565b905290565b6040518061010001604052806147cb614802565b8152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516080810182526000918101828152606082019290925290819081526020016147b2604051806040016040528060008152602001600081525090565b6001600160a01b038116811461485657600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561489157614891614859565b60405290565b604051601f8201601f191681016001600160401b03811182821017156148bf576148bf614859565b604052919050565b6000608082840312156148d957600080fd5b6148e161486f565b905081356148ee81614841565b815260208201356148fe81614841565b6020820152604082013561491181614841565b6040820152606082013561492481614841565b606082015292915050565b60006040828403121561494157600080fd5b604080519081016001600160401b038111828210171561496357614963614859565b604052823581526020928301359281019290925250919050565b600060c0828403121561498f57600080fd5b604051606081016001600160401b03811182821017156149b1576149b1614859565b6040529050806149c1848461492f565b81526149d0846040850161492f565b60208201526149e2846080850161492f565b60408201525092915050565b801515811461485657600080fd5b60008060008060006101a08688031215614a1557600080fd5b8535614a2081614841565b94506020860135614a3081614841565b9350614a3f87604088016148c7565b9250614a4e8760c0880161497d565b9150610180860135614a5f816149ee565b809150509295509295909350565b60008060a08385031215614a8057600080fd5b8235614a8b81614841565b9150614a9a84602085016148c7565b90509250929050565b60008060408385031215614ab657600080fd5b8235614ac181614841565b91506020830135614ad181614841565b809150509250929050565b60008060408385031215614aef57600080fd5b8235614afa81614841565b91506020838101356001600160401b0380821115614b1757600080fd5b818601915086601f830112614b2b57600080fd5b813581811115614b3d57614b3d614859565b614b4b848260051b01614897565b818152848101925060079190911b830184019088821115614b6b57600080fd5b928401925b81841015614b9457614b8289856148c7565b83528483019250608084019350614b70565b80955050505050509250929050565b60008060008060008060006101a0888a031215614bbf57600080fd5b8735614bca81614841565b9650614bd98960208a016148c7565b9550614be88960a08a0161492f565b9450614bf78960e08a0161492f565b9350614c07896101208a0161492f565b92506101608801359150610180880135614c20816149ee565b8091505092959891949750929550565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152506101408082015181840152505050565b8281526101808101610dba6020830184614c30565b600080600080600080600060e0888a031215614cd257600080fd5b8735614cdd81614841565b96506020880135614ced81614841565b95506040880135614cfd816149ee565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b600080600060608486031215614d3a57600080fd5b8335614d4581614841565b92506020840135614d5581614841565b91506040840135614d6581614841565b809150509250925092565b6000806000806101808587031215614d8757600080fd5b8435614d9281614841565b93506020850135614da281614841565b9250614db186604087016148c7565b9150614dc08660c0870161497d565b905092959194509250565b6101608101610b098284614c30565b918252602082015260400190565b600060208284031215614dfa57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614e3f57614e3f614e17565b5060010190565b6000600160ff1b8201614e5b57614e5b614e17565b5060000390565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b8082028115828204841417610b0957610b09614e17565b80820180821115610b0957610b09614e17565b81810381811115610b0957610b09614e17565b8082018281126000831280158216821582161715614ee857614ee8614e17565b505092915050565b8181036000831280158383131683831282161715614f1057614f10614e17565b5092915050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0391909116815260200190565b600060808284031215614f5757600080fd5b614f5f61486f565b8251614f6a81614841565b81526020830151614f7a81614841565b60208201526040830151614f8d81614841565b60408201526060830151614fa081614841565b60608201529392505050565b634e487b7160e01b600052601260045260246000fd5b600082614fd157614fd1614fac565b500490565b6001600160a01b039687168152948616602086015292909416604084015215156060830152608082019290925260a081019190915260c00190565b60006020828403121561502357600080fd5b8151610dba816149ee565b634e487b7160e01b600052602160045260246000fd5b80820260008212600160ff1b8414161561506057615060614e17565b8181058314821517610b0957610b09614e17565b60008261508357615083614fac565b600160ff1b82146000198414161561509d5761509d614e17565b50059056fea2646970667358221220d4c0f8f17e9b0f295687a4b9c5ed3a74c41c5c9915a47cb3659fdea5417280e364736f6c63430008120033