0 txs
55.9k calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
Bascule
viewfunction Bascule() view returns (address)
calcUnstakeRequestAmount
viewfunction calcUnstakeRequestAmount(bytes scriptPubkey, uint256 amount) view returns (uint256 amountAfterFee, bool isAboveDust)
consortium
viewfunction consortium() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getAssetRouter
viewfunction getAssetRouter() view returns (address)
getFeeDigest
viewfunction getFeeDigest(uint256 fee, uint256 expiry) view returns (bytes32)
getRate
viewfunction getRate() view returns (uint256)
getRedeemFee
viewfunction getRedeemFee() view returns (uint256)
getRedeemForBtcMinAmount
viewfunction getRedeemForBtcMinAmount() view returns (uint256)
getTreasury
viewfunction getTreasury() view returns (address)
isClaimer
viewfunction isClaimer(address claimer) view returns (bool)
isMinter
viewfunction isMinter(address minter) view returns (bool)
isNative
purefunction isNative() pure returns (bool)
isRedeemsEnabled
viewfunction isRedeemsEnabled() view returns (bool)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
operator
viewfunction operator() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pauser
viewfunction pauser() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
ratio
viewfunction ratio() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
toNativeCommission
viewfunction toNativeCommission() view returns (uint64)
totalSupply
viewfunction totalSupply() view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addClaimer
nonpayablefunction addClaimer(address newClaimer)
addMinter
nonpayablefunction addMinter(address newMinter)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
batchMint
nonpayablefunction batchMint(address[] to, uint256[] amount)
batchMint
nonpayablefunction batchMint(bytes[] payload, bytes[] proof)
batchMintWithFee
nonpayablefunction batchMintWithFee(bytes[] mintPayload, bytes[] proof, bytes[] feePayload, bytes[] userSignature)
burn
nonpayablefunction burn(address from, uint256 amount)
burn
nonpayablefunction burn(uint256 amount)
changeAssetRouter
nonpayablefunction changeAssetRouter(address newVal)
changeConsortium
nonpayablefunction changeConsortium(address newVal)
changeNameAndSymbol
nonpayablefunction changeNameAndSymbol(string name_, string symbol_)
changeOperator
nonpayablefunction changeOperator(address newOperator)
changePauser
nonpayablefunction changePauser(address newPauser)
changeRedeemFee
nonpayablefunction changeRedeemFee(uint256 newVal)
changeRedeemForBtcMinAmount
nonpayablefunction changeRedeemForBtcMinAmount(uint256 newVal)
changeTreasuryAddress
nonpayablefunction changeTreasuryAddress(address newValue)
deposit
nonpayablefunction deposit(uint256 amount)
initialize
nonpayablefunction initialize(address consortium_, address treasury, address owner_)
mint
nonpayablefunction mint(address to, uint256 amount)
mint
nonpayablefunction mint(bytes rawPayload, bytes proof) returns (address recipient)
mintWithFee
nonpayablefunction mintWithFee(bytes mintPayload, bytes proof, bytes feePayload, bytes userSignature)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
redeem
nonpayablefunction redeem(uint256 amount)
redeemForBtc
nonpayablefunction redeemForBtc(bytes scriptPubkey, uint256 amount)
reinitialize
nonpayablefunction reinitialize()
removeClaimer
nonpayablefunction removeClaimer(address oldClaimer)
removeMinter
nonpayablefunction removeMinter(address oldMinter)
renounceOwnership
nonpayablefunction renounceOwnership()
toggleRedeemsForBtc
nonpayablefunction toggleRedeemsForBtc()
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
AssetRouterChanged
event AssetRouterChanged(address indexed newVal, address indexed prevVal)
BasculeChanged
event BasculeChanged(address indexed prevVal, address indexed newVal)
BatchMintSkipped
event BatchMintSkipped(bytes32 indexed payloadHash, bytes payload)
BurnCommissionChanged
event BurnCommissionChanged(uint64 indexed prevValue, uint64 indexed newValue)
ClaimerUpdated
event ClaimerUpdated(address indexed claimer, bool isClaimer)
ConsortiumChanged
event ConsortiumChanged(address indexed prevVal, address indexed newVal)
DustFeeRateChanged
event DustFeeRateChanged(uint256 indexed oldRate, uint256 indexed newRate)
EIP712DomainChanged
event EIP712DomainChanged()
FeeChanged
event FeeChanged(uint256 indexed oldFee, uint256 indexed newFee)
FeeCharged
event FeeCharged(uint256 indexed fee, bytes userSignature)
Initialized
event Initialized(uint64 version)
MinterUpdated
event MinterUpdated(address indexed minter, bool isMinter)
MintProofConsumed
event MintProofConsumed(address indexed recipient, bytes32 indexed payloadHash, bytes payload)
NameAndSymbolChanged
event NameAndSymbolChanged(string name, string symbol)
OperatorRoleTransferred
event OperatorRoleTransferred(address indexed previousOperator, address indexed newOperator)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PauserRoleTransferred
event PauserRoleTransferred(address indexed previousPauser, address indexed newPauser)
RedeemFeeChanged
event RedeemFeeChanged(uint256 indexed oldFee, uint256 indexed newFee)
RedeemRequest
event RedeemRequest(address indexed from, uint256 indexed nonce, uint256 amount, uint256 fee, bytes payload)
RedeemsForBtcEnabled
event RedeemsForBtcEnabled(bool)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
TreasuryAddressChanged
event TreasuryAddressChanged(address indexed prevValue, address indexed newValue)
Unpaused
event Unpaused(address account)
errors
AssetRouterNotSet
error AssetRouterNotSet()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
ExpectedPause
error ExpectedPause()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
InvalidMintAmount
error InvalidMintAmount()
NonEqualLength
error NonEqualLength(uint256 a, uint256 b)
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PayloadAlreadyUsed
error PayloadAlreadyUsed()
RedeemForBtcDisabled
error RedeemForBtcDisabled()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
UnauthorizedAccount
error UnauthorizedAccount(address account)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61391b80620000e66000396000f3fe608060405234801561001057600080fd5b50600436106103d05760003560e01c806373cfc6b2116101ff578063a9059cbb1161011a578063d6a02b6a116100ad578063f0490b8a1161007c578063f0490b8a146107df578063f2fde38b146107f2578063fe38ae8714610805578063fe9c6aa61461081857600080fd5b8063d6a02b6a146107a9578063db006a75146107b1578063dd62ed3e146107c4578063e30c3978146107d757600080fd5b8063b743ab4f116100e9578063b743ab4f1461075b578063c0c53b8b1461077b578063c6d98f1a1461078e578063d505accf1461079657600080fd5b8063a9059cbb1461070f578063aa271e1a14610722578063af25311d14610735578063b6b55f251461074857600080fd5b806394359200116101925780639b914470116101615780639b914470146106ce5780639dc29fac146106e15780639fd0506d146106f4578063a6f353f0146106fc57600080fd5b8063943592001461069857806395d89b41146106ab578063983b2d56146106b35780639ad18765146106c657600080fd5b806380e787df116101ce57806380e787df146106455780638456cb591461066d57806384b0196e146106755780638da5cb5b1461069057600080fd5b806373cfc6b21461061b57806379ba5097146106225780637dea53c41461062a5780637ecebe001461063257600080fd5b80633f4ba83a116102ef578063679aefce1161028257806370723ae01161025157806370723ae0146105f057806370a08231146105f8578063715018a61461060b57806371ca337d1461061357600080fd5b8063679aefce146105ba57806368573107146105c25780636bc63893146105d55780636c2eb350146105e857600080fd5b806356712139116102be5780635671213914610574578063570ca7351461058757806359aae4ba1461058f5780635c975abb146105a257600080fd5b80633f4ba83a1461053357806340c10f191461053b57806342966c681461054e5780634a09bd491461056157600080fd5b806323b872dd1161036757806330b93d851161033657806330b93d85146104e9578063313ce567146104fc5780633644e5151461050b5780633b19e84a1461051357600080fd5b806323b872dd1461049d5780632cd271e7146104b05780632ea66401146104c35780633092afd5146104d657600080fd5b8063095ea7b3116103a3578063095ea7b31461042e57806310a8aecd1461045157806318160ddd146104645780631beda7e31461049557600080fd5b806306394c9b146103d557806306689495146103ea57806306fdde03146103fd578063089bb99a1461041b575b600080fd5b6103e86103e3366004612db3565b610820565b005b6103e86103f8366004612e18565b610834565b61040561089d565b6040516104129190612f21565b60405180910390f35b6103e8610429366004612f34565b610946565b61044161043c366004612f9f565b6109c7565b6040519015158152602001610412565b61044161045f366004612db3565b6109e1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610412565b610487610a10565b6104416104ab366004612fcb565b610a90565b6103e86104be366004612db3565b610ab4565b6103e86104d1366004612db3565b610ac5565b6103e86104e4366004612db3565b610ad8565b6103e86104f736600461300c565b610aeb565b60405160088152602001610412565b610487610b89565b61051b610b98565b6040516001600160a01b039091168152602001610412565b6103e8610bb4565b6103e8610549366004612f9f565b610bc6565b6103e861055c366004613057565b610bfd565b6103e861056f366004612db3565b610c07565b6103e8610582366004612db3565b610c18565b61051b610c29565b6103e861059d3660046130b4565b610c45565b6000805160206138a68339815191525460ff16610441565b610487610d54565b6103e86105d0366004613163565b610dcc565b61051b6105e3366004612f34565b610e01565b6103e8610ee0565b610441610fbb565b610487610606366004612db3565b611033565b6103e8611066565b610487611078565b6000610441565b6103e86110b3565b6103e86110f8565b610487610640366004612db3565b61116d565b61065861065336600461300c565b611178565b60408051928352901515602083015201610412565b6103e861120b565b61067d611230565b60405161041297969594939291906131c2565b61051b6112dc565b6103e86106a6366004613057565b611311565b610405611322565b6103e86106c1366004612db3565b611361565b61051b611374565b6103e86106dc366004613163565b611395565b6103e86106ef366004612f9f565b611488565b61051b6114bb565b6103e861070a366004612db3565b6114d7565b61044161071d366004612f9f565b6114e8565b610441610730366004612db3565b6114f6565b61048761074336600461325b565b611525565b6103e8610756366004613057565b611591565b610763611664565b6040516001600160401b039091168152602001610412565b6103e861078936600461327d565b6116db565b6104876118b7565b6103e86107a43660046132c8565b611938565b61051b611a91565b6103e86107bf366004613057565b611b13565b6104876107d236600461333f565b611b6c565b61051b611bb6565b6103e86107ed366004612db3565b611bdf565b6103e8610800366004612db3565b611bf2565b6103e8610813366004613057565b611c77565b61051b611c88565b610828611ca4565b61083181611cd6565b50565b61083c611d3f565b336000908152601291909101602052604090205460ff1661088357335b6040516332b2baa360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b6108938888888888888888611d63565b5050505050505050565b606060006000805160206138668339815191525b90508060030180546108c290613378565b80601f01602080910402602001604051908101604052809291908181526020018280546108ee90613378565b801561093b5780601f106109105761010080835404028352916020019161093b565b820191906000526020600020905b81548152906001019060200180831161091e57829003601f168201915b505050505091505090565b61094e611ca4565b6109c184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f88018190048102820181019092528681529250869150859081908401838280828437600092019190915250611ddb92505050565b50505050565b6000336109d5818585611e9f565b60019150505b92915050565b60006109eb611d3f565b6001600160a01b03909216600090815260129290920160205250604090205460ff1690565b600080610a1b611d3f565b60160154604051637f09b62760e11b81523060048201526001600160a01b039091169063fe136c4e90602401606060405180830381865afa158015610a64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8891906133c7565b509392505050565b600033610a9e858285611eb1565b610aa9858585611f11565b506001949350505050565b610abc611ca4565b61083181611f70565b610acd611ca4565b610831816001611fd9565b610ae0611ca4565b610831816000612059565b6000610af5611d3f565b60168101549091506001600160a01b0316610b2357604051638977141160e01b815260040160405180910390fd5b60168101546001600160a01b03166337a9bdc933308787876040518663ffffffff1660e01b8152600401610b5b959493929190613425565b600060405180830381600087803b158015610b7557600080fd5b505af1158015610893573d6000803e3d6000fd5b6000610b936120cd565b905090565b6000610ba2611d3f565b600501546001600160a01b0316919050565b610bbc611ca4565b610bc46120d7565b565b610bce611d3f565b336000908152601191909101602052604090205460ff16610bef5733610859565b610bf98282612137565b5050565b610831338261216d565b610c0f611ca4565b610831816121a3565b610c20611ca4565b61083181612203565b6000610c33611d3f565b601501546001600160a01b0316919050565b610c4d611d3f565b336000908152601291909101602052604090205460ff16610c6e5733610859565b6000805160206138a68339815191525460ff1615610c9f5760405163d93c066560e01b815260040160405180910390fd5b6000610ca9611d3f565b60168101549091506001600160a01b0316610cd757604051638977141160e01b815260040160405180910390fd5b6016810154604051632cd5725d60e11b81526001600160a01b03909116906359aae4ba90610d17908c908c908c908c908c908c908c908c906004016134fa565b600060405180830381600087803b158015610d3157600080fd5b505af1158015610d45573d6000803e3d6000fd5b50505050505050505050505050565b6000610d5e611d3f565b601601546040516337cef79160e01b81523060048201526001600160a01b03909116906337cef791906024015b602060405180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b93919061355a565b610dd4611d3f565b336000908152601191909101602052604090205460ff16610df55733610859565b6109c184848484612284565b6000610e0b6122f0565b6000610e15611d3f565b60168101549091506001600160a01b0316610e4357604051638977141160e01b815260040160405180910390fd5b6016810154604051636bc6389360e01b81526001600160a01b0390911690636bc6389390610e7b908990899089908990600401613573565b6020604051808303816000875af1158015610e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebe91906135a5565b915050610ed860016000805160206138c683398151915255565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610f29575080546001600160401b03808416911610155b15610f475760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610f70611ca4565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b600080610fc6611d3f565b60160154604051637f09b62760e11b81523060048201526001600160a01b039091169063fe136c4e90602401606060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed891906133c7565b6000806000805160206138668339815191525b6001600160a01b0390931660009081526020939093525050604090205490565b61106e611ca4565b610bc4600061233c565b6000611082611d3f565b60160154604051630b40495b60e01b81523060048201526001600160a01b0390911690630b40495b90602401610d8b565b33806110bd611bb6565b6001600160a01b0316146110ef5760405163118cdaa760e01b81526001600160a01b038216600482015260240161087a565b6108318161233c565b611100611ca4565b611108611d3f565b60160160009054906101000a90046001600160a01b03166001600160a01b03166342d05b9b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561115957600080fd5b505af11580156109c1573d6000803e3d6000fd5b60006109db82612374565b6000806000611185611d3f565b6016810154604051630aba905f60e41b81529192506001600160a01b03169063aba905f0906111be9030908a908a908a906004016135c2565b6040805180830381865afa1580156111da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fe91906135f8565b9250925050935093915050565b336112146114bb565b6001600160a01b0316146112285733610859565b610bc461239d565b60006060808280808381600080516020613886833981519152805490915015801561125d57506001810154155b6112a15760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b604482015260640161087a565b6112a96123e6565b6112b1612425565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b611319611ca4565b6108318161243d565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613866833981519152916108c290613378565b611369611ca4565b610831816001612059565b600061137e611d3f565b6003015461010090046001600160a01b0316919050565b61139d6122f0565b6000805160206138a68339815191525460ff16156113ce5760405163d93c066560e01b815260040160405180910390fd5b60006113d8611d3f565b60168101549091506001600160a01b031661140657604051638977141160e01b815260040160405180910390fd5b60168101546040516309b9144760e41b81526001600160a01b0390911690639b9144709061143e90889088908890889060040161363a565b600060405180830381600087803b15801561145857600080fd5b505af115801561146c573d6000803e3d6000fd5b50505050506109c160016000805160206138c683398151915255565b611490611d3f565b336000908152601191909101602052604090205460ff166114b15733610859565b610bf9828261216d565b60006114c5611d3f565b601001546001600160a01b0316919050565b6114df611ca4565b610831816124a0565b6000336109d5818585611f11565b6000611500611d3f565b6001600160a01b03909216600090815260119290920160205250604090205460ff1690565b604080517f40ac9f6aa27075e64c1ed1ea2e831b20b8c25efdeb6b79fd0cf683c9a9c5072560208201524691810191909152606081018390526080810182905260009061158a9060a00160405160208183030381529060405280519060200120612509565b9392505050565b6115996122f0565b60006115a3611d3f565b60168101549091506001600160a01b03166115d157604051638977141160e01b815260040160405180910390fd5b60168101546001600160a01b0316638340f549335b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101859052606401600060405180830381600087803b15801561163457600080fd5b505af1158015611648573d6000803e3d6000fd5b505050505061083160016000805160206138c683398151915255565b600061166e611d3f565b60160154604051635698732f60e01b81523060048201526001600160a01b0390911690635698732f90602401602060405180830381865afa1580156116b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b939190613661565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156117205750825b90506000826001600160401b0316600114801561173c5750303b155b90508115801561174a575080155b156117685760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561179257845460ff60401b1916600160401b1785555b6117ba6040518060200160405280600081525060405180602001604052806000815250612536565b6117c2612548565b6117cb86612558565b6117d3612569565b61180a604051806040016040528060168152602001752637b6b130b9321029ba30b5b2b2102134ba31b7b4b760511b815250612571565b61181261259c565b611868604051806040016040528060168152602001752637b6b130b9321029ba30b5b2b2102134ba31b7b4b760511b815250604051806040016040528060048152602001634c42544360e01b8152508a8a6125ac565b831561089357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050565b6000806118c2611d3f565b60160154604051637f09b62760e11b81523060048201526001600160a01b039091169063fe136c4e90602401606060405180830381865afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f91906133c7565b50909392505050565b8342111561195c5760405163313c898160e11b81526004810185905260240161087a565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886119c88c6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000611a2382612509565b90506000611a33828787876125d0565b9050896001600160a01b0316816001600160a01b031614611a7a576040516325c0072360e11b81526001600160a01b0380831660048301528b16602482015260440161087a565b611a858a8a8a611e9f565b50505050505050505050565b6000611a9b611d3f565b60160160009054906101000a90046001600160a01b03166001600160a01b03166302d9f2216040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9391906135a5565b611b1b6122f0565b6000611b25611d3f565b60168101549091506001600160a01b0316611b5357604051638977141160e01b815260040160405180910390fd5b60168101546001600160a01b0316630e6dfcd5336115e6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00611301565b611be7611ca4565b610831816000611fd9565b611bfa611ca4565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255611c3e6112dc565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b611c7f611ca4565b610831816125fe565b6000611c92611d3f565b601601546001600160a01b0316919050565b33611cad6112dc565b6001600160a01b031614610bc45760405163118cdaa760e01b815233600482015260240161087a565b611cdf81612638565b6000611ce9611d3f565b6015810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907fd90d696290df8da2e089fb9f5467201dc45d6fa26d4d8e7c8a239b745f510c6c90600090a3505050565b7fa9a2395ec4edf6682d754acb293b04902817fdb5829dd13adb0367ab3a26c70090565b6000611d6d611d3f565b60168101549091506001600160a01b0316611d9b57604051638977141160e01b815260040160405180910390fd5b6016810154604051630668949560e01b81526001600160a01b0390911690630668949590610d17908c908c908c908c908c908c908c908c9060040161368a565b6000805160206138668339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611e15848261372b565b5060048101611e24838261372b565b506000805160206138868339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102611e5f858261372b565b507f4d807d72b2a493ff2c4e338967d3f82d3352481258457d12a4506a1762a44c698484604051611e919291906137ea565b60405180910390a150505050565b611eac838383600161265f565b505050565b6000611ebd8484611b6c565b905060001981146109c15781811015611f0257604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161087a565b6109c18484848403600061265f565b6001600160a01b038316611f3b57604051634b637e8f60e11b81526000600482015260240161087a565b6001600160a01b038216611f655760405163ec442f0560e01b81526000600482015260240161087a565b611eac838383612746565b611f7981612638565b6000611f83611d3f565b6010810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907ffb34c91b8734ef26ee8085a0fa11d2692042c6edac57dc40d8850cad2f1bc3ef90600090a3505050565b611fe282612638565b80611feb611d3f565b6001600160a01b0384166000818152601292909201602052604091829020805493151560ff1990941693909317909255517f0d4de5cd7f05b154b7f42e4f1dd68f5c27ea0edaf9bd084309201cfa52e859269061204d90841515815260200190565b60405180910390a25050565b61206282612638565b8061206b611d3f565b6001600160a01b0384166000818152601192909201602052604091829020805493151560ff1990941693909317909255517fb21afb9ce9be0a676f8f317ff0ca072fb89a4f8ce2d1b6fe80f8755c14f1cb199061204d90841515815260200190565b6000610b93612751565b6120df6127c5565b6000805160206138a6833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b0382166121615760405163ec442f0560e01b81526000600482015260240161087a565b610bf960008383612746565b6001600160a01b03821661219757604051634b637e8f60e11b81526000600482015260240161087a565b610bf982600083612746565b60006121ad611d3f565b6016810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907ff5f95b10b00195043307580900c3d9806c3fee7e80e71bc2d85302891605e20090600090a3505050565b61220c81612638565b6000612216611d3f565b60038101546040519192506001600160a01b038085169261010090920416907f146dd8feba84cdc776f012478adc764591d6c0c9570adbc49ff09c648282a0a090600090a360030180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61228e83826127f5565b60005b838110156122e9576122e18585838181106122ae576122ae613818565b90506020020160208101906122c39190612db3565b8484848181106122d5576122d5613818565b90506020020135612137565b600101612291565b5050505050565b6000805160206138c683398151915280546001190161232257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60016000805160206138c683398151915255565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319168155610bf98261281f565b6000807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00611046565b6123a5612890565b6000805160206138a6833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612119565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020613886833981519152916108c290613378565b606060006000805160206138868339815191526108b1565b612445611d3f565b60160154604051624a1ac960e91b8152600481018390526001600160a01b03909116906394359200906024015b600060405180830381600087803b15801561248c57600080fd5b505af11580156122e9573d6000803e3d6000fd5b6124a981612638565b60006124b3611d3f565b6005810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f4fc6e7a37aea21888550b60360992adb6a9b3b4da644d63e9f3a420c2d86e28290600090a3505050565b60006109db6125166120cd565b8360405161190160f01b8152600281019290925260228201526042902090565b61253e6128c1565b610bf9828261290a565b6125506128c1565b610bc461295b565b6125606128c1565b6108318161297c565b610bc46128c1565b6125796128c1565b61083181604051806040016040528060018152602001603160f81b8152506129ae565b6125a46128c1565b610bc4612a0f565b6125b46128c1565b6125be8484611ddb565b6125c782612203565b6109c1816124a0565b6000806000806125e288888888612a17565b9250925092506125f28282612ae6565b50909695505050505050565b612606611d3f565b6016015460405163fe38ae8760e01b8152600481018390526001600160a01b039091169063fe38ae8790602401612472565b6001600160a01b0381166108315760405163d92e233d60e01b815260040160405180910390fd5b6000805160206138668339815191526001600160a01b0385166126985760405163e602df0560e01b81526000600482015260240161087a565b6001600160a01b0384166126c257604051634a1406b160e11b81526000600482015260240161087a565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156122e957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161273791815260200190565b60405180910390a35050505050565b611eac838383612b9f565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61277c612bb2565b612784612c1c565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000805160206138a68339815191525460ff16610bc457604051638dfc202b60e01b815260040160405180910390fd5b808214610bf957604051633f9b6c7760e21b8152600481018390526024810182905260440161087a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000805160206138a68339815191525460ff1615610bc45760405163d93c066560e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610bc457604051631afcd79f60e31b815260040160405180910390fd5b6129126128c1565b6000805160206138668339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361294c848261372b565b50600481016109c1838261372b565b6129636128c1565b6000805160206138a6833981519152805460ff19169055565b6129846128c1565b6001600160a01b0381166110ef57604051631e4fbdf760e01b81526000600482015260240161087a565b6129b66128c1565b6000805160206138868339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026129f0848261372b565b50600381016129ff838261372b565b5060008082556001909101555050565b6123286128c1565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612a525750600091506003905082612adc565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612aa6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612ad257506000925060019150829050612adc565b9250600091508190505b9450945094915050565b6000826003811115612afa57612afa61382e565b03612b03575050565b6001826003811115612b1757612b1761382e565b03612b355760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612b4957612b4961382e565b03612b6a5760405163fce698f760e01b81526004810182905260240161087a565b6003826003811115612b7e57612b7e61382e565b03610bf9576040516335e2f38360e21b81526004810182905260240161087a565b612ba7612890565b611eac838383612c60565b600060008051602061388683398151915281612bcc6123e6565b805190915015612be457805160209091012092915050565b81548015612bf3579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600060008051602061388683398151915281612c36612425565b805190915015612c4e57805160209091012092915050565b60018201548015612bf3579392505050565b6000805160206138668339815191526001600160a01b038416612c9c5781816002016000828254612c919190613844565b90915550612d0e9050565b6001600160a01b03841660009081526020829052604090205482811015612cef5760405163391434e360e21b81526001600160a01b0386166004820152602481018290526044810184905260640161087a565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316612d2c576002810180548390039055612d4b565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d9091815260200190565b60405180910390a350505050565b6001600160a01b038116811461083157600080fd5b600060208284031215612dc557600080fd5b813561158a81612d9e565b60008083601f840112612de257600080fd5b5081356001600160401b03811115612df957600080fd5b602083019150836020828501011115612e1157600080fd5b9250929050565b6000806000806000806000806080898b031215612e3457600080fd5b88356001600160401b0380821115612e4b57600080fd5b612e578c838d01612dd0565b909a50985060208b0135915080821115612e7057600080fd5b612e7c8c838d01612dd0565b909850965060408b0135915080821115612e9557600080fd5b612ea18c838d01612dd0565b909650945060608b0135915080821115612eba57600080fd5b50612ec78b828c01612dd0565b999c989b5096995094979396929594505050565b6000815180845260005b81811015612f0157602081850181015186830182015201612ee5565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061158a6020830184612edb565b60008060008060408587031215612f4a57600080fd5b84356001600160401b0380821115612f6157600080fd5b612f6d88838901612dd0565b90965094506020870135915080821115612f8657600080fd5b50612f9387828801612dd0565b95989497509550505050565b60008060408385031215612fb257600080fd5b8235612fbd81612d9e565b946020939093013593505050565b600080600060608486031215612fe057600080fd5b8335612feb81612d9e565b92506020840135612ffb81612d9e565b929592945050506040919091013590565b60008060006040848603121561302157600080fd5b83356001600160401b0381111561303757600080fd5b61304386828701612dd0565b909790965060209590950135949350505050565b60006020828403121561306957600080fd5b5035919050565b60008083601f84011261308257600080fd5b5081356001600160401b0381111561309957600080fd5b6020830191508360208260051b8501011115612e1157600080fd5b6000806000806000806000806080898b0312156130d057600080fd5b88356001600160401b03808211156130e757600080fd5b6130f38c838d01613070565b909a50985060208b013591508082111561310c57600080fd5b6131188c838d01613070565b909850965060408b013591508082111561313157600080fd5b61313d8c838d01613070565b909650945060608b013591508082111561315657600080fd5b50612ec78b828c01613070565b6000806000806040858703121561317957600080fd5b84356001600160401b038082111561319057600080fd5b61319c88838901613070565b909650945060208701359150808211156131b557600080fd5b50612f9387828801613070565b60ff60f81b881681526000602060e060208401526131e360e084018a612edb565b83810360408501526131f5818a612edb565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156132495783518352928401929184019160010161322d565b50909c9b505050505050505050505050565b6000806040838503121561326e57600080fd5b50508035926020909101359150565b60008060006060848603121561329257600080fd5b833561329d81612d9e565b925060208401356132ad81612d9e565b915060408401356132bd81612d9e565b809150509250925092565b600080600080600080600060e0888a0312156132e357600080fd5b87356132ee81612d9e565b965060208801356132fe81612d9e565b95506040880135945060608801359350608088013560ff8116811461332257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561335257600080fd5b823561335d81612d9e565b9150602083013561336d81612d9e565b809150509250929050565b600181811c9082168061338c57607f821691505b6020821081036133ac57634e487b7160e01b600052602260045260246000fd5b50919050565b805180151581146133c257600080fd5b919050565b6000806000606084860312156133dc57600080fd5b83519250602084015191506133f3604085016133b2565b90509250925092565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0386811682528516602082015260806040820181905260009061345290830185876133fc565b90508260608301529695505050505050565b6000838385526020808601955060208560051b8301018460005b878110156134ed57848303601f19018952813536889003601e190181126134a457600080fd5b870184810190356001600160401b038111156134bf57600080fd5b8036038213156134ce57600080fd5b6134d98582846133fc565b9a86019a945050509083019060010161347e565b5090979650505050505050565b60808152600061350e608083018a8c613464565b828103602084015261352181898b613464565b90508281036040840152613536818789613464565b9050828103606084015261354b818587613464565b9b9a5050505050505050505050565b60006020828403121561356c57600080fd5b5051919050565b6040815260006135876040830186886133fc565b828103602084015261359a8185876133fc565b979650505050505050565b6000602082840312156135b757600080fd5b815161158a81612d9e565b6001600160a01b03851681526060602082018190526000906135e790830185876133fc565b905082604083015295945050505050565b6000806040838503121561360b57600080fd5b8251915061361b602084016133b2565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60408152600061364e604083018688613464565b828103602084015261359a818587613464565b60006020828403121561367357600080fd5b81516001600160401b038116811461158a57600080fd5b60808152600061369e608083018a8c6133fc565b82810360208401526136b181898b6133fc565b905082810360408401526136c68187896133fc565b9050828103606084015261354b8185876133fc565b601f821115611eac576000816000526020600020601f850160051c810160208610156137045750805b601f850160051c820191505b8181101561372357828155600101613710565b505050505050565b81516001600160401b0381111561374457613744613624565b613758816137528454613378565b846136db565b602080601f83116001811461378d57600084156137755750858301515b600019600386901b1c1916600185901b178555613723565b600085815260208120601f198616915b828110156137bc5788860151825594840194600190910190840161379d565b50858210156137da5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6040815260006137fd6040830185612edb565b828103602084015261380f8185612edb565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b808201808211156109db57634e487b7160e01b600052601160045260246000fdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220854550ec4e48da87a836d675e05572f866e18dff2674b5c93e9e86a160d8e3a764736f6c63430008180033