0 txs
0 calls
constructor
constructor()
functions
decimals
viewfunction decimals(address base, address quote) view returns (uint8)
decimalsByName
viewfunction decimalsByName(string base, string quote) view returns (uint8)
description
viewfunction description(address base, address quote) view returns (string)
descriptionByName
viewfunction descriptionByName(string base, string quote) view returns (string)
exists
viewfunction exists(string base, string quote) view returns (bool)
getAccessController
viewfunction getAccessController() view returns (address)
getAllPairs
viewfunction getAllPairs() view returns (tuple[])
getAnswer
viewfunction getAnswer(address base, address quote, uint256 roundId) view returns (int256 answer)
getCurrentPhaseId
viewfunction getCurrentPhaseId(address base, address quote) view returns (uint16 currentPhaseId)
getFeed
viewfunction getFeed(address base, address quote) view returns (address aggregator)
getMultipleLatestRoundData
viewfunction getMultipleLatestRoundData(string[] bases, string[] quotes) view returns (tuple[])
getNextRoundId
viewfunction getNextRoundId(address base, address quote, uint80 roundId) view returns (uint80 nextRoundId)
getPhase
viewfunction getPhase(address base, address quote, uint16 phaseId) view returns (tuple phase)
getPhaseFeed
viewfunction getPhaseFeed(address base, address quote, uint16 phaseId) view returns (address aggregator)
getPhaseRange
viewfunction getPhaseRange(address base, address quote, uint16 phaseId) view returns (uint80 startingRoundId, uint80 endingRoundId)
getPreviousRoundId
viewfunction getPreviousRoundId(address base, address quote, uint80 roundId) view returns (uint80 previousRoundId)
getProposedFeed
viewfunction getProposedFeed(address base, address quote) view returns (address proposedAggregator)
getRoundData
viewfunction getRoundData(address base, address quote, uint80 _roundId) view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
getRoundFeed
viewfunction getRoundFeed(address base, address quote, uint80 roundId) view returns (address aggregator)
getTimestamp
viewfunction getTimestamp(address base, address quote, uint256 roundId) view returns (uint256 timestamp)
getTradingPairDetails
viewfunction getTradingPairDetails(string base, string quote) view returns (address, address, address)
isFeedEnabled
viewfunction isFeedEnabled(address aggregator) view returns (bool)
latestAnswer
viewfunction latestAnswer(address base, address quote) view returns (int256 answer)
latestAnswerByName
viewfunction latestAnswerByName(string base, string quote) view returns (int256 answer)
latestRound
viewfunction latestRound(address base, address quote) view returns (uint256 roundId)
latestRoundData
viewfunction latestRoundData(address base, address quote) view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
latestRoundDataByName
viewfunction latestRoundDataByName(string base, string quote) view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
latestTimestamp
viewfunction latestTimestamp(address base, address quote) view returns (uint256 timestamp)
owner
viewfunction owner() view returns (address)
proposedGetRoundData
viewfunction proposedGetRoundData(address base, address quote, uint80 roundId) view returns (uint80 id, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
proposedLatestRoundData
viewfunction proposedLatestRoundData(address base, address quote) view returns (uint80 id, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
totalPairsAvailable
viewfunction totalPairsAvailable() view returns (uint256)
typeAndVersion
purefunction typeAndVersion() pure returns (string)
version
viewfunction version(address base, address quote) view returns (uint256)
versionByName
viewfunction versionByName(string base, string quote) view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
confirmFeed
nonpayablefunction confirmFeed(address base, address quote, address aggregator)
insertPair
nonpayablefunction insertPair(string base, string quote, address baseAssetAddress, address quoteAssetAddress, address feedAdapterAddress)
proposeFeed
nonpayablefunction proposeFeed(address base, address quote, address aggregator)
removePair
nonpayablefunction removePair(string base, string quote)
setAccessController
nonpayablefunction setAccessController(address _accessController)
transferOwnership
nonpayablefunction transferOwnership(address to)
events
FeedConfirmed
event FeedConfirmed(address indexed asset, address indexed denomination, address indexed latestAggregator, address previousAggregator, uint16 nextPhaseId, address sender)
FeedProposed
event FeedProposed(address indexed asset, address indexed denomination, address indexed proposedAggregator, address currentAggregator, address sender)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
PairAccessControllerSet
event PairAccessControllerSet(address indexed accessController, address indexed sender)
errors
No errors.
creation bytecode
0x60806040523480156200001157600080fd5b503380600081620000695760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200009c576200009c81620000f1565b505050604051620000ad906200019d565b604051809103906000f080158015620000ca573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b0392909216919091179055620001ab565b6001600160a01b0381163314156200014c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6118e28062004aad83390190565b6148f280620001bb6000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c8063a051538e11610186578063d4c282a3116100e3578063f7d6909111610097578063fc58749e11610071578063fc58749e1461072b578063ff0601c01461073e578063ff2ed6e01461078857600080fd5b8063f7d69091146106f0578063f800ece914610703578063fa820de91461071857600080fd5b8063ec62f44b116100c8578063ec62f44b146106b7578063f08391d8146106ca578063f2fde38b146106dd57600080fd5b8063d4c282a314610691578063eb6d9042146106a457600080fd5b8063bfda5e711161013a578063c639cd911161011f578063c639cd9114610658578063d0188fc61461066b578063d2edb6dd1461067e57600080fd5b8063bfda5e7114610612578063c1ce86fc1461062557600080fd5b8063af34b03a1161016b578063af34b03a146105c0578063b099d43b146105d3578063bcfd032d146105ff57600080fd5b8063a051538e146105a5578063ad3fdee5146105b857600080fd5b8063573a23af1161023f57806379ba5097116101f357806391624c95116101cd57806391624c95146105545780639e3ff6fd146105675780639eed82b01461059257600080fd5b806379ba5097146104f45780638916524a146104fc5780638da5cb5b1461054357600080fd5b80635ad9d9df116102245780635ad9d9df146104bb578063672ff44f146104ce5780636e91995a146104e157600080fd5b8063573a23af1461048357806358e2d3a81461049657600080fd5b8063218936fc11610296578063303228181161027b57806330322818146104005780634e74197b1461045057806352dbeb8b1461047057600080fd5b8063218936fc146103a05780632656554c146103dd57600080fd5b806315cd4ad2116102c757806315cd4ad21461032157806316d6b5f614610342578063181f5a771461036757600080fd5b8063045abf4b146102e357806304737f8e146102f8575b600080fd5b6102f66102f1366004613cfb565b61079b565b005b61030b61030636600461412b565b610868565b6040516103189190614409565b60405180910390f35b61033461032f366004613dcb565b610908565b604051908152602001610318565b6002546001600160a01b03165b6040516001600160a01b039091168152602001610318565b60408051808201909152601781527f42696e616e636546656564526567697374727920312e30000000000000000000602082015261030b565b6103b36103ae366004613fe9565b610a48565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610318565b6103f06103eb366004613fe9565b610afc565b6040519015158152602001610318565b61043d61040e366004613c95565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205461ffff1690565b60405161ffff9091168152602001610318565b61046361045e366004613e4a565b610b8e565b60405161031891906142d3565b61034f61047e366004613d86565b611049565b6102f6610491366004614052565b6110d1565b6104a96104a4366004613c95565b611169565b60405160ff9091168152602001610318565b61034f6104c9366004613c95565b611175565b6103346104dc366004613c95565b6111a4565b6104a96104ef36600461412b565b61128b565b6102f66115a5565b61050f61050a366004613e0b565b611656565b604080516001600160501b03968716815260208101959095528401929092526060830152909116608082015260a001610318565b6000546001600160a01b031661034f565b610334610562366004613dcb565b611790565b61057a610575366004613e0b565b611875565b6040516001600160501b039091168152602001610318565b6102f66105a0366004613cfb565b61189a565b61057a6105b3366004613e0b565b6119eb565b610334611a07565b6103346105ce366004613c95565b611aa2565b6103f06105e1366004613c79565b6001600160a01b031660009081526003602052604090205460ff1690565b61050f61060d366004613c95565b611aae565b61050f61062036600461412b565b611aea565b610638610633366004613d86565b611b99565b604080516001600160501b03938416815292909116602083015201610318565b61034f610666366004613e0b565b611cce565b61050f610679366004613c95565b611d61565b61034f61068c366004613c95565b611e90565b61033461069f366004613c95565b611ee5565b6103346106b2366004613fe9565b611f06565b6103346106c5366004613c95565b6123f4565b6102f66106d8366004613c79565b61252f565b6102f66106eb366004613c79565b6125e2565b6103346106fe36600461412b565b61264c565b61070b6126e0565b604051610318919061424f565b61030b610726366004613c95565b61277a565b61050f610739366004613e0b565b612786565b61075161074c366004613d86565b612915565b60408051825161ffff1681526020808401516001600160501b03908116918301919091529282015190921690820152606001610318565b6102f6610796366004613fe9565b6129f8565b6107a3612a87565b6000806107b1858585612ae3565b6001600160a01b0387811660008181526004602090815260408083208b861680855290835281842080546001600160a01b03191690558a861680855260038452828520805460ff19908116600117909155968816808652948390208054909716909655815193845261ffff88169284019290925233908301529496509294509092917f27a180c70f2642f63d1694eb252b7df52e7ab2565e3f67adf7748acb7d82b9bc906060015b60405180910390a45050505050565b6008546040516316e3539360e11b815260609160009182916001600160a01b031690632dc6a726906108a0908890889060040161441c565b604080518083038186803b1580156108b757600080fd5b505afa1580156108cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ef9190613ccd565b915091506108fd8282612da8565b925050505b92915050565b600083836109168282612e74565b61091f57600080fd5b600161092d60106040614542565b61093890600261461e565b61094291906147a4565b8411156109525760009250610a3f565b6001600160a01b0386811660009081526006602090815260408083208985168452825280832088821c61ffff8116855292529091205490918691168061099e5760009550505050610a3f565b6040517fb5ab58dc00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b0382169063b5ab58dc906024015b60206040518083038186803b158015610a0157600080fd5b505afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a399190613fd1565b95505050505b50509392505050565b6008546040517f218936fc000000000000000000000000000000000000000000000000000000008152600091829182916001600160a01b03169063218936fc90610a9c908a908a908a908a9060040161434d565b60606040518083038186803b158015610ab457600080fd5b505afa158015610ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aec9190613d45565b9250925092509450945094915050565b600854604051630995955360e21b81526000916001600160a01b031690632656554c90610b3390889088908890889060040161434d565b60206040518083038186803b158015610b4b57600080fd5b505afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b839190613fb1565b90505b949350505050565b6002546060906001600160a01b03161580610c1f57506002546040516304e162b360e41b81523360048201526001600160a01b0390911690634e162b309060240160206040518083038186803b158015610be757600080fd5b505afa158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190613fb1565b610c705760405162461bcd60e51b815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b8151835114610ce75760405162461bcd60e51b815260206004820152602160248201527f4261736520616e642071756f746520636f756e74732061726520756e6571756160448201527f6c000000000000000000000000000000000000000000000000000000000000006064820152608401610c67565b6000835167ffffffffffffffff811115610d1157634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d8657816020015b610d736040518060a0016040528060006001600160501b0316815260200160008152602001600081526020016000815260200160006001600160501b031681525090565b815260200190600190039081610d2f5790505b50905060005b845181101561104157600854855160009182916001600160a01b0390911690632dc6a72690899086908110610dd157634e487b7160e01b600052603260045260246000fd5b6020026020010151888681518110610df957634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b8152600401610e1e92919061441c565b604080518083038186803b158015610e3557600080fd5b505afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190613ccd565b6001600160a01b03808316600090815260056020908152604080832093851683529290529081205492945090925061ffff90911690610eac8484613004565b90506001600160a01b038116610ef55760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b6000806000806000856001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015610f3657600080fd5b505afa158015610f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6e9190614182565b94509450945094509450610fbc6040518060a0016040528060006001600160501b0316815260200160008152602001600081526020016000815260200160006001600160501b031681525090565b67ffffffffffffffff82811660408a811b61ffff60401b169182176080850152606084018690528301869052602083018790529087161781528b5181908d908d90811061101957634e487b7160e01b600052603260045260246000fd5b60200260200101819052505050505050505050505080806110399061484b565b915050610d8c565b509392505050565b6001600160a01b0383811660009081526006602090815260408083208685168452825280832061ffff8616845290915290205416806110ca5760405162461bcd60e51b815260206004820152601860248201527f46656564206e6f7420666f756e6420666f7220706861736500000000000000006044820152606401610c67565b9392505050565b6110d9612a87565b6008546040517f573a23af0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063573a23af9061112e908a908a908a908a908a908a908a9060040161437f565b600060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b5050505050505050505050565b60006110ca8383613056565b6001600160a01b03808316600090815260046020908152604080832084861684529091528120549091166110ca565b600082826111b28282612e74565b6111bb57600080fd5b60006111c78686613004565b90506001600160a01b0381166112105760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b806001600160a01b0316638205bf6a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561124957600080fd5b505afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190613fd1565b9695505050505050565b600854604051630995955360e21b81526000916001600160a01b031690632656554c906112be908690869060040161441c565b60206040518083038186803b1580156112d657600080fd5b505afa1580156112ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130e9190613fb1565b156113b0576008546040516316e3539360e11b815260009182916001600160a01b0390911690632dc6a7269061134a908890889060040161441c565b604080518083038186803b15801561136157600080fd5b505afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113999190613ccd565b915091506113a78282613056565b92505050610902565b600854604051630995955360e21b81526001600160a01b0390911690632656554c906113e2908590879060040161441c565b60206040518083038186803b1580156113fa57600080fd5b505afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613fb1565b1561146e576008546040516316e3539360e11b815260009182916001600160a01b0390911690632dc6a7269061134a908790899060040161441c565b6008546040516316e3539360e11b815260009182916001600160a01b0390911690632dc6a726906114a3908890600401614441565b604080518083038186803b1580156114ba57600080fd5b505afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190613ccd565b6008546040516316e3539360e11b81529294509092506000916001600160a01b0390911690632dc6a7269061152b908890600401614441565b604080518083038186803b15801561154257600080fd5b505afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a9190613ccd565b5090506115878383613056565b6115918284613056565b61159b919061455a565b9350505050610902565b6001546001600160a01b031633146115ff5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610c67565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6001600160a01b03808416600090815260046020908152604080832084871684529091528120549091829182918291829189918991166116d85760405162461bcd60e51b815260206004820152601e60248201527f4e6f2070726f706f7365642061676772656761746f722070726573656e7400006044820152606401610c67565b6001600160a01b038a811660009081526004602081815260408084208e8616855290915291829020549151639a6fc8f560e01b81526001600160501b038c1691810191909152911690639a6fc8f59060240160a06040518083038186803b15801561174257600080fd5b505afa158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a9190614182565b939e929d50909b50995090975095505050505050565b6000838361179e8282612e74565b6117a757600080fd5b60016117b560106040614542565b6117c090600261461e565b6117ca91906147a4565b8411156117da5760009250610a3f565b6001600160a01b0386811660009081526006602090815260408083208985168452825280832088821c61ffff811685529252909120549091869116806118265760009550505050610a3f565b6040517fb633620c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff831660048201526001600160a01b0382169063b633620c906024016109e9565b60008061188385858561311d565b9050611891858583866132eb565b95945050505050565b6118a2612a87565b60006118ae8484613004565b9050806001600160a01b0316826001600160a01b031614156119385760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f742070726f706f73652063757272656e742061676772656761746f60448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610c67565b6001600160a01b0384811660009081526004602090815260408083208785168452909152902054811690831681146119e4576001600160a01b0385811660008181526004602090815260408083208986168085529083529281902080546001600160a01b03191689871690811790915581519588168652339286019290925290939192917fb56c4f88c3e344891ef92e51f036d7116e886f4ea57f5ba93e28b5f44925b9ce9101610859565b5050505050565b6000806119f985858561311d565b905061189185858386613456565b600854604080517fad3fdee500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ad3fdee5916004808301926020929190829003018186803b158015611a6557600080fd5b505afa158015611a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9d9190613fd1565b905090565b60006110ca83836135ad565b60008060008060008686611ac28282612e74565b611acb57600080fd5b611ad58989613674565b939d929c50909a509850909650945050505050565b6008546040516316e3539360e11b81526000918291829182918291829182916001600160a01b031690632dc6a72690611b29908c908c9060040161441c565b604080518083038186803b158015611b4057600080fd5b505afa158015611b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b789190613ccd565b91509150611b868282612e74565b611b8f57600080fd5b611ad58282613674565b6040805160608082018352600080835260208084018290529284018190526001600160a01b038781168252600784528482209087168252835283812061ffff868116835290845284822085519384018652549081168084526001600160501b03620100008304811695850195909552600160601b909104909316938201939093528291611c685760405162461bcd60e51b815260206004820152601460248201527f506861736520646f6573206e6f742065786973740000000000000000000000006044820152606401610c67565b6001600160a01b0380871660009081526005602090815260408083209389168352929052205461ffff908116908516811415611cb457611ca98787836137a2565b935093505050611cc6565b611cbf878787613834565b9350935050505b935093915050565b600080611cdc85858561311d565b6001600160a01b0386811660009081526006602090815260408083208985168452825280832061ffff861684529091529020541692509050816110415760405162461bcd60e51b815260206004820152601860248201527f46656564206e6f7420666f756e6420666f7220726f756e6400000000000000006044820152606401610c67565b6001600160a01b0380831660009081526004602090815260408083208486168452909152812054909182918291829182918891889116611de35760405162461bcd60e51b815260206004820152601e60248201527f4e6f2070726f706f7365642061676772656761746f722070726573656e7400006044820152606401610c67565b6001600160a01b03808a1660009081526004602081815260408084208d86168552909152918290205482517ffeaf968c000000000000000000000000000000000000000000000000000000008152925193169263feaf968c928083019260a09291829003018186803b158015611e5857600080fd5b505afa158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad59190614182565b6000611e9c8383613004565b90506001600160a01b0381166109025760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b60008282611ef38282612e74565b611efc57600080fd5b6108fd85856138ca565b600854604051630995955360e21b81526000916001600160a01b031690632656554c90611f3d90889088908890889060040161434d565b60206040518083038186803b158015611f5557600080fd5b505afa158015611f69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8d9190613fb1565b15612046576008546040516316e3539360e11b815260009182916001600160a01b0390911690632dc6a72690611fcd908a908a908a908a9060040161434d565b604080518083038186803b158015611fe457600080fd5b505afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190613ccd565b9150915061202a8282612e74565b61203357600080fd5b61203d82826138ca565b92505050610b86565b600854604051630995955360e21b81526001600160a01b0390911690632656554c9061207c90869086908a908a9060040161434d565b60206040518083038186803b15801561209457600080fd5b505afa1580156120a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cc9190613fb1565b1561220d576008546040516316e3539360e11b815260009182916001600160a01b0390911690632dc6a7269061210c90889088908c908c9060040161434d565b604080518083038186803b15801561212357600080fd5b505afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b9190613ccd565b915091506121698282612e74565b61217257600080fd5b61217c82826138ca565b6121c85760405162461bcd60e51b815260206004820152601560248201527f44697669646564206279207a65726f206572726f7200000000000000000000006044820152606401610c67565b60006121d48383613056565b60ff1690506121e383836138ca565b6121ee826002614762565b6121f990600a61461e565b61220391906145a1565b9350505050610b86565b6008546040516316e3539360e11b815260009182916001600160a01b0390911690632dc6a72690612244908a908a906004016143d3565b604080518083038186803b15801561225b57600080fd5b505afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122939190613ccd565b6008546040516316e3539360e11b81529294509092506000916001600160a01b0390911690632dc6a726906122ce90899089906004016143d3565b604080518083038186803b1580156122e557600080fd5b505afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d9190613ccd565b50905061232a8383612e74565b801561233b575061233b8183612e74565b61234457600080fd5b61234e81836138ca565b61239a5760405162461bcd60e51b815260206004820152601560248201527f44697669646564206279207a65726f206572726f7200000000000000000000006044820152606401610c67565b60006123a68284613056565b60ff1690506123b582846138ca565b6123bf85856138ca565b6123ca836002614762565b6123d590600a61461e565b6123df91906146c6565b6123e991906145a1565b945050505050610b86565b600082826124028282612e74565b61240b57600080fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290529081205461ffff16906124428787613004565b90506001600160a01b03811661248b5760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b61251b82826001600160a01b031663668a0f026040518163ffffffff1660e01b815260040160206040518083038186803b1580156124c857600080fd5b505afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125009190613fd1565b67ffffffffffffffff1660409190911b61ffff60401b161790565b6001600160501b0316979650505050505050565b612537612a87565b6002546001600160a01b03828116911614156125955760405162461bcd60e51b815260206004820181905260248201527f41636365737320636f6e74726f6c6c657220697320616c7265616479207365746044820152606401610c67565b600280546001600160a01b0319166001600160a01b0383169081179091556040513391907fcfa989179aa1c36c00d3edadf67bcb4f35d9516f4951d34f527ed93957adfbeb90600090a350565b6125ea612a87565b6001600160a01b0381166126405760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f00000000000000006044820152606401610c67565b61264981613959565b50565b6008546040516316e3539360e11b8152600091829182916001600160a01b031690632dc6a72690612683908890889060040161441c565b604080518083038186803b15801561269a57600080fd5b505afa1580156126ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d29190613ccd565b915091506108fd82826135ad565b600854604080517ff800ece900000000000000000000000000000000000000000000000000000000815290516060926001600160a01b03169163f800ece9916004808301926000929190829003018186803b15801561273e57600080fd5b505afa158015612752573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a9d9190810190613eab565b60606110ca8383612da8565b6000806000806000878761279a8282612e74565b6127a357600080fd5b6000806127bb8a6001600160501b0316604081901c91565b9150915060006128018d8d856001600160a01b039283166000908152600660209081526040808320948616835293815283822061ffff9390931682529190915220541690565b90506001600160a01b03811661284a5760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b604051639a6fc8f560e01b815267ffffffffffffffff831660048201526001600160a01b03821690639a6fc8f59060240160a06040518083038186803b15801561289357600080fd5b505afa1580156128a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cb9190614182565b939d50919b5099509750955061ffff60401b604084901b1667ffffffffffffffff808c168217918b918b918b918b1617995099509950995099505050505050939792965093509350565b6040805160608082018352600080835260208084018290529284018190528351808301855281815280840182905284018190526001600160a01b038781168252600784528482209087168252835283812061ffff86811683529084529084902084519283018552549081168083526001600160501b03620100008304811694840194909452600160601b909104909216928101929092526110ca5760405162461bcd60e51b815260206004820152601460248201527f506861736520646f6573206e6f742065786973740000000000000000000000006044820152606401610c67565b612a00612a87565b6008546040517fff2ed6e00000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063ff2ed6e090612a4f90879087908790879060040161434d565b600060405180830381600087803b158015612a6957600080fd5b505af1158015612a7d573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b03163314612ae15760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610c67565b565b6001600160a01b038084166000908152600460209081526040808320868516845290915281205490918291848216911614612b605760405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642070726f706f7365642061676772656761746f7200000000006044820152606401610c67565b6000612b6c8686613004565b90506000612b7982613a03565b6001600160a01b038881166000818152600560209081526040808320948c16808452948252808320549383526007825280832094835293815283822061ffff9093168083529290529190912080547fffffffffffffffffffff00000000000000000000ffffffffffffffffffffffff16600160601b6001600160501b03851602179055909150612c0a81600161451c565b6001600160a01b0389811660008181526005602090815260408083208d8616808552908352818420805461ffff191661ffff891690811790915594845260068352818420908452825280832093835292905290812080546001600160a01b031916928a1692909217909155909550612c8187613a03565b905060405180606001604052808761ffff168152602001826001600160501b0316815260200160006001600160501b0316815250600760008b6001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008861ffff1661ffff16815260200190815260200160002060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160501b0302191690836001600160501b03160217905550604082015181600001600c6101000a8154816001600160501b0302191690836001600160501b0316021790555090505085849550955050505050935093915050565b60606000612db68484613004565b90506001600160a01b038116612dff5760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b806001600160a01b0316637284e4166040518163ffffffff1660e01b815260040160006040518083038186803b158015612e3857600080fd5b505afa158015612e4c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b8691908101906140f8565b6002546000906001600160a01b03161580612f0557506002546040516304e162b360e41b81523360048201526001600160a01b0390911690634e162b309060240160206040518083038186803b158015612ecd57600080fd5b505afa158015612ee1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f059190613fb1565b80612faf57506002546040517f1f5d2cc10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038581166024830152848116604483015290911690631f5d2cc19060640160206040518083038186803b158015612f7757600080fd5b505afa158015612f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612faf9190613fb1565b612ffb5760405162461bcd60e51b815260206004820152600e60248201527f4e6f2070616972206163636573730000000000000000000000000000000000006044820152606401610c67565b50600192915050565b6001600160a01b0382811660008181526005602090815260408083208686168085529083528184205494845260068352818420908452825280832061ffff9094168352929052908120549091166110ca565b6000806130638484613004565b90506001600160a01b0381166130ac5760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b806001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156130e557600080fd5b505afa1580156130f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8691906141d9565b6001600160a01b03808416600090815260056020908152604080832093861683529290529081205461ffff1681806131568787856137a2565b91509150816001600160501b0316856001600160501b03161015801561318e5750806001600160501b0316856001600160501b031611155b1561319e578293505050506110ca565b60008361ffff16116131f25760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964207068617365000000000000000000000000000000000000006044820152606401610c67565b60006131ff600185614781565b90505b61ffff8116156132dd576001600160a01b0380891660009081526006602090815260408083208b85168452825280832061ffff86168452909152902054168061324b57506132cb565b6000806132598b8b86613834565b91509150816001600160501b0316896001600160501b0316101580156132915750806001600160501b0316896001600160501b031611155b156132a557839750505050505050506110ca565b806001600160501b0316896001600160501b031611156132c7575050506132dd565b5050505b806132d58161480b565b915050613202565b506000979650505050505050565b6001600160a01b03808516600090815260056020908152604080832093871683529290529081205461ffff16835b61ffff811615613449576001600160a01b0387811660009081526006602090815260408083208a85168452825280832061ffff8681168086529190935290832054909316928291861614613377576133728a8a86613834565b613382565b6133828a8a866137a2565b90925090506001600160a01b03831661339d57505050613437565b816001600160501b0316876001600160501b0316116133be57505050613437565b816001600160501b0316876001600160501b03161180156133f15750806001600160501b0316876001600160501b031611155b1561340d576134016001886147bb565b95505050505050610b86565b806001600160501b0316876001600160501b03161115613433579450610b869350505050565b5050505b806134418161480b565b915050613319565b5060009695505050505050565b6001600160a01b03808516600090815260056020908152604080832093871683529290529081205461ffff16835b8161ffff168161ffff1611613449576001600160a01b0387811660009081526006602090815260408083208a85168452825280832061ffff86811680865291909352908320549093169282918616146134e7576134e28a8a86613834565b6134f2565b6134f28a8a866137a2565b90925090506001600160a01b03831661350d5750505061359b565b806001600160501b0316876001600160501b03161061352e5750505061359b565b816001600160501b0316876001600160501b0316101580156135615750806001600160501b0316876001600160501b0316105b156135715761340187600161457f565b816001600160501b0316876001600160501b0316101561359757509350610b8692505050565b5050505b806135a581614829565b915050613484565b6000806135ba8484613004565b90506001600160a01b0381166136035760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b806001600160a01b03166354fd4d506040518163ffffffff1660e01b815260040160206040518083038186803b15801561363c57600080fd5b505afa158015613650573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b869190613fd1565b6001600160a01b038083166000908152600560209081526040808320938516835292905290812054819081908190819061ffff16816136b38989613004565b90506001600160a01b0381166136fc5760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b806001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561373557600080fd5b505afa158015613749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376d9190614182565b939a5091985096509450925061ffff60401b604083901b1667ffffffffffffffff808916821791889188918891881617611ad5565b6001600160a01b038084166000908152600760209081526040808320938616835292815282822061ffff80861684529082528383208451606081018652905491821681526001600160501b03620100008304811693820193909352600160601b9091049091169281019290925290819061381c8482613a8c565b613827878787613ab2565b9250925050935093915050565b6040805160608082018352600080835260208084018290529284018190526001600160a01b038781168252600784528482209087168252835283812061ffff8681168352908452848220855193840186525490811683526001600160501b03620100008204811694840194909452600160601b9004909216928101929092529081906138c08482613a8c565b6138278583613aeb565b6000806138d78484613004565b90506001600160a01b0381166139205760405162461bcd60e51b815260206004820152600e60248201526d11995959081b9bdd08199bdd5b9960921b6044820152606401610c67565b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561363c57600080fd5b6001600160a01b0381163314156139b25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c67565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006001600160a01b038216613a1b57506000919050565b816001600160a01b031663668a0f026040518163ffffffff1660e01b815260040160206040518083038186803b158015613a5457600080fd5b505afa158015613a68573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190613fd1565b60006110ca83836020015167ffffffffffffffff1660409190911b61ffff60401b161790565b600080613abf8585613004565b90506000613acc82613a03565b905061ffff60401b604085901b1667ffffffffffffffff821617611281565b60006110ca83836040015167ffffffffffffffff1660409190911b61ffff60401b161790565b600082601f830112613b21578081fd5b81356020613b36613b31836144d0565b61449f565b80838252828201915082860187848660051b8901011115613b55578586fd5b855b85811015613b9657813567ffffffffffffffff811115613b75578788fd5b613b838a87838c0101613bea565b8552509284019290840190600101613b57565b5090979650505050505050565b60008083601f840112613bb4578182fd5b50813567ffffffffffffffff811115613bcb578182fd5b602083019150836020828501011115613be357600080fd5b9250929050565b600082601f830112613bfa578081fd5b8135613c08613b31826144f4565b818152846020838601011115613c1c578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112613c46578081fd5b8151613c54613b31826144f4565b818152846020838601011115613c68578283fd5b610b868260208301602087016147db565b600060208284031215613c8a578081fd5b81356110ca81614892565b60008060408385031215613ca7578081fd5b8235613cb281614892565b91506020830135613cc281614892565b809150509250929050565b60008060408385031215613cdf578182fd5b8251613cea81614892565b6020840151909250613cc281614892565b600080600060608486031215613d0f578081fd5b8335613d1a81614892565b92506020840135613d2a81614892565b91506040840135613d3a81614892565b809150509250925092565b600080600060608486031215613d59578283fd5b8351613d6481614892565b6020850151909350613d7581614892565b6040850151909250613d3a81614892565b600080600060608486031215613d9a578081fd5b8335613da581614892565b92506020840135613db581614892565b9150604084013561ffff81168114613d3a578182fd5b600080600060608486031215613ddf578081fd5b8335613dea81614892565b92506020840135613dfa81614892565b929592945050506040919091013590565b600080600060608486031215613e1f578081fd5b8335613e2a81614892565b92506020840135613e3a81614892565b91506040840135613d3a816148a7565b60008060408385031215613e5c578182fd5b823567ffffffffffffffff80821115613e73578384fd5b613e7f86838701613b11565b93506020850135915080821115613e94578283fd5b50613ea185828601613b11565b9150509250929050565b60006020808385031215613ebd578182fd5b825167ffffffffffffffff80821115613ed4578384fd5b818501915085601f830112613ee7578384fd5b8151613ef5613b31826144d0565b80828252858201915085850189878560051b8801011115613f14578788fd5b875b84811015613fa257815186811115613f2c57898afd5b87016040818d03601f1901811315613f42578a8bfd5b613f4a614476565b8a83015189811115613f5a578c8dfd5b613f688f8d83870101613c36565b825250908201519088821115613f7c578b8cfd5b613f8a8e8c84860101613c36565b818c0152865250509287019290870190600101613f16565b50909998505050505050505050565b600060208284031215613fc2578081fd5b815180151581146110ca578182fd5b600060208284031215613fe2578081fd5b5051919050565b60008060008060408587031215613ffe578182fd5b843567ffffffffffffffff80821115614015578384fd5b61402188838901613ba3565b90965094506020870135915080821115614039578384fd5b5061404687828801613ba3565b95989497509550505050565b600080600080600080600060a0888a03121561406c578485fd5b873567ffffffffffffffff80821115614083578687fd5b61408f8b838c01613ba3565b909950975060208a01359150808211156140a7578687fd5b506140b48a828b01613ba3565b90965094505060408801356140c881614892565b925060608801356140d881614892565b915060808801356140e881614892565b8091505092959891949750929550565b600060208284031215614109578081fd5b815167ffffffffffffffff81111561411f578182fd5b610b8684828501613c36565b6000806040838503121561413d578182fd5b823567ffffffffffffffff80821115614154578384fd5b61416086838701613bea565b93506020850135915080821115614175578283fd5b50613ea185828601613bea565b600080600080600060a08688031215614199578283fd5b85516141a4816148a7565b8095505060208601519350604086015192506060860151915060808601516141cb816148a7565b809150509295509295909350565b6000602082840312156141ea578081fd5b815160ff811681146110ca578182fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000815180845261423b8160208601602086016147db565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b870101848801865b838110156142c557888303603f190185528151805187855261429988860182614223565b91890151858303868b01529190506142b18183614223565b968901969450505090860190600101614275565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561434057815180516001600160501b0390811686528782015188870152868201518787015260608083015190870152608091820151169085015260a090930192908501906001016142f0565b5091979650505050505050565b6040815260006143616040830186886141fa565b82810360208401526143748185876141fa565b979650505050505050565b60a08152600061439360a08301898b6141fa565b82810360208401526143a681888a6141fa565b6001600160a01b039687166040850152948616606084015250509216608090920191909152949350505050565b6040815260006143e76040830184866141fa565b82810360208401526118918160038152621554d160ea1b602082015260400190565b6020815260006110ca6020830184614223565b60408152600061442f6040830185614223565b82810360208401526118918185614223565b6040815260006144546040830184614223565b8281036020840152610b868160038152621554d160ea1b602082015260400190565b6040805190810167ffffffffffffffff811182821017156144995761449961487c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156144c8576144c861487c565b604052919050565b600067ffffffffffffffff8211156144ea576144ea61487c565b5060051b60200190565b600067ffffffffffffffff82111561450e5761450e61487c565b50601f01601f191660200190565b600061ffff80831681851680830382111561453957614539614866565b01949350505050565b6000821982111561455557614555614866565b500190565b600060ff821660ff84168060ff0382111561457757614577614866565b019392505050565b60006001600160501b0380831681851680830382111561453957614539614866565b6000826145bc57634e487b7160e01b81526012600452602481fd5b600160ff1b8214600019841416156145d6576145d6614866565b500590565b600181815b808511156146165781600019048211156145fc576145fc614866565b8085161561460957918102915b93841c93908002906145e0565b509250929050565b60006110ca838360008261463457506001610902565b8161464157506000610902565b816001811461465757600281146146615761467d565b6001915050610902565b60ff84111561467257614672614866565b50506001821b610902565b5060208310610133831016604e8410600b84101617156146a0575081810a610902565b6146aa83836145db565b80600019048211156146be576146be614866565b029392505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8184138284138583048511828216161561470557614705614866565b600160ff1b8487128682058812818416161561472357614723614866565b85871292508782058712848416161561473e5761473e614866565b8785058712818416161561475457614754614866565b505050929093029392505050565b600081600019048311821515161561477c5761477c614866565b500290565b600061ffff8381169083168181101561479c5761479c614866565b039392505050565b6000828210156147b6576147b6614866565b500390565b60006001600160501b038381169083168181101561479c5761479c614866565b60005b838110156147f65781810151838201526020016147de565b83811115614805576000848401525b50505050565b600061ffff82168061481f5761481f614866565b6000190192915050565b600061ffff8083168181141561484157614841614866565b6001019392505050565b600060001982141561485f5761485f614866565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461264957600080fd5b6001600160501b038116811461264957600080fdfea2646970667358221220f47d645210530dac38933ebdaaecdb5043b369b87b65c139b6815b81a0e7da1d64736f6c63430008040033608060405234801561001057600080fd5b5033806000816100675760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615610097576100978161009f565b505050610149565b6001600160a01b0381163314156100f85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161005e565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61178a806101586000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80638da5cb5b11610076578063f2fde38b1161005b578063f2fde38b146101a9578063f800ece9146101bc578063ff2ed6e0146101d157600080fd5b80638da5cb5b14610178578063ad3fdee51461019357600080fd5b80632dc6a726116100a75780632dc6a72614610128578063573a23af1461015b57806379ba50971461017057600080fd5b8063218936fc146100c35780632656554c14610105575b600080fd5b6100d66100d13660046112c1565b6101e4565b604080516001600160a01b03948516815292841660208401529216918101919091526060015b60405180910390f35b6101186101133660046112c1565b610297565b60405190151581526020016100fc565b61013b6101363660046113d0565b610317565b604080516001600160a01b039384168152929091166020830152016100fc565b61016e61016936600461132a565b6103be565b005b61016e610506565b6000546040516001600160a01b0390911681526020016100fc565b61019b6105c4565b6040519081526020016100fc565b61016e6101b73660046111e3565b6105d4565b6101c461063e565b6040516100fc91906114f7565b61016e6101df3660046112c1565b6106e1565b60008060008073223cfead3f95960c8e8d7e27a512ead8663e7c82638b0846f660028a8a8a8a6040518663ffffffff1660e01b815260040161022a9594939291906115d8565b60606040518083038186803b15801561024257600080fd5b505af4158015610256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027a9190611431565b80516020820151604090920151909a919950975095505050505050565b600061030e600286868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061076492505050565b95945050505050565b600080600073223cfead3f95960c8e8d7e27a512ead8663e7c82638b0846f6600287876040518463ffffffff1660e01b815260040161035893929190611611565b60606040518083038186803b15801561037057600080fd5b505af4158015610384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a89190611431565b80516020909101519093509150505b9250929050565b6103c6610944565b6001600160a01b038316158015906103e657506001600160a01b03821615155b80156103fa57506001600160a01b03811615155b61044b5760405162461bcd60e51b815260206004820152601c60248201527f4164647265737365732073686f756c64206e6f74206265206e756c6c0000000060448201526064015b60405180910390fd5b60006040518060600160405280856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b031681525090506104fc600289898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a90819084018382808284376000920191909152508792506109a0915050565b5050505050505050565b6001546001600160a01b031633146105605760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610442565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60006105cf60025490565b905090565b6105dc610944565b6001600160a01b0381166106325760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f00000000000000006044820152606401610442565b61063b81610b09565b50565b6040517f63b3a3080000000000000000000000000000000000000000000000000000000081526002600482015260609073223cfead3f95960c8e8d7e27a512ead8663e7c82906363b3a3089060240160006040518083038186803b1580156106a557600080fd5b505af41580156106b9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105cf91908101906111ff565b6106e9610944565b61075e600285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781529250879150869081908401838280828437600092019190915250610bc092505050565b50505050565b82546000906107755750600061093d565b610792604051806040016040528085815260200184815250610f75565b610939856001810160006107ab88805160209091012090565b815260200190815260200160002060006107ca87805160209091012090565b815260200190815260200160002054815481106107f757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201604051806040016040529081600082018054610820906116ee565b80601f016020809104026020016040519081016040528092919081815260200182805461084c906116ee565b80156108995780601f1061086e57610100808354040283529160200191610899565b820191906000526020600020905b81548152906001019060200180831161087c57829003601f168201915b505050505081526020016001820180546108b2906116ee565b80601f01602080910402602001604051908101604052809291908181526020018280546108de906116ee565b801561092b5780601f106109005761010080835404028352916020019161092b565b820191906000526020600020905b81548152906001019060200180831161090e57829003601f168201915b505050505081525050610f75565b1490505b9392505050565b6000546001600160a01b0316331461099e5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610442565b565b6109ab848484610764565b156109f85760405162461bcd60e51b815260206004820152601260248201527f4b657920616c72656164792065786973747300000000000000000000000000006044820152606401610442565b6040805180820190915283815260208082018490528554600181018755600087815282902083518051600290930290910192610a3992849290910190610faf565b506020828101518051610a529260018501920190610faf565b50508454610a63915060019061169f565b8351602080860191822060009081526001888101835260408083208851898601908120855290855281842096909655975190932081526002978801825286812095519093208352938452908490208251815473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0392831617835594840151928201805486169382169390931790925591909301519301805490911692909116919091179055565b6001600160a01b038116331415610b625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610442565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b610bcb838383610764565b610c175760405162461bcd60e51b815260206004820152601260248201527f4b657920646f6573206e6f7420657869737400000000000000000000000000006044820152606401610442565b60006001610c23855490565b610c2d919061169f565b90506000846001016000610c4686805160209091012090565b81526020019081526020016000206000610c6585805160209091012090565b8152602001908152602001600020549050818114610e9c576000856000018381548110610ca257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201604051806040016040529081600082018054610ccb906116ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf7906116ee565b8015610d445780601f10610d1957610100808354040283529160200191610d44565b820191906000526020600020905b815481529060010190602001808311610d2757829003601f168201915b50505050508152602001600182018054610d5d906116ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610d89906116ee565b8015610dd65780601f10610dab57610100808354040283529160200191610dd6565b820191906000526020600020905b815481529060010190602001808311610db957829003601f168201915b505050505081525050905081866001016000610dfb8460000151805160209091012090565b81526020019081526020016000206000610e1e8460200151805160209091012090565b81526020019081526020016000208190555080866000018381548110610e5457634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202016000820151816000019080519060200190610e7e929190610faf565b506020828101518051610e979260018501920190610faf565b505050505b8351602080860191909120600090815260018701825260408082208651878501208352909252908120558454859080610ee557634e487b7160e01b600052603160045260246000fd5b60008281526020812060001990920191600283020190610f058282611033565b610f13600183016000611033565b505090555050815160209283012060009081526002938401835260408082208351938501939093208252919092529020805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805482169055910180549091169055565b600081600001518260200151604051602001610f9292919061157b565b604051602081830303815290604052805190602001209050919050565b828054610fbb906116ee565b90600052602060002090601f016020900481019282610fdd5760008555611023565b82601f10610ff657805160ff1916838001178555611023565b82800160010185558215611023579182015b82811115611023578251825591602001919060010190611008565b5061102f929150611069565b5090565b50805461103f906116ee565b6000825580601f1061104f575050565b601f01602090049060005260206000209081019061063b91905b5b8082111561102f576000815560010161106a565b60008083601f84011261108f578182fd5b50813567ffffffffffffffff8111156110a6578182fd5b6020830191508360208285010111156103b757600080fd5b600082601f8301126110ce578081fd5b81356110e16110dc82611677565b611646565b8181528460208386010111156110f5578283fd5b816020850160208301379081016020019190915292915050565b600082601f83011261111f578081fd5b815161112d6110dc82611677565b818152846020838601011115611141578283fd5b6111528260208301602087016116c2565b949350505050565b60006040828403121561116b578081fd5b6040516040810167ffffffffffffffff828210818311171561118f5761118f611729565b8160405282935084519150808211156111a757600080fd5b6111b38683870161110f565b835260208501519150808211156111c957600080fd5b506111d68582860161110f565b6020830152505092915050565b6000602082840312156111f4578081fd5b813561093d8161173f565b60006020808385031215611211578182fd5b825167ffffffffffffffff80821115611228578384fd5b818501915085601f83011261123b578384fd5b81518181111561124d5761124d611729565b8060051b61125c858201611646565b8281528581019085870183870188018b1015611276578889fd5b8893505b848410156112b35780518681111561129057898afd5b61129e8c8a838b010161115a565b8452506001939093019291870191870161127a565b509998505050505050505050565b600080600080604085870312156112d6578283fd5b843567ffffffffffffffff808211156112ed578485fd5b6112f98883890161107e565b90965094506020870135915080821115611311578384fd5b5061131e8782880161107e565b95989497509550505050565b600080600080600080600060a0888a031215611344578283fd5b873567ffffffffffffffff8082111561135b578485fd5b6113678b838c0161107e565b909950975060208a013591508082111561137f578485fd5b5061138c8a828b0161107e565b90965094505060408801356113a08161173f565b925060608801356113b08161173f565b915060808801356113c08161173f565b8091505092959891949750929550565b600080604083850312156113e2578182fd5b823567ffffffffffffffff808211156113f9578384fd5b611405868387016110be565b9350602085013591508082111561141a578283fd5b50611427858286016110be565b9150509250929050565b600060608284031215611442578081fd5b6040516060810181811067ffffffffffffffff8211171561146557611465611729565b60405282516114738161173f565b815260208301516114838161173f565b602082015260408301516114968161173f565b60408201529392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526114e38160208601602086016116c2565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b870101848801865b8381101561156d57888303603f1901855281518051878552611541888601826114cb565b91890151858303868b015291905061155981836114cb565b96890196945050509086019060010161151d565b509098975050505050505050565b60608152600061158e60608301856114cb565b828103806020850152600182527f2f0000000000000000000000000000000000000000000000000000000000000060208301526040810160408501525061030e60408201856114cb565b8581526060602082015260006115f26060830186886114a2565b82810360408401526116058185876114a2565b98975050505050505050565b83815260606020820152600061162a60608301856114cb565b828103604084015261163c81856114cb565b9695505050505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561166f5761166f611729565b604052919050565b600067ffffffffffffffff82111561169157611691611729565b50601f01601f191660200190565b6000828210156116bd57634e487b7160e01b81526011600452602481fd5b500390565b60005b838110156116dd5781810151838201526020016116c5565b8381111561075e5750506000910152565b600181811c9082168061170257607f821691505b6020821081141561172357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461063b57600080fdfea264697066735822122052fda9c93813c676b0107bb2dcf9c3d6a0ee245d4e19fc4eaae1e994f001329564736f6c63430008040033