8k txs
15.1k calls
constructor
constructor(address v, address fwd, address ac)
functions
autoConvertAddress
viewfunction autoConvertAddress() view returns (address)
checkBuyOrders
viewfunction checkBuyOrders(uint256[] orderIds) view returns (tuple[] res)
checkSellOrders
viewfunction checkSellOrders(uint256[] orderIds) view returns (tuple[] res)
config
viewfunction config() view returns (address)
domainSeparator
viewfunction domainSeparator() view returns (bytes32)
EIP712_NAME
viewfunction EIP712_NAME() view returns (string)
EIP712_VERSION
viewfunction EIP712_VERSION() view returns (string)
getBuyOrder
viewfunction getBuyOrder(uint256 orderId) view returns (tuple)
getMaxBuy
viewfunction getMaxBuy(uint256 remainingAmount, uint256 totalSats, uint64 relFee, uint256 availableSats) view returns (uint256)
getPool
viewfunction getPool(uint256 vaultId) view returns (tuple)
getPoolFee
viewfunction getPoolFee(uint64 relFee, uint256 totalSats) view returns (uint256)
getSatsForPurchase
purefunction getSatsForPurchase(uint256 remainingAmount, uint256 totalSats, uint256 amountBought) pure returns (uint256)
getSellDeposit
viewfunction getSellDeposit(uint256 vaultId) view returns (tuple)
getSellOrder
viewfunction getSellOrder(uint256 orderId) view returns (tuple)
getTotalBuyCost
viewfunction getTotalBuyCost(uint256 remainingAmount, uint256 totalSats, uint64 relFee, uint256 amountBought) view returns (uint256)
isPoolSignatureValid
viewfunction isPoolSignatureValid(string operator, tuple vault, bytes signature) view returns (bool)
isTrustedForwarder
viewfunction isTrustedForwarder(address fwd) view returns (bool)
nextOrderId
viewfunction nextOrderId() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
signatureNonce
viewfunction signatureNonce(string) view returns (uint256)
vm
viewfunction vm() view returns (address)
wchi
viewfunction wchi() view returns (address)
acceptBuyOrder
nonpayablefunction acceptBuyOrder(tuple args)
acceptBuyOrders
nonpayablefunction acceptBuyOrders(tuple[] orders)
acceptSellOrder
nonpayablefunction acceptSellOrder(tuple args)
acceptSellOrders
nonpayablefunction acceptSellOrders(tuple[] orders)
bumpSignatureNonce
nonpayablefunction bumpSignatureNonce(string operator) returns (uint256)
cancelBuyOrder
nonpayablefunction cancelBuyOrder(uint256 orderId)
cancelPool
nonpayablefunction cancelPool(uint256 vaultId)
cancelSellDeposit
nonpayablefunction cancelSellDeposit(uint256 vaultId)
cancelSellOrder
nonpayablefunction cancelSellOrder(uint256 orderId)
createBuyOrder
nonpayablefunction createBuyOrder(string buyer, string asset, uint256 amount, uint256 totalSats, uint256 poolId, bytes32 checkpoint) returns (uint256)
createPool
nonpayablefunction createPool(string operator, string endpoint, string asset, uint256 amount, uint64 relFee) returns (uint256)
createSellDeposit
nonpayablefunction createSellDeposit(string owner, string asset, uint256 amount) returns (uint256)
createSellOrder
nonpayablefunction createSellOrder(string seller, string asset, uint256 amount, uint256 totalSats) returns (uint256)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
BuyOrderCreated
event BuyOrderCreated(uint256 orderId, uint256 poolId, address creator, string buyer, string asset, uint256 amount, uint256 totalSats)
BuyOrderRemoved
event BuyOrderRemoved(uint256 orderId)
BuyOrderUpdated
event BuyOrderUpdated(uint256 orderId, uint256 amount, uint256 totalSats)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PoolCreated
event PoolCreated(uint256 vaultId, string operator, string endpoint, string asset, uint256 amount, uint64 relFee)
PoolRemoved
event PoolRemoved(uint256 vaultId)
PoolUpdated
event PoolUpdated(uint256 vaultId, uint256 newAmount)
SellDepositCreated
event SellDepositCreated(uint256 vaultId, string owner, string asset, uint256 amount)
SellDepositRemoved
event SellDepositRemoved(uint256 vaultId)
SellDepositUpdated
event SellDepositUpdated(uint256 vaultId, uint256 newAmount)
SellOrderCreated
event SellOrderCreated(uint256 orderId, uint256 vaultId, address creator, string seller, string asset, uint256 amount, uint256 totalSats)
SellOrderRemoved
event SellOrderRemoved(uint256 orderId)
SellOrderUpdated
event SellOrderUpdated(uint256 orderId, uint256 amount, uint256 totalSats)
Trade
event Trade(string asset, uint256 amount, uint256 sats, string seller, string buyer)
Unpaused
event Unpaused(address account)
errors
No errors.
creation bytecode
0x6101c060405234801561001157600080fd5b506040516163893803806163898339810160408190526100309161032e565b8183806040518060400160405280600881526020016711195b5bd8dc9a5d60c21b815250604051806040016040528060018152602001603160f81b81525082806001600160a01b03166080816001600160a01b0316815250506080516001600160a01b031663439a7da76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100ed919061037b565b6001600160a01b031660a0908152600160005583516020808601919091208451858301206101208290526101408190524660e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81870181905281830186905260608201859052608082019390935230818801528151808203909701875260c00190528451949093019390932090935060c0523061010052610160525050604080516379502c5560e01b815290516001600160a01b03851693506379502c55925060048083019260209291908290030181865afa1580156101d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fd919061037b565b6001600160a01b0390811661018052929092166101a05250610227905061022261025c565b61026b565b6006805460ff60a01b19169055600780546001600160a01b0319166001600160a01b03929092169190911790555061039f9050565b60006102666102bd565b905090565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006102c8336102df565b156102da575060131936013560601c90565b503390565b6007546000906001600160a01b039081169083160361030057506001919050565b506101a0516001600160a01b0390811691161490565b6001600160a01b038116811461032b57600080fd5b50565b60008060006060848603121561034357600080fd5b835161034e81610316565b602085015190935061035f81610316565b604085015190925061037081610316565b809150509250925092565b60006020828403121561038d57600080fd5b815161039881610316565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051615e42610547600039600061167e015260008181610571015281816111dd0152818161149901526121780152600061488c015260006148db015260006148b60152600061480f01526000614839015260006148630152600081816104a701528181610d0901528181610da1015281816128960152818161297601528181613a2501528181613b7e01526143c30152600081816103de0152818161077d015281816108b9015281816109c501528181610bdf01528181610fda015281816110eb0152818161136f0152818161173601528181611a6a01528181611bd101528181611ce201528181611d8901528181611f2e0152818161205b0152818161225d0152818161236e015281816124f601528181612703015281816127dc01528181612cd101528181612f5b01528181612fd701528181613173015281816132a00152818161353301528181613786015281816138af015281816139ad01528181613c3901528181613cea015281816141ed015281816142cb01526144e40152615e426000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806365ba55c21161017b578063984957c5116100d8578063e537990f1161008c578063eccec5a811610071578063eccec5a814610677578063f2fde38b146106b3578063f698da25146106c657600080fd5b8063e537990f14610651578063ec3459081461066457600080fd5b8063be5d147f116100bd578063be5d147f14610618578063cb26a77b1461062b578063d42ba2351461063e57600080fd5b8063984957c5146105e5578063b1af1bda146105f857600080fd5b8063827c78891161012f57806387b709951161011457806387b70995146105ae5780638da5cb5b146105c157806394c50987146105d257600080fd5b8063827c7889146105935780638456cb59146105a657600080fd5b80636bcae0ff116101605780636bcae0ff14610551578063715018a61461056457806379502c551461056c57600080fd5b806365ba55c21461051e578063679088e61461053157600080fd5b80633a7684631161022957806340b29e38116101dd578063572b6c05116101c2578063572b6c05146104c95780635c975abb146104ec578063601bb017146104fe57600080fd5b806340b29e381461048f578063439a7da7146104a257600080fd5b80633f4ba83a1161020e5780633f4ba83a146104615780633f918edf14610469578063402ac44d1461047c57600080fd5b80633a768463146103d95780633b2fb7a81461041857600080fd5b80632fde321c11610280578063383cae4811610265578063383cae481461037b578063390ce0d31461038e5780633936613b146103ae57600080fd5b80632fde321c14610355578063376e6ef01461036857600080fd5b80631a46e42a116102b15780631a46e42a1461030b5780632a58b3301461031e5780632bf2e51c1461033557600080fd5b8063068bcd8d146102cd5780631710181c146102f6575b600080fd5b6102e06102db366004614d85565b6106ce565b6040516102ed9190614e51565b60405180910390f35b610309610304366004614e64565b610849565b005b610309610319366004614d85565b61085d565b61032760005481565b6040519081526020016102ed565b610348610343366004614ee4565b610ab3565b6040516102ed9190614fc0565b610327610363366004615073565b610f41565b6103276103763660046151a0565b610f87565b610327610389366004615213565b6111d8565b6103a161039c366004614d85565b6112ab565b6040516102ed91906152b5565b6103276103bc3660046152c8565b805160208183018101805160058252928201919093012091525481565b6104007f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ed565b6104546040518060400160405280600881526020017f44656d6f6372697400000000000000000000000000000000000000000000000081525081565b6040516102ed91906152fd565b610309611448565b610309610477366004615310565b61145a565b61032761048a366004615073565b61146b565b61030961049d366004614ee4565b61161c565b6104007f000000000000000000000000000000000000000000000000000000000000000081565b6104dc6104d7366004615360565b61165b565b60405190151581526020016102ed565b600654600160a01b900460ff166104dc565b61051161050c366004614d85565b6116b1565b6040516102ed919061537d565b61032761052c3660046153d7565b6117ed565b61054461053f366004614ee4565b61193e565b6040516102ed9190615403565b61032761055f366004615480565b611b7e565b610309611ebc565b6104007f000000000000000000000000000000000000000000000000000000000000000081565b6103096105a1366004614d85565b611ece565b610309612115565b600754610400906001600160a01b031681565b6006546001600160a01b0316610400565b6103276105e03660046154f9565b612125565b6103276105f33660046155ac565b6124a3565b61060b610606366004614d85565b612b3f565b6040516102ed9190615638565b610309610626366004614d85565b612c7c565b6104dc61063936600461564b565b612e4b565b61032761064c3660046152c8565b612fd3565b61030961065f366004614d85565b613113565b610309610672366004614ee4565b613352565b6104546040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6103096106c1366004615360565b61338c565b610327613419565b61070a6040518060a0016040528060008152602001606081526020016060815260200160008152602001600067ffffffffffffffff1681525090565b6000828152600260205260409020805460ff166107645761075d6040518060a0016040528060008152602001606081526020016060815260200160008152602001600067ffffffffffffffff1681525090565b9392505050565b604051632500ed8d60e21b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639403b63490602401600060405180830381865afa1580156107cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f49190810190615748565b9050600081604001511161080a5761080a6157f1565b6040805160a0810182529485528151602080870191909152820151858201520151606084015254610100900467ffffffffffffffff1660808301525090565b610851613428565b61085a81613482565b50565b6000610868826112ab565b805190915082146108b75760405162461bcd60e51b81526020600482015260146024820152731bdc99195c88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064015b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a46108ee6140a2565b83606001516040518363ffffffff1660e01b8152600401610910929190615807565b602060405180830381865afa15801561092d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190615829565b6109c35760405162461bcd60e51b815260206004820152603460248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201527f66207468652073656c6c6572206163636f756e7400000000000000000000000060648201526084016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399d12bfd826020015183606001518460a001516040518463ffffffff1660e01b8152600401610a1f9392919061584b565b600060405180830381600087803b158015610a3957600080fd5b505af1158015610a4d573d6000803e3d6000fd5b505050600083815260016020818152604080842084815592830180546001600160a01b0319169055600290920192909255518481527f55bfdc0681d198eeb97234ca08ebb18cac5a2af7b3dff0be40166f67a4576f949250015b60405180910390a15050565b60608167ffffffffffffffff811115610ace57610ace6150b2565b604051908082528060200260200182016040528015610b0757816020015b610af4614c12565b815260200190600190039081610aec5790505b50905060005b82811015610f3a57610b36848483818110610b2a57610b2a615874565b90506020020135612b3f565b828281518110610b4857610b48615874565b602090810291909101015152838382818110610b6657610b66615874565b90506020020135828281518110610b7f57610b7f615874565b6020026020010151600001516000015114828281518110610ba257610ba2615874565b60200260200101516020019015159081151581525050818181518110610bca57610bca615874565b60200260200101516020015115610f325760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663615deb16848481518110610c1e57610c1e615874565b602002602001015160000151608001516040518263ffffffff1660e01b8152600401610c4a91906152fd565b602060405180830381865afa158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8b919061588a565b9050806001600160a01b0316838381518110610ca957610ca9615874565b602002602001015160000151606001516001600160a01b031614838381518110610cd557610cd5615874565b6020908102919091010151901515604091820152516370a0823160e01b81526001600160a01b0382811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7691906158a7565b604051636eb1769f60e11b81526001600160a01b0384811660048301523060248301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063dd62ed3e90604401602060405180830381865afa158015610de8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0c91906158a7565b905080821115610e1a578091505b81858581518110610e2d57610e2d615874565b602002602001015160600181815250506000610eb2868681518110610e5457610e54615874565b60200260200101516000015160c00151878781518110610e7657610e76615874565b60200260200101516000015160e00151888881518110610e9857610e98615874565b60200260200101516000015160400151608001518661146b565b9050858581518110610ec657610ec6615874565b6020026020010151600001516040015160600151811115610f0a57858581518110610ef357610ef3615874565b602002602001015160000151604001516060015190505b80868681518110610f1d57610f1d615874565b60200260200101516080018181525050505050505b600101610b0d565b5092915050565b600081600003610f5357506000610f7f565b6000610f608686856117ed565b90506000610f6e85836111d8565b9050610f7a81836158d6565b925050505b949350505050565b6000808211610fd85760405162461bcd60e51b815260206004820152601860248201527f6e6f6e2d7a65726f20616d6f756e74207265717569726564000000000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a461100f6140a2565b866040518363ffffffff1660e01b815260040161102d929190615807565b602060405180830381865afa15801561104a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106e9190615829565b6110d15760405162461bcd60e51b815260206004820152602e60248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201526d19881d1a1a5cc81858d8dbdd5b9d60921b60648201526084016108ae565b604051635af5b13d60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5eb627a90611124908890889088906004016158e9565b6020604051808303816000875af1158015611143573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116791906158a7565b905060008111611179576111796157f1565b60008181526003602052604090819020805460ff19166001179055517fae5bb3e86d35fb15f7a6dac6adb0e1b76547266e895b5ba5bac3190beefe045b906111c890839088908890889061591f565b60405180910390a1949350505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663180b0d7e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125d919061595c565b67ffffffffffffffff169050806001828667ffffffffffffffff16866112839190615979565b61128d91906158d6565b6112979190615990565b6112a191906159a3565b9150505b92915050565b6112f46040518060e00160405280600081526020016000815260200160006001600160a01b03168152602001606081526020016060815260200160008152602001600081525090565b60008281526001602052604081208054909181900361135657610f7f6040518060e00160405280600081526020016000815260200160006001600160a01b03168152602001606081526020016060815260200160008152602001600081525090565b604051632500ed8d60e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639403b63490602401600060405180830381865afa1580156113be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e69190810190615748565b905060008160400151116113fc576113fc6157f1565b6040805160e08101825295865260208087019390935260018401546001600160a01b03168682015281516060870152918101516080860152015160a08401526002015460c08301525090565b6114506140ac565b611458614125565b565b611462613428565b61085a81614180565b60008360000361147c575083610f7f565b8161148986868689610f41565b11611495575083610f7f565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663180b0d7e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611519919061595c565b67ffffffffffffffff16905060008467ffffffffffffffff168261153d91906158d6565b6115479087615979565b82611552868a615979565b61155c9190615979565b61156691906159a3565b6115719060016158d6565b90508361158088888885610f41565b1161158d5761158d6157f1565b8060005b61159c8160016158d6565b8211156115e857600060026115b183856158d6565b6115bb91906159a3565b905060006115cb8b8b8b85610f41565b9050878111156115dd578193506115e1565b8192505b5050611591565b6115f38160016158d6565b8214611601576116016157f1565b888110611610576116106157f1565b98975050505050505050565b60005b818110156116565761164e83838381811061163c5761163c615874565b905060200281019061047791906159c5565b60010161161f565b505050565b6007546000906001600160a01b039081169083160361167c57506001919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908316146112a5565b6116dc6040518060800160405280600081526020016060815260200160608152602001600081525090565b60008281526003602052604090205460ff1661171d576112a56040518060800160405280600081526020016060815260200160608152602001600081525090565b604051632500ed8d60e21b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639403b63490602401600060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117ad9190810190615748565b905060008160400151116117c3576117c36157f1565b60408051608081018252938452815160208086019190915282015184820152015160608301525090565b60008084116118645760405162461bcd60e51b815260206004820152602260248201527f6578706563746564206e6f6e2d7a65726f2072656d61696e696e6720616d6f7560448201527f6e7400000000000000000000000000000000000000000000000000000000000060648201526084016108ae565b600082116118b45760405162461bcd60e51b815260206004820152601e60248201527f616d6f756e7420626f75676874206d757374206265206e6f6e2d7a65726f000060448201526064016108ae565b838211156119045760405162461bcd60e51b815260206004820152601860248201527f616d6f756e7420657863656564732072656d61696e696e67000000000000000060448201526064016108ae565b83820361191257508161075d565b836001816119208686615979565b61192a91906158d6565b6119349190615990565b610f7f91906159a3565b60608167ffffffffffffffff811115611959576119596150b2565b60405190808252806020026020018201604052801561199257816020015b61197f614c47565b8152602001906001900390816119775790505b50905060005b82811015610f3a576119c18484838181106119b5576119b5615874565b905060200201356112ab565b8282815181106119d3576119d3615874565b6020908102919091010151528383828181106119f1576119f1615874565b90506020020135828281518110611a0a57611a0a615874565b6020026020010151600001516000015114828281518110611a2d57611a2d615874565b60200260200101516020019015159081151581525050818181518110611a5557611a55615874565b60200260200101516020015115611b765760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663615deb16848481518110611aa957611aa9615874565b602002602001015160000151606001516040518263ffffffff1660e01b8152600401611ad591906152fd565b602060405180830381865afa158015611af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b16919061588a565b9050806001600160a01b0316838381518110611b3457611b34615874565b602002602001015160000151604001516001600160a01b031614838381518110611b6057611b60615874565b6020908102919091010151901515604090910152505b600101611998565b6000808311611bcf5760405162461bcd60e51b815260206004820152601860248201527f6e6f6e2d7a65726f20616d6f756e74207265717569726564000000000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a4611c066140a2565b876040518363ffffffff1660e01b8152600401611c24929190615807565b602060405180830381865afa158015611c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c659190615829565b611cc85760405162461bcd60e51b815260206004820152602e60248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201526d19881d1a1a5cc81858d8dbdd5b9d60921b60648201526084016108ae565b604051635af5b13d60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5eb627a90611d1b908990899089906004016158e9565b6020604051808303816000875af1158015611d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5e91906158a7565b905060008111611d7057611d706157f1565b600080548180611d7f836159e5565b91905055905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663615deb16896040518263ffffffff1660e01b8152600401611dd391906152fd565b602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e14919061588a565b604080516060810182528581526001600160a01b0383811660208084019182528385018b8152600089815260019283905286902094518555915190840180546001600160a01b031916919093161790915551600290910155519091507f9ede5602b7bbac42762d94d2a4f96eeac538a39d775ac013ea4da7b2f709181690611ea9908490869085908d908d908d908d906159fe565b60405180910390a1509695505050505050565b611ec46140ac565b61145860006146df565b6000611ed9826106ce565b80519091508214611f2c5760405162461bcd60e51b815260206004820152601b60248201527f74726164696e6720706f6f6c20646f6573206e6f74206578697374000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a4611f636140a2565b83602001516040518363ffffffff1660e01b8152600401611f85929190615807565b602060405180830381865afa158015611fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc69190615829565b6120385760405162461bcd60e51b815260206004820152603660248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201527f6620746865206f70657261746f72206163636f756e740000000000000000000060648201526084016108ae565b8051602082015160608301516040516399d12bfd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936399d12bfd9361209393919290919060040161584b565b600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b50505060008381526002602052604090819020805468ffffffffffffffffff19169055517f35ab5a1a55463270dd163e40e2dc7065e80802432f9a2044222f018979ff36269150610aa79084815260200190565b61211d6140ac565b611458614731565b60008083116121765760405162461bcd60e51b815260206004820152601860248201527f6e6f6e2d7a65726f20616d6f756e74207265717569726564000000000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663242b46376040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f8919061595c565b67ffffffffffffffff168267ffffffffffffffff16111561225b5760405162461bcd60e51b815260206004820152600c60248201527f66656520746f6f2068696768000000000000000000000000000000000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a46122926140a2565b886040518363ffffffff1660e01b81526004016122b0929190615807565b602060405180830381865afa1580156122cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f19190615829565b6123545760405162461bcd60e51b815260206004820152602e60248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201526d19881d1a1a5cc81858d8dbdd5b9d60921b60648201526084016108ae565b604051635af5b13d60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5eb627a906123a7908a90899089906004016158e9565b6020604051808303816000875af11580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea91906158a7565b9050600081116123fc576123fc6157f1565b6040805180820182526001815267ffffffffffffffff85811660208084019182526000868152600290915284902092518354915168ffffffffffffffffff1990921690151568ffffffffffffffff001916176101009190921602179055517f233972a1fa8d3a5c63c224e0dfbc06b5e4077670e3eadfb309b53e44482870be906124919083908a908a908a908a908a90615a55565b60405180910390a19695505050505050565b60008085116124f45760405162461bcd60e51b815260206004820152601860248201527f6e6f6e2d7a65726f20616d6f756e74207265717569726564000000000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a461252b6140a2565b896040518363ffffffff1660e01b8152600401612549929190615807565b602060405180830381865afa158015612566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258a9190615829565b6125ed5760405162461bcd60e51b815260206004820152602e60248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201526d19881d1a1a5cc81858d8dbdd5b9d60921b60648201526084016108ae565b60006125f8846106ce565b9050858160600151101561264e5760405162461bcd60e51b815260206004820152601d60248201527f706f6f6c2068617320696e73756666696369656e742062616c616e636500000060448201526064016108ae565b8660405160200161265f9190615ab8565b60405160208183030381529060405280519060200120816040015160405160200161268a9190615ab8565b60405160208183030381529060405280519060200120146126ed5760405162461bcd60e51b815260206004820152601360248201527f706f6f6c206173736574206d69736d617463680000000000000000000000000060448201526064016108ae565b6040516307811c6d60e41b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637811c6d090602401602060405180830381865afa158015612752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127769190615829565b6127c25760405162461bcd60e51b815260206004820152601a60248201527f706f6f6c20636865636b706f696e7420697320696e76616c696400000000000060448201526064016108ae565b6040516330aef58b60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063615deb1690612811908c906004016152fd565b602060405180830381865afa15801561282e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612852919061588a565b905060006128648360800151886111d8565b9050600061287282896158d6565b6040516370a0823160e01b81526001600160a01b03858116600483015291925082917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156128dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290191906158a7565b101561294f5760405162461bcd60e51b815260206004820152601960248201527f696e73756666696369656e7420574348492062616c616e63650000000000000060448201526064016108ae565b604051636eb1769f60e11b81526001600160a01b03848116600483015230602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa1580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e391906158a7565b1015612a315760405162461bcd60e51b815260206004820152601b60248201527f696e73756666696369656e74205743484920616c6c6f77616e6365000000000060448201526064016108ae565b600080548180612a40836159e5565b9190505590506040518060a00160405280898152602001856001600160a01b031681526020018d81526020018b81526020018a815250600460008381526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002019081612ad59190615b52565b5060608201518160030155608082015181600401559050507f2e1bd621487c9a87e7625424cc4b923eb9a9a290f1ef10fc2c70170952ddab9b8189868f8f8f8f604051612b2897969594939291906159fe565b60405180910390a19b9a5050505050505050505050565b612b47614caf565b600082815260046020526040812080549091819003612b6857610f7f614caf565b6000612b73826106ce565b8051909150600003612b9057612b87614caf565b95945050505050565b60408051610100810182528681526020810184905290810182905260018401546001600160a01b03166060820152600284018054608083019190612bd390615aca565b80601f0160208091040260200160405190810160405280929190818152602001828054612bff90615aca565b8015612c4c5780601f10612c2157610100808354040283529160200191612c4c565b820191906000526020600020905b815481529060010190602001808311612c2f57829003601f168201915b50505050508152602001826040015181526020018460030154815260200184600401548152509350505050919050565b60008181526004602052604090208054612ccf5760405162461bcd60e51b81526020600482015260146024820152731bdc99195c88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a4612d066140a2565b836002016040518363ffffffff1660e01b8152600401612d27929190615c11565b602060405180830381865afa158015612d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d689190615829565b612dda5760405162461bcd60e51b815260206004820152603360248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201527f6620746865206275796572206163636f756e740000000000000000000000000060648201526084016108ae565b60008281526004602052604081208181556001810180546001600160a01b031916905590612e0b6002830182614d37565b506000600382018190556004909101556040518281527fb24b53936421409517ea3491eb343a4b7bccf5afa3c85447b3c2e8d9ac51ed9190602001610aa7565b6000807fc7cbf094803e7a70d7ce06c145b32c5d4ea7f343ac17a156433bdb624441305b85600001358660200135600589604051612e899190615ab8565b908152602001604051809103902054604051602001612ec1949392919093845260208401929092526040830152606082015260800190565b60405160208183030381529060405290506000612ee48280519060200120614775565b90506000612f288287878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506147de92505050565b6040517fa3b1b3a40000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a3b1b3a490612f929084908c90600401615807565b602060405180830381865afa158015612faf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116109190615829565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a461300c6140a2565b846040518363ffffffff1660e01b815260040161302a929190615807565b602060405180830381865afa158015613047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306b9190615829565b6130dd5760405162461bcd60e51b815260206004820152603360248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201527f662074686520706f6f6c206f70657261746f720000000000000000000000000060648201526084016108ae565b6005826040516130ed9190615ab8565b908152602001604051809103902060008154613108906159e5565b918290555092915050565b600061311e826116b1565b805190915082146131715760405162461bcd60e51b815260206004820152601b60248201527f73656c6c206465706f73697420646f6573206e6f74206578697374000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a46131a86140a2565b83602001516040518363ffffffff1660e01b81526004016131ca929190615807565b602060405180830381865afa1580156131e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320b9190615829565b61327d5760405162461bcd60e51b815260206004820152603360248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201527f6620746865206f776e6572206163636f756e740000000000000000000000000060648201526084016108ae565b8051602082015160608301516040516399d12bfd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936399d12bfd936132d893919290919060040161584b565b600060405180830381600087803b1580156132f257600080fd5b505af1158015613306573d6000803e3d6000fd5b50505060008381526003602052604090819020805460ff19169055517f909f60b3df23d5e8d380d158201ef4fa7f4e295ee8a381e19904a6fb8fd5f3c09150610aa79084815260200190565b60005b818110156116565761338483838381811061337257613372615874565b90506020028101906103049190615cad565b600101613355565b6133946140ac565b6001600160a01b0381166134105760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108ae565b61085a816146df565b6000613423614802565b905090565b600654600160a01b900460ff16156114585760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016108ae565b600061348e8235612b3f565b80519091506134d65760405162461bcd60e51b81526020600482015260146024820152731bdc99195c88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016108ae565b6040810151516134e8576134e86157f1565b60006135018260c001518360e0015185602001356117ed565b90506000613517836040015160800151836111d8565b6040516307811c6d60e41b8152606086013560048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637811c6d090602401602060405180830381865afa158015613582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a69190615829565b6135f25760405162461bcd60e51b815260206004820152601b60248201527f7661756c7420636865636b706f696e7420697320696e76616c6964000000000060448201526064016108ae565b6040808401516020015161360f9186016106396080880188615cc3565b6136815760405162461bcd60e51b815260206004820152602c60248201527f706f6f6c207369676e6174757265206f6620746865207661756c74206368656360448201527f6b20697320696e76616c6964000000000000000000000000000000000000000060648201526084016108ae565b600061369060408601356116b1565b80519091506136e15760405162461bcd60e51b815260206004820152601b60248201527f73656c6c206465706f73697420646f6573206e6f74206578697374000000000060448201526064016108ae565b8360a001516040516020016136f69190615ab8565b6040516020818303038152906040528051906020012081604001516040516020016137219190615ab8565b60405160208183030381529060405280519060200120146137845760405162461bcd60e51b815260206004820152601660248201527f6465706f736974206173736574206d69736d617463680000000000000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a3b1b3a46137bb6140a2565b83602001516040518363ffffffff1660e01b81526004016137dd929190615807565b602060405180830381865afa1580156137fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381e9190615829565b6138905760405162461bcd60e51b815260206004820152603360248201527f6e6f207065726d697373696f6e20746f20616374206f6e20626568616c66206f60448201527f6620746865206465706f736974206f776e65720000000000000000000000000060648201526084016108ae565b60808401516040516330aef58b60e11b81526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163615deb16916138e2916004016152fd565b602060405180830381865afa1580156138ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613923919061588a565b905084606001516001600160a01b0316816001600160a01b03161461398a5760405162461bcd60e51b815260206004820152601f60248201527f6275796572206e616d6520686173206265656e207472616e736665727265640060448201526064016108ae565b6040808601516020015190516330aef58b60e11b81526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163615deb16916139e0916004016152fd565b602060405180830381865afa1580156139fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a21919061588a565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd83613a5b6140a2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604481018890526064016020604051808303816000875af1158015613ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aeb9190615829565b613b375760405162461bcd60e51b815260206004820152601460248201527f57434849207472616e73666572206661696c656400000000000000000000000060448201526064016108ae565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528281166024830152604482018690527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015613bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613beb9190615829565b613c375760405162461bcd60e51b815260206004820152601460248201527f57434849207472616e73666572206661696c656400000000000000000000000060448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399d12bfd84600001518860400151602001518a602001356040518463ffffffff1660e01b8152600401613c979392919061584b565b600060405180830381600087803b158015613cb157600080fd5b505af1158015613cc5573d6000803e3d6000fd5b50505060408088015151608089015191516399d12bfd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693506399d12bfd92613d25929160208d01359060040161584b565b600060405180830381600087803b158015613d3f57600080fd5b505af1158015613d53573d6000803e3d6000fd5b505050507fee6cb959a555098bf28647d657eeebbe500b0f26c058b66c0ff2f313aa4f66178660a0015188602001358786602001518a60800151604051613d9e959493929190615d0a565b60405180910390a16040860151606001516020880135148015613e2057604080880180515160009081526002602052829020805468ffffffffffffffffff19169055515190517f35ab5a1a55463270dd163e40e2dc7065e80802432f9a2044222f018979ff362691613e139190815260200190565b60405180910390a1613e8c565b60008860200135886040015160600151613e3a9190615990565b905060008111613e4c57613e4c6157f1565b604088810151518151908152602081018390527f7fa9647ec1cc14e3822b46d05a2b9d4e019bde8875c0088c46b6503d71bf1722910160405180910390a1505b8660c0015188602001351480613e9f5750805b15613f2157865160009081526004602052604081208181556001810180546001600160a01b031916905590613ed76002830182614d37565b5060006003820181905560049091015586516040519081527fb24b53936421409517ea3491eb343a4b7bccf5afa3c85447b3c2e8d9ac51ed919060200160405180910390a1613fd1565b600088602001358860c00151613f379190615990565b905060008111613f4957613f496157f1565b6000878960e00151613f5b9190615990565b89516000908152600460205260409020805491925090613f7d57613f7d6157f1565b60038101839055600481018290558951604080519182526020820185905281018390527f7994dbfa4ef12316ebf0f8a3bfd00e8097404008d58d7a868383e8f4af1528699060600160405180910390a15050505b8360600151886020013503614033578351600090815260036020908152604091829020805460ff19169055855191519182527f909f60b3df23d5e8d380d158201ef4fa7f4e295ee8a381e19904a6fb8fd5f3c0910160405180910390a1614098565b6000886020013585606001516140499190615990565b90506000811161405b5761405b6157f1565b845160408051918252602082018390527f776bff5a42367cc4743bbfe044fb193b4ed810035ec240d1e66a27195f202665910160405180910390a1505b5050505050505050565b6000613423614929565b6140b46140a2565b6001600160a01b03166140cf6006546001600160a01b031690565b6001600160a01b0316146114585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108ae565b61412d61494b565b6006805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6141636140a2565b6040516001600160a01b03909116815260200160405180910390a1565b600061418c82356112ab565b80519091506141d45760405162461bcd60e51b81526020600482015260146024820152731bdc99195c88191bd95cc81b9bdd08195e1a5cdd60621b60448201526064016108ae565b6040516307811c6d60e41b8152606083013560048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637811c6d090602401602060405180830381865afa15801561423c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142609190615829565b6142ac5760405162461bcd60e51b815260206004820152601b60248201527f7661756c7420636865636b706f696e7420697320696e76616c6964000000000060448201526064016108ae565b60006142c58260a001518360c0015185602001356117ed565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663615deb1684606001516040518263ffffffff1660e01b815260040161431991906152fd565b602060405180830381865afa158015614336573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061435a919061588a565b905082604001516001600160a01b0316816001600160a01b0316146143c15760405162461bcd60e51b815260206004820181905260248201527f73656c6c6572206e616d6520686173206265656e207472616e7366657272656460448201526064016108ae565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6143f86140a2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0391821660048201529084166024820152604481018590526064016020604051808303816000875af1158015614465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144899190615829565b6144d55760405162461bcd60e51b815260206004820152601460248201527f57434849207472616e73666572206661696c656400000000000000000000000060448201526064016108ae565b60208301516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906399d12bfd906145186040880188615cc3565b88602001356040518563ffffffff1660e01b815260040161453c9493929190615d78565b600060405180830381600087803b15801561455657600080fd5b505af115801561456a573d6000803e3d6000fd5b505050507fee6cb959a555098bf28647d657eeebbe500b0f26c058b66c0ff2f313aa4f6617836080015185602001358486606001518880604001906145af9190615cc3565b6040516145c196959493929190615da3565b60405180910390a18260a0015184602001350361463f578251600090815260016020818152604080842084815592830180546001600160a01b0319169055600290920192909255845190519081527f55bfdc0681d198eeb97234ca08ebb18cac5a2af7b3dff0be40166f67a4576f94910160405180910390a16146d9565b600084602001358460a001516146559190615990565b905060008111614667576146676157f1565b6000838560c001516146799190615990565b8551600090815260016020908152604091829020600201839055875182519081529081018590529081018290529091507f25c702eda574c8acad4c9a7df04b8bf75a2d8749160bd64b89225d05908d74e59060600160405180910390a150505b50505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b614739613428565b6006805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141636140a2565b60006112a5614782614802565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006147ed85856149a4565b915091506147fa816149e9565b509392505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561485b57507f000000000000000000000000000000000000000000000000000000000000000046145b1561488557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60006149343361165b565b15614946575060131936013560601c90565b503390565b600654600160a01b900460ff166114585760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016108ae565b60008082516041036149da5760208301516040840151606085015160001a6149ce87828585614b4e565b945094505050506149e2565b506000905060025b9250929050565b60008160048111156149fd576149fd615df6565b03614a055750565b6001816004811115614a1957614a19615df6565b03614a665760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016108ae565b6002816004811115614a7a57614a7a615df6565b03614ac75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016108ae565b6003816004811115614adb57614adb615df6565b0361085a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016108ae565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614b855750600090506003614c09565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614bd9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614c0257600060019250925050614c09565b9150600090505b94509492505050565b6040518060a00160405280614c25614caf565b8152600060208201819052604082018190526060820181905260809091015290565b6040518060600160405280614c9b6040518060e00160405280600081526020016000815260200160006001600160a01b03168152602001606081526020016060815260200160008152602001600081525090565b815260006020820181905260409091015290565b6040518061010001604052806000815260200160008152602001614d056040518060a0016040528060008152602001606081526020016060815260200160008152602001600067ffffffffffffffff1681525090565b815260200160006001600160a01b03168152602001606081526020016060815260200160008152602001600081525090565b508054614d4390615aca565b6000825580601f10614d53575050565b601f01602090049060005260206000209081019061085a91905b80821115614d815760008155600101614d6d565b5090565b600060208284031215614d9757600080fd5b5035919050565b60005b83811015614db9578181015183820152602001614da1565b50506000910152565b60008151808452614dda816020860160208601614d9e565b601f01601f19169290920160200192915050565b805182526000602082015160a06020850152614e0d60a0850182614dc2565b905060408301518482036040860152614e268282614dc2565b9150506060830151606085015267ffffffffffffffff60808401511660808501528091505092915050565b60208152600061075d6020830184614dee565b600060208284031215614e7657600080fd5b813567ffffffffffffffff811115614e8d57600080fd5b820160a0818503121561075d57600080fd5b60008083601f840112614eb157600080fd5b50813567ffffffffffffffff811115614ec957600080fd5b6020830191508360208260051b85010111156149e257600080fd5b60008060208385031215614ef757600080fd5b823567ffffffffffffffff811115614f0e57600080fd5b614f1a85828601614e9f565b90969095509350505050565b8051825260208101516020830152600060408201516101006040850152614f51610100850182614dee565b90506060830151614f6d60608601826001600160a01b03169052565b5060808301518482036080860152614f858282614dc2565b91505060a083015184820360a0860152614f9f8282614dc2565b91505060c083015160c085015260e083015160e08501528091505092915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561505157603f198786030184528151805160a0875261500e60a0880182614f26565b6020838101511515898201526040808501511515908a0152606080850151908a015260809384015193909801929092525094938401939190910190600101614fe8565b50929695505050505050565b67ffffffffffffffff8116811461085a57600080fd5b6000806000806080858703121561508957600080fd5b843593506020850135925060408501356150a28161505d565b9396929550929360600135925050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156150eb576150eb6150b2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561511a5761511a6150b2565b604052919050565b600067ffffffffffffffff82111561513c5761513c6150b2565b50601f01601f191660200190565b600082601f83011261515b57600080fd5b813561516e61516982615122565b6150f1565b81815284602083860101111561518357600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156151b557600080fd5b833567ffffffffffffffff8111156151cc57600080fd5b6151d88682870161514a565b935050602084013567ffffffffffffffff8111156151f557600080fd5b6152018682870161514a565b93969395505050506040919091013590565b6000806040838503121561522657600080fd5b82356152318161505d565b946020939093013593505050565b80518252602081015160208301526001600160a01b0360408201511660408301526000606082015160e0606085015261527b60e0850182614dc2565b9050608083015184820360808601526152948282614dc2565b91505060a083015160a085015260c083015160c08501528091505092915050565b60208152600061075d602083018461523f565b6000602082840312156152da57600080fd5b813567ffffffffffffffff8111156152f157600080fd5b6112a18482850161514a565b60208152600061075d6020830184614dc2565b60006020828403121561532257600080fd5b813567ffffffffffffffff81111561533957600080fd5b82016080818503121561075d57600080fd5b6001600160a01b038116811461085a57600080fd5b60006020828403121561537257600080fd5b813561075d8161534b565b602081528151602082015260006020830151608060408401526153a360a0840182614dc2565b90506040840151601f198483030160608501526153c08282614dc2565b915050606084015160808401528091505092915050565b6000806000606084860312156153ec57600080fd5b505081359360208301359350604090920135919050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561505157603f198786030184528151805160608752615451606088018261523f565b60208381015115158982015260409384015115159390980192909252509493840193919091019060010161542b565b6000806000806080858703121561549657600080fd5b843567ffffffffffffffff8111156154ad57600080fd5b6154b98782880161514a565b945050602085013567ffffffffffffffff8111156154d657600080fd5b6154e28782880161514a565b949794965050505060408301359260600135919050565b600080600080600060a0868803121561551157600080fd5b853567ffffffffffffffff81111561552857600080fd5b6155348882890161514a565b955050602086013567ffffffffffffffff81111561555157600080fd5b61555d8882890161514a565b945050604086013567ffffffffffffffff81111561557a57600080fd5b6155868882890161514a565b93505060608601359150608086013561559e8161505d565b809150509295509295909350565b60008060008060008060c087890312156155c557600080fd5b863567ffffffffffffffff8111156155dc57600080fd5b6155e889828a0161514a565b965050602087013567ffffffffffffffff81111561560557600080fd5b61561189828a0161514a565b96999698505050506040850135946060810135946080820135945060a09091013592509050565b60208152600061075d6020830184614f26565b600080600080848603608081121561566257600080fd5b853567ffffffffffffffff81111561567957600080fd5b6156858882890161514a565b9550506040601f198201121561569a57600080fd5b50602085019250606085013567ffffffffffffffff8111156156bb57600080fd5b8501601f810187136156cc57600080fd5b803567ffffffffffffffff8111156156e357600080fd5b8760208284010111156156f557600080fd5b949793965060200194505050565b600082601f83011261571457600080fd5b815161572261516982615122565b81815284602083860101111561573757600080fd5b610f7f826020830160208701614d9e565b60006020828403121561575a57600080fd5b815167ffffffffffffffff81111561577157600080fd5b82016060818503121561578357600080fd5b61578b6150c8565b815167ffffffffffffffff8111156157a257600080fd5b6157ae86828501615703565b825250602082015167ffffffffffffffff8111156157cb57600080fd5b6157d786828501615703565b602083015250604091820151918101919091529392505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0383168152604060208201526000610f7f6040830184614dc2565b60006020828403121561583b57600080fd5b8151801515811461075d57600080fd5b8381526060602082015260006158646060830185614dc2565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561589c57600080fd5b815161075d8161534b565b6000602082840312156158b957600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156112a5576112a56158c0565b6060815260006158fc6060830186614dc2565b828103602084015261590e8186614dc2565b915050826040830152949350505050565b8481526080602082015260006159386080830186614dc2565b828103604084015261594a8186614dc2565b91505082606083015295945050505050565b60006020828403121561596e57600080fd5b815161075d8161505d565b80820281158282048414176112a5576112a56158c0565b818103818111156112a5576112a56158c0565b6000826159c057634e487b7160e01b600052601260045260246000fd5b500490565b60008235607e198336030181126159db57600080fd5b9190910192915050565b6000600182016159f7576159f76158c0565b5060010190565b8781528660208201526001600160a01b038616604082015260e060608201526000615a2c60e0830187614dc2565b8281036080840152615a3e8187614dc2565b60a0840195909552505060c0015295945050505050565b86815260c060208201526000615a6e60c0830188614dc2565b8281036040840152615a808188614dc2565b90508281036060840152615a948187614dc2565b91505083608083015267ffffffffffffffff831660a0830152979650505050505050565b600082516159db818460208701614d9e565b600181811c90821680615ade57607f821691505b602082108103615afe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561165657806000526020600020601f840160051c81016020851015615b2b5750805b601f840160051c820191505b81811015615b4b5760008155600101615b37565b5050505050565b815167ffffffffffffffff811115615b6c57615b6c6150b2565b615b8081615b7a8454615aca565b84615b04565b6020601f821160018114615bb45760008315615b9c5750848201515b600019600385901b1c1916600184901b178455615b4b565b600084815260208120601f198516915b82811015615be45787850151825560209485019460019092019101615bc4565b5084821015615c025786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b0383168152604060208201526000808354615c3281615aca565b8060408601526001821660008114615c515760018114615c6d57615ca1565b60ff1983166060870152606082151560051b8701019350615ca1565b86600052602060002060005b83811015615c9857815488820160600152600190910190602001615c79565b87016060019450505b50919695505050505050565b60008235609e198336030181126159db57600080fd5b6000808335601e19843603018112615cda57600080fd5b83018035915067ffffffffffffffff821115615cf557600080fd5b6020019150368190038213156149e257600080fd5b60a081526000615d1d60a0830188614dc2565b8660208401528560408401528281036060840152615d3b8186614dc2565b905082810360808401526116108185614dc2565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b848152606060208201526000615d92606083018587615d4f565b905082604083015295945050505050565b60a081526000615db660a0830189614dc2565b8760208401528660408401528281036060840152615dd48187614dc2565b90508281036080840152615de9818587615d4f565b9998505050505050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220831dfd210aa36ea3d535c390236170157cc10f38a5ff8eee8d0778840e2a976a64736f6c634300081c0033000000000000000000000000d44da594d5a6109523814fbfc7c98949558ce46d000000000000000000000000f0511f123164602042ab2bcf02111fa5d3fe97cd000000000000000000000000a3098c68fd99233b57bd065aac545cca5f1ac296