2 txs
1.3k calls
constructor
constructor(address token, uint8 localTokenDecimals, address[] allowlist, address rmnProxy, address router)
functions
getAllowList
viewfunction getAllowList() view returns (address[])
getAllowListEnabled
viewfunction getAllowListEnabled() view returns (bool)
getCurrentInboundRateLimiterState
viewfunction getCurrentInboundRateLimiterState(uint64 remoteChainSelector) view returns (tuple)
getCurrentOutboundRateLimiterState
viewfunction getCurrentOutboundRateLimiterState(uint64 remoteChainSelector) view returns (tuple)
getRateLimitAdmin
viewfunction getRateLimitAdmin() view returns (address)
getRemotePools
viewfunction getRemotePools(uint64 remoteChainSelector) view returns (bytes[])
getRemoteToken
viewfunction getRemoteToken(uint64 remoteChainSelector) view returns (bytes)
getRmnProxy
viewfunction getRmnProxy() view returns (address rmnProxy)
getRouter
viewfunction getRouter() view returns (address router)
getSupportedChains
viewfunction getSupportedChains() view returns (uint64[])
getToken
viewfunction getToken() view returns (address token)
getTokenDecimals
viewfunction getTokenDecimals() view returns (uint8 decimals)
isRemotePool
viewfunction isRemotePool(uint64 remoteChainSelector, bytes remotePoolAddress) view returns (bool)
isSupportedChain
viewfunction isSupportedChain(uint64 remoteChainSelector) view returns (bool)
isSupportedToken
viewfunction isSupportedToken(address token) view returns (bool)
owner
viewfunction owner() view returns (address)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
typeAndVersion
viewfunction typeAndVersion() view returns (string)
acceptOwnership
nonpayablefunction acceptOwnership()
addRemotePool
nonpayablefunction addRemotePool(uint64 remoteChainSelector, bytes remotePoolAddress)
applyAllowListUpdates
nonpayablefunction applyAllowListUpdates(address[] removes, address[] adds)
applyChainUpdates
nonpayablefunction applyChainUpdates(uint64[] remoteChainSelectorsToRemove, tuple[] chainsToAdd)
lockOrBurn
nonpayablefunction lockOrBurn(tuple lockOrBurnIn) returns (tuple)
releaseOrMint
nonpayablefunction releaseOrMint(tuple releaseOrMintIn) returns (tuple)
removeRemotePool
nonpayablefunction removeRemotePool(uint64 remoteChainSelector, bytes remotePoolAddress)
setChainRateLimiterConfig
nonpayablefunction setChainRateLimiterConfig(uint64 remoteChainSelector, tuple outboundConfig, tuple inboundConfig)
setRateLimitAdmin
nonpayablefunction setRateLimitAdmin(address rateLimitAdmin)
setRouter
nonpayablefunction setRouter(address newRouter)
transferOwnership
nonpayablefunction transferOwnership(address to)
events
AllowListAdd
event AllowListAdd(address sender)
AllowListRemove
event AllowListRemove(address sender)
Burned
event Burned(address indexed sender, uint256 amount)
ChainAdded
event ChainAdded(uint64 remoteChainSelector, bytes remoteToken, (bool isEnabled, uint128 capacity, uint128 rate) outboundRateLimiterConfig, (bool isEnabled, uint128 capacity, uint128 rate) inboundRateLimiterConfig)
ChainConfigured
event ChainConfigured(uint64 remoteChainSelector, (bool isEnabled, uint128 capacity, uint128 rate) outboundRateLimiterConfig, (bool isEnabled, uint128 capacity, uint128 rate) inboundRateLimiterConfig)
ChainRemoved
event ChainRemoved(uint64 remoteChainSelector)
ConfigChanged
event ConfigChanged((bool isEnabled, uint128 capacity, uint128 rate) config)
Locked
event Locked(address indexed sender, uint256 amount)
Minted
event Minted(address indexed sender, address indexed recipient, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
RateLimitAdminSet
event RateLimitAdminSet(address rateLimitAdmin)
Released
event Released(address indexed sender, address indexed recipient, uint256 amount)
RemotePoolAdded
event RemotePoolAdded(uint64 indexed remoteChainSelector, bytes remotePoolAddress)
RemotePoolRemoved
event RemotePoolRemoved(uint64 indexed remoteChainSelector, bytes remotePoolAddress)
RouterUpdated
event RouterUpdated(address oldRouter, address newRouter)
TokensConsumed
event TokensConsumed(uint256 tokens)
errors
AggregateValueMaxCapacityExceeded
error AggregateValueMaxCapacityExceeded(uint256 capacity, uint256 requested)
AggregateValueRateLimitReached
error AggregateValueRateLimitReached(uint256 minWaitInSeconds, uint256 available)
AllowListNotEnabled
error AllowListNotEnabled()
BucketOverfilled
error BucketOverfilled()
CallerIsNotARampOnRouter
error CallerIsNotARampOnRouter(address caller)
CannotTransferToSelf
error CannotTransferToSelf()
ChainAlreadyExists
error ChainAlreadyExists(uint64 chainSelector)
ChainNotAllowed
error ChainNotAllowed(uint64 remoteChainSelector)
CursedByRMN
error CursedByRMN()
DisabledNonZeroRateLimit
error DisabledNonZeroRateLimit((bool isEnabled, uint128 capacity, uint128 rate) config)
InvalidDecimalArgs
error InvalidDecimalArgs(uint8 expected, uint8 actual)
InvalidRateLimitRate
error InvalidRateLimitRate((bool isEnabled, uint128 capacity, uint128 rate) rateLimiterConfig)
InvalidRemoteChainDecimals
error InvalidRemoteChainDecimals(bytes sourcePoolData)
InvalidRemotePoolForChain
error InvalidRemotePoolForChain(uint64 remoteChainSelector, bytes remotePoolAddress)
InvalidSourcePoolAddress
error InvalidSourcePoolAddress(bytes sourcePoolAddress)
InvalidToken
error InvalidToken(address token)
MustBeProposedOwner
error MustBeProposedOwner()
NonExistentChain
error NonExistentChain(uint64 remoteChainSelector)
OnlyCallableByOwner
error OnlyCallableByOwner()
OverflowDetected
error OverflowDetected(uint8 remoteDecimals, uint8 localDecimals, uint256 remoteAmount)
OwnerCannotBeZero
error OwnerCannotBeZero()
PoolAlreadyAdded
error PoolAlreadyAdded(uint64 remoteChainSelector, bytes remotePoolAddress)
RateLimitMustBeDisabled
error RateLimitMustBeDisabled()
SenderNotAllowed
error SenderNotAllowed(address sender)
TokenMaxCapacityExceeded
error TokenMaxCapacityExceeded(uint256 capacity, uint256 requested, address tokenAddress)
TokenRateLimitReached
error TokenRateLimitReached(uint256 minWaitInSeconds, uint256 available, address tokenAddress)
Unauthorized
error Unauthorized(address caller)
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
creation bytecode
0x6101006040523480156200001257600080fd5b5060405162003f2a38038062003f2a8339810160408190526200003591620005a2565b8484848484336000816200005c57604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008f576200008f81620001eb565b50506001600160a01b0385161580620000af57506001600160a01b038116155b80620000c257506001600160a01b038216155b15620000e1576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03808616608081905290831660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa92505050801562000151575060408051601f3d908101601f191682019092526200014e91810190620006c4565b60015b1562000191578060ff168560ff16146200018f576040516332ad3e0760e11b815260ff80871660048301528216602482015260440160405180910390fd5b505b60ff841660a052600480546001600160a01b0319166001600160a01b038316179055825115801560e052620001db57604080516000815260208101909152620001db908462000265565b5050505050505050505062000730565b336001600160a01b038216036200021557604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e05162000286576040516335f4a7b360e01b815260040160405180910390fd5b60005b825181101562000311576000838281518110620002aa57620002aa620006e2565b60209081029190910101519050620002c4600282620003c2565b1562000307576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000289565b5060005b8151811015620003bd576000828281518110620003365762000336620006e2565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003625750620003b4565b6200036f600282620003e2565b15620003b2576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010162000315565b505050565b6000620003d9836001600160a01b038416620003f9565b90505b92915050565b6000620003d9836001600160a01b038416620004fd565b60008181526001830160205260408120548015620004f257600062000420600183620006f8565b85549091506000906200043690600190620006f8565b9050808214620004a25760008660000182815481106200045a576200045a620006e2565b9060005260206000200154905080876000018481548110620004805762000480620006e2565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004b657620004b66200071a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003dc565b6000915050620003dc565b60008181526001830160205260408120546200054657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003dc565b506000620003dc565b6001600160a01b03811681146200056557600080fd5b50565b805160ff811681146200057a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80516200057a816200054f565b600080600080600060a08688031215620005bb57600080fd5b8551620005c8816200054f565b94506020620005d987820162000568565b60408801519095506001600160401b0380821115620005f757600080fd5b818901915089601f8301126200060c57600080fd5b8151818111156200062157620006216200057f565b8060051b604051601f19603f830116810181811085821117156200064957620006496200057f565b60405291825284820192508381018501918c8311156200066857600080fd5b938501935b828510156200069157620006818562000595565b845293850193928501926200066d565b809850505050505050620006a86060870162000595565b9150620006b86080870162000595565b90509295509295909350565b600060208284031215620006d757600080fd5b620003d98262000568565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003dc57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e051613749620007e16000396000818161050501528181611a1d01526122db0152600081816104df015281816115fa0152611caf0152600081816102c601528181610a5b01528181611772015281816117fa0152818161182e01528181611861015281816118ad0152818161190601526119710152600081816102470152818161028f0152818161066901528181611dfb0152818161228b015261246001526137496000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639a4575b911610104578063c0d78655116100a2578063dc0bd97111610071578063dc0bd971146104dd578063e0351e1314610503578063e8a1da1714610529578063f2fde38b1461053c57600080fd5b8063c0d786551461048f578063c4bffe2b146104a2578063c75eea9c146104b7578063cf7401f3146104ca57600080fd5b8063acfecf91116100de578063acfecf91146103f2578063af58d59f14610405578063b0f479a11461046b578063b79465801461047c57600080fd5b80639a4575b91461039d578063a42a7b8b146103bd578063a7cd63b7146103dd57600080fd5b806354c8a4f31161017157806379ba50971161014b57806379ba50971461035e5780637d54534e146103665780638926f54f146103795780638da5cb5b1461038c57600080fd5b806354c8a4f31461032557806362ddd3c41461033a5780636d3d1a581461034d57600080fd5b8063240028e8116101ad578063240028e81461027f57806324f65ee7146102bf57806339077537146102f05780634c5ef0ed1461031257600080fd5b806301ffc9a7146101d4578063181f5a77146101fc57806321df0da714610245575b600080fd5b6101e76101e2366004612af5565b61054f565b60405190151581526020015b60405180910390f35b6102386040518060400160405280601781526020017f4275726e4d696e74546f6b656e506f6f6c20312e352e3100000000000000000081525081565b6040516101f39190612b65565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101f3565b6101e761028d366004612b8d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f3565b6103036102fe366004612baa565b6105ec565b604051905181526020016101f3565b6101e7610320366004612c03565b61076f565b610338610333366004612cd2565b6107b9565b005b610338610348366004612c03565b610834565b6009546001600160a01b0316610267565b6103386108b8565b610338610374366004612b8d565b610954565b6101e7610387366004612d3e565b6109b0565b6001546001600160a01b0316610267565b6103b06103ab366004612d59565b6109c7565b6040516101f39190612d94565b6103d06103cb366004612d3e565b610aa0565b6040516101f39190612dcd565b6103e5610c0b565b6040516101f39190612e31565b610338610400366004612c03565b610c1c565b610418610413366004612d3e565b610d1b565b6040516101f3919081516001600160801b03908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b6004546001600160a01b0316610267565b61023861048a366004612d3e565b610dc9565b61033861049d366004612b8d565b610e79565b6104aa610f09565b6040516101f39190612e7e565b6104186104c5366004612d3e565b610fc1565b6103386104d8366004612fc6565b61106c565b7f0000000000000000000000000000000000000000000000000000000000000000610267565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b610338610537366004612cd2565b6110d6565b61033861054a366004612b8d565b611577565b60006001600160e01b031982167faff2afbf0000000000000000000000000000000000000000000000000000000014806105b257506001600160e01b031982167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806105e657506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6040805160208101909152600081526106048261158b565b600061065d606084013561065861061e60c087018761300b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061176492505050565b6117f6565b90506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166340c10f1961069e6060860160408701612b8d565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b1580156106e657600080fd5b505af11580156106fa573d6000803e3d6000fd5b5061070f925050506060840160408501612b8d565b6001600160a01b0316336001600160a01b03167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f08360405161075391815260200190565b60405180910390a3604080516020810190915290815292915050565b60006107b18383604051610784929190613052565b604080519182900390912067ffffffffffffffff87166000908152600760205291909120600501906119ba565b949350505050565b6107c16119d5565b61082e84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611a1b92505050565b50505050565b61083c6119d5565b610845836109b0565b61087357604051631e670e4b60e01b815267ffffffffffffffff841660048201526024015b60405180910390fd5b6108b38383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b9d92505050565b505050565b6000546001600160a01b031633146108fc576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61095c6119d5565b600980546001600160a01b0319166001600160a01b0383169081179091556040519081527f44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d091749060200160405180910390a150565b60006105e6600567ffffffffffffffff84166119ba565b60408051808201909152606080825260208201526109e482611c7e565b6109f18260600135611dcc565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610a4b84602001602081019061048a9190612d3e565b8152602001610a986040805160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260609101604051602081830303815290604052905090565b905292915050565b67ffffffffffffffff8116600090815260076020526040812060609190610ac990600501611e5b565b90506000815167ffffffffffffffff811115610ae757610ae7612ec0565b604051908082528060200260200182016040528015610b1a57816020015b6060815260200190600190039081610b055790505b50905060005b8251811015610c035760086000848381518110610b3f57610b3f613062565b602002602001015181526020019081526020016000208054610b6090613078565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8c90613078565b8015610bd95780601f10610bae57610100808354040283529160200191610bd9565b820191906000526020600020905b815481529060010190602001808311610bbc57829003601f168201915b5050505050828281518110610bf057610bf0613062565b6020908102919091010152600101610b20565b509392505050565b6060610c176002611e5b565b905090565b610c246119d5565b610c2d836109b0565b610c5657604051631e670e4b60e01b815267ffffffffffffffff8416600482015260240161086a565b610c968282604051610c69929190613052565b604080519182900390912067ffffffffffffffff8616600090815260076020529190912060050190611e68565b610cd2578282826040517f74f23c7c00000000000000000000000000000000000000000000000000000000815260040161086a939291906130db565b8267ffffffffffffffff167f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d768383604051610d0e9291906130ff565b60405180910390a2505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546001600160801b038082168352600160801b80830463ffffffff1695840195909552600160a01b90910460ff1615159482019490945260039091015480841660608301529190910490911660808201526105e690611e74565b67ffffffffffffffff81166000908152600760205260409020600401805460609190610df490613078565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2090613078565b8015610e6d5780601f10610e4257610100808354040283529160200191610e6d565b820191906000526020600020905b815481529060010190602001808311610e5057829003601f168201915b50505050509050919050565b610e816119d5565b6001600160a01b038116610ea8576040516342bcdf7f60e11b815260040160405180910390fd5b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b60606000610f176005611e5b565b90506000815167ffffffffffffffff811115610f3557610f35612ec0565b604051908082528060200260200182016040528015610f5e578160200160208202803683370190505b50905060005b8251811015610fba57828181518110610f7f57610f7f613062565b6020026020010151828281518110610f9957610f99613062565b67ffffffffffffffff90921660209283029190910190910152600101610f64565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546001600160801b038082168352600160801b80830463ffffffff1695840195909552600160a01b90910460ff1615159482019490945260019091015480841660608301529190910490911660808201526105e690611e74565b6009546001600160a01b0316331480159061109257506001546001600160a01b03163314155b156110cb576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815233600482015260240161086a565b6108b3838383611f02565b6110de6119d5565b60005b838110156112b25760008585838181106110fd576110fd613062565b90506020020160208101906111129190612d3e565b9050611129600567ffffffffffffffff8316611e68565b61115257604051631e670e4b60e01b815267ffffffffffffffff8216600482015260240161086a565b67ffffffffffffffff8116600090815260076020526040812061117790600501611e5b565b905060005b81518110156111e3576111da82828151811061119a5761119a613062565b6020026020010151600760008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020600501611e6890919063ffffffff16565b5060010161117c565b5067ffffffffffffffff8216600090815260076020526040812080547fffffffffffffffffffffff0000000000000000000000000000000000000000009081168255600182018390556002820180549091169055600381018290559061124c6004830182612a88565b600582016000818161125e8282612ac2565b505060405167ffffffffffffffff871681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916945060200192506112a0915050565b60405180910390a150506001016110e1565b5060005b818110156115705760008383838181106112d2576112d2613062565b90506020028101906112e49190613113565b6112ed906131a4565b90506112fe81606001516000611fd3565b61130d81608001516000611fd3565b806040015151600003611333576040516342bcdf7f60e11b815260040160405180910390fd5b805161134b9060059067ffffffffffffffff166120e3565b6113905780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161086a565b805167ffffffffffffffff16600090815260076020908152604091829020825160a08082018552606080870180518601516001600160801b0390811680865263ffffffff42168689018190528351511515878b0181905284518a0151841686890181905294518b0151841660809889018190528954600160a01b9283027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff600160801b8087026001600160a01b031994851690981788178216929092178d5592810290971760018c01558c519889018d52898e0180518d01518716808b528a8e019590955280515115158a8f018190528151909d01518716988a01899052518d0151909516979098018790526002890180549a9091029990931617179094169590951790925590920290911760038201559082015160048201906114d4908261331b565b5060005b8260200151518110156115185761151083600001518460200151838151811061150357611503613062565b6020026020010151611b9d565b6001016114d8565b507f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2826000015183604001518460600151856080015160405161155e94939291906133db565b60405180910390a150506001016112b6565b5050505050565b61157f6119d5565b611588816120ef565b50565b61159e61028d60a0830160808401612b8d565b6115f0576115b260a0820160808301612b8d565b6040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015260240161086a565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb61162f6040840160208501612d3e565b60405160e083901b6001600160e01b031916815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac9190613462565b156116ca57604051630a75a23b60e31b815260040160405180910390fd5b6116e26116dd6040830160208401612d3e565b612181565b6117026116f56040830160208401612d3e565b61032060a084018461300b565b6117475761171360a082018261300b565b6040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161086a9291906130ff565b61158861175a6040830160208401612d3e565b8260600135612268565b6000815160000361179657507f0000000000000000000000000000000000000000000000000000000000000000919050565b81516020146117ba578160405163953576f760e01b815260040161086a9190612b65565b6000828060200190518101906117d0919061347f565b905060ff8111156105e6578260405163953576f760e01b815260040161086a9190612b65565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168260ff160361182c5750816105e6565b7f000000000000000000000000000000000000000000000000000000000000000060ff168260ff1611156118fe5760006118867f0000000000000000000000000000000000000000000000000000000000000000846134ae565b9050604d8160ff1611156118e15760405163a9cb113d60e01b815260ff80851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044810185905260640161086a565b6118ec81600a6135ab565b6118f690856135ba565b9150506105e6565b600061192a837f00000000000000000000000000000000000000000000000000000000000000006134ae565b9050604d8160ff161180611953575061194481600a6135ab565b611950906000196135ba565b84115b156119a55760405163a9cb113d60e01b815260ff80851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044810185905260640161086a565b6119b081600a6135ab565b6107b190856135dc565b600081815260018301602052604081205415155b9392505050565b6001546001600160a01b03163314611a19576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f0000000000000000000000000000000000000000000000000000000000000000611a72576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611afb576000838281518110611a9257611a92613062565b60200260200101519050611ab08160026122af90919063ffffffff16565b15611af2576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611a75565b5060005b81518110156108b3576000828281518110611b1c57611b1c613062565b6020026020010151905060006001600160a01b0316816001600160a01b031603611b465750611b95565b611b516002826122c4565b15611b93576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611aff565b8051600003611bbf576040516342bcdf7f60e11b815260040160405180910390fd5b805160208083019190912067ffffffffffffffff8416600090815260079092526040909120611bf190600501826120e3565b611c2b5782826040517f393b8ad200000000000000000000000000000000000000000000000000000000815260040161086a9291906135f3565b6000818152600860205260409020611c43838261331b565b508267ffffffffffffffff167f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea83604051610d0e9190612b65565b611c9161028d60a0830160808401612b8d565b611ca5576115b260a0820160808301612b8d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb611ce46040840160208501612d3e565b60405160e083901b6001600160e01b031916815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190613462565b15611d7f57604051630a75a23b60e31b815260040160405180910390fd5b611d97611d926060830160408401612b8d565b6122d9565b611daf611daa6040830160208401612d3e565b61234b565b611588611dc26040830160208401612d3e565b8260600135612440565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611e4757600080fd5b505af1158015611570573d6000803e3d6000fd5b606060006119ce83612484565b60006119ce83836124df565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152611ee782606001516001600160801b031683600001516001600160801b0316846020015163ffffffff1642611ed49190613616565b85608001516001600160801b03166125d2565b6001600160801b031682525063ffffffff4216602082015290565b611f0b836109b0565b611f3457604051631e670e4b60e01b815267ffffffffffffffff8416600482015260240161086a565b611f3f826000611fd3565b67ffffffffffffffff83166000908152600760205260409020611f6290836125fa565b611f6d816000611fd3565b67ffffffffffffffff83166000908152600760205260409020611f9390600201826125fa565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b838383604051611fc693929190613629565b60405180910390a1505050565b8151156120835781602001516001600160801b031682604001516001600160801b031610158061200e575060408201516001600160801b0316155b1561204757816040517f8020d12400000000000000000000000000000000000000000000000000000000815260040161086a919061369a565b801561207f576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60408201516001600160801b03161515806120aa575060208201516001600160801b031615155b1561207f57816040517fd68af9cc00000000000000000000000000000000000000000000000000000000815260040161086a919061369a565b60006119ce838361271b565b336001600160a01b03821603612131576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61218a816109b0565b6121b3576040516354c8163f60e11b815267ffffffffffffffff8216600482015260240161086a565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416928101929092523360248301526001600160a01b0316906383826b2b90604401602060405180830381865afa158015612225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122499190613462565b6115885760405163728fe07b60e01b815233600482015260240161086a565b67ffffffffffffffff8216600090815260076020526040902061207f90600201827f000000000000000000000000000000000000000000000000000000000000000061276a565b60006119ce836001600160a01b0384166124df565b60006119ce836001600160a01b03841661271b565b7f0000000000000000000000000000000000000000000000000000000000000000156115885761230a600282612a50565b611588576040517fd0d259760000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260240161086a565b612354816109b0565b61237d576040516354c8163f60e11b815267ffffffffffffffff8216600482015260240161086a565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416928101929092526001600160a01b03169063a8d87a3b90602401602060405180830381865afa1580156123e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240d91906136cd565b6001600160a01b0316336001600160a01b0316146115885760405163728fe07b60e01b815233600482015260240161086a565b67ffffffffffffffff8216600090815260076020526040902061207f90827f000000000000000000000000000000000000000000000000000000000000000061276a565b606081600001805480602002602001604051908101604052809291908181526020018280548015610e6d57602002820191906000526020600020905b8154815260200190600101908083116124c05750505050509050919050565b600081815260018301602052604081205480156125c8576000612503600183613616565b855490915060009061251790600190613616565b905080821461257c57600086600001828154811061253757612537613062565b906000526020600020015490508087600001848154811061255a5761255a613062565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061258d5761258d6136ea565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105e6565b60009150506105e6565b60006125f1856125e284866135dc565b6125ec9087613700565b612a72565b95945050505050565b815460009061261690600160801b900463ffffffff1642613616565b905080156126745760018301548354612648916001600160801b03808216928116918591600160801b909104166125d2565b83546001600160801b03919091166001600160a01b031990911617600160801b4263ffffffff16021783555b60208201518354612691916001600160801b039081169116612a72565b835483511515600160a01b027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166001600160801b039283161717845560208301516040808501518316600160801b0291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990611fc690849061369a565b6000818152600183016020526040812054612762575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105e6565b5060006105e6565b8254600160a01b900460ff161580612780575081155b1561278a57505050565b825460018401546001600160801b03808316929116906000906127ba90600160801b900463ffffffff1642613616565b9050801561285757818311156127fc576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600186015461282090839085908490600160801b90046001600160801b03166125d2565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b4263ffffffff160217875592505b848210156128f4576001600160a01b0384166128a9576040517ff94ebcd1000000000000000000000000000000000000000000000000000000008152600481018390526024810186905260440161086a565b6040517f1a76572a00000000000000000000000000000000000000000000000000000000815260048101839052602481018690526001600160a01b038516604482015260640161086a565b848310156129d757600186810154600160801b90046001600160801b03169060009082906129229082613616565b61292c878a613616565b6129369190613700565b61294091906135ba565b90506001600160a01b03861661298c576040517f15279c08000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260440161086a565b6040517fd0c8d23a00000000000000000000000000000000000000000000000000000000815260048101829052602481018690526001600160a01b038716604482015260640161086a565b6129e18584613616565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001600160801b0382161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b6001600160a01b038116600090815260018301602052604081205415156119ce565b6000818310612a8157816119ce565b5090919050565b508054612a9490613078565b6000825580601f10612aa4575050565b601f0160209004906000526020600020908101906115889190612adc565b508054600082559060005260206000209081019061158891905b5b80821115612af15760008155600101612add565b5090565b600060208284031215612b0757600080fd5b81356001600160e01b0319811681146119ce57600080fd5b6000815180845260005b81811015612b4557602081850181015186830182015201612b29565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006119ce6020830184612b1f565b6001600160a01b038116811461158857600080fd5b600060208284031215612b9f57600080fd5b81356119ce81612b78565b600060208284031215612bbc57600080fd5b813567ffffffffffffffff811115612bd357600080fd5b820161010081850312156119ce57600080fd5b803567ffffffffffffffff81168114612bfe57600080fd5b919050565b600080600060408486031215612c1857600080fd5b612c2184612be6565b9250602084013567ffffffffffffffff80821115612c3e57600080fd5b818601915086601f830112612c5257600080fd5b813581811115612c6157600080fd5b876020828501011115612c7357600080fd5b6020830194508093505050509250925092565b60008083601f840112612c9857600080fd5b50813567ffffffffffffffff811115612cb057600080fd5b6020830191508360208260051b8501011115612ccb57600080fd5b9250929050565b60008060008060408587031215612ce857600080fd5b843567ffffffffffffffff80821115612d0057600080fd5b612d0c88838901612c86565b90965094506020870135915080821115612d2557600080fd5b50612d3287828801612c86565b95989497509550505050565b600060208284031215612d5057600080fd5b6119ce82612be6565b600060208284031215612d6b57600080fd5b813567ffffffffffffffff811115612d8257600080fd5b820160a081850312156119ce57600080fd5b602081526000825160406020840152612db06060840182612b1f565b90506020840151601f198483030160408501526125f18282612b1f565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e2457603f19888603018452612e12858351612b1f565b94509285019290850190600101612df6565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e725783516001600160a01b031683529284019291840191600101612e4d565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612e7257835167ffffffffffffffff1683529284019291840191600101612e9a565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612ef957612ef9612ec0565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612f2857612f28612ec0565b604052919050565b801515811461158857600080fd5b80356001600160801b0381168114612bfe57600080fd5b600060608284031215612f6757600080fd5b6040516060810181811067ffffffffffffffff82111715612f8a57612f8a612ec0565b6040529050808235612f9b81612f30565b8152612fa960208401612f3e565b6020820152612fba60408401612f3e565b60408201525092915050565b600080600060e08486031215612fdb57600080fd5b612fe484612be6565b9250612ff38560208601612f55565b91506130028560808601612f55565b90509250925092565b6000808335601e1984360301811261302257600080fd5b83018035915067ffffffffffffffff82111561303d57600080fd5b602001915036819003821315612ccb57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061308c57607f821691505b6020821081036130ac57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b67ffffffffffffffff841681526040602082015260006125f16040830184866130b2565b6020815260006107b16020830184866130b2565b6000823561011e1983360301811261312a57600080fd5b9190910192915050565b600082601f83011261314557600080fd5b813567ffffffffffffffff81111561315f5761315f612ec0565b613172601f8201601f1916602001612eff565b81815284602083860101111561318757600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156131b757600080fd5b6131bf612ed6565b6131c883612be6565b815260208084013567ffffffffffffffff808211156131e657600080fd5b9085019036601f8301126131f957600080fd5b81358181111561320b5761320b612ec0565b8060051b61321a858201612eff565b918252838101850191858101903684111561323457600080fd5b86860192505b83831015613270578235858111156132525760008081fd5b6132603689838a0101613134565b835250918601919086019061323a565b808789015250505050604086013592508083111561328d57600080fd5b505061329b36828601613134565b6040830152506132ae3660608501612f55565b60608201526132c03660c08501612f55565b608082015292915050565b601f8211156108b3576000816000526020600020601f850160051c810160208610156132f45750805b601f850160051c820191505b8181101561331357828155600101613300565b505050505050565b815167ffffffffffffffff81111561333557613335612ec0565b613349816133438454613078565b846132cb565b602080601f83116001811461337e57600084156133665750858301515b600019600386901b1c1916600185901b178555613313565b600085815260208120601f198616915b828110156133ad5788860151825594840194600190910190840161338e565b50858210156133cb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526133ff81840187612b1f565b8551151560408581019190915260208701516001600160801b0390811660608701529087015116608085015291506134349050565b8251151560a083015260208301516001600160801b0390811660c084015260408401511660e08301526125f1565b60006020828403121561347457600080fd5b81516119ce81612f30565b60006020828403121561349157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156105e6576105e6613498565b600181815b808511156135025781600019048211156134e8576134e8613498565b808516156134f557918102915b93841c93908002906134cc565b509250929050565b600082613519575060016105e6565b81613526575060006105e6565b816001811461353c576002811461354657613562565b60019150506105e6565b60ff84111561355757613557613498565b50506001821b6105e6565b5060208310610133831016604e8410600b8410161715613585575081810a6105e6565b61358f83836134c7565b80600019048211156135a3576135a3613498565b029392505050565b60006119ce60ff84168361350a565b6000826135d757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176105e6576105e6613498565b67ffffffffffffffff831681526040602082015260006107b16040830184612b1f565b818103818111156105e6576105e6613498565b67ffffffffffffffff8416815260e0810161366c60208301858051151582526020808201516001600160801b039081169184019190915260409182015116910152565b82511515608083015260208301516001600160801b0390811660a084015260408401511660c08301526107b1565b606081016105e682848051151582526020808201516001600160801b039081169184019190915260409182015116910152565b6000602082840312156136df57600080fd5b81516119ce81612b78565b634e487b7160e01b600052603160045260246000fd5b808201808211156105e6576105e661349856fea264697066735822122093a2a64c2bcb6830b52e248c8e76d5df6137a4f1df92238468a84f1ed451f86164736f6c63430008180033000000000000000000000000aeac3b55c3522157ecda7ec8fcb86c832faa28af000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c311a21e6fef769344eb1515588b9d535662a145000000000000000000000000141fa059441e0ca23ce184b6a78bafd2a517dde80000000000000000000000000000000000000000000000000000000000000000