0 txs
0 calls
constructor
constructor(address _l2GatewayRouter, address _crossDomainAdmin, address _hubPool, address _wethAddress, address timerAddress)
functions
chainId
viewfunction chainId() view returns (uint256)
crossDomainAdmin
viewfunction crossDomainAdmin() view returns (address)
depositQuoteTimeBuffer
viewfunction depositQuoteTimeBuffer() view returns (uint32)
enabledDepositRoutes
viewfunction enabledDepositRoutes(address, uint256) view returns (bool)
getCurrentTime
viewfunction getCurrentTime() view returns (uint256)
hubPool
viewfunction hubPool() view returns (address)
l2GatewayRouter
viewfunction l2GatewayRouter() view returns (address)
numberOfDeposits
viewfunction numberOfDeposits() view returns (uint32)
relayFills
viewfunction relayFills(bytes32) view returns (uint256)
rootBundles
viewfunction rootBundles(uint256) view returns (bytes32 slowRelayRoot, bytes32 relayerRefundRoot)
timerAddress
viewfunction timerAddress() view returns (address)
whitelistedTokens
viewfunction whitelistedTokens(address) view returns (address)
wrappedNativeToken
viewfunction wrappedNativeToken() view returns (address)
deposit
payablefunction deposit(address recipient, address originToken, uint256 amount, uint256 destinationChainId, uint64 relayerFeePct, uint32 quoteTimestamp) payable
emergencyDeleteRootBundle
nonpayablefunction emergencyDeleteRootBundle(uint256 rootBundleId)
executeRelayerRefundLeaf
nonpayablefunction executeRelayerRefundLeaf(uint32 rootBundleId, tuple relayerRefundLeaf, bytes32[] proof)
executeSlowRelayLeaf
nonpayablefunction executeSlowRelayLeaf(address depositor, address recipient, address destinationToken, uint256 amount, uint256 originChainId, uint64 realizedLpFeePct, uint64 relayerFeePct, uint32 depositId, uint32 rootBundleId, bytes32[] proof)
fillRelay
nonpayablefunction fillRelay(address depositor, address recipient, address destinationToken, uint256 amount, uint256 maxTokensToSend, uint256 repaymentChainId, uint256 originChainId, uint64 realizedLpFeePct, uint64 relayerFeePct, uint32 depositId)
fillRelayWithUpdatedFee
nonpayablefunction fillRelayWithUpdatedFee(address depositor, address recipient, address destinationToken, uint256 amount, uint256 maxTokensToSend, uint256 repaymentChainId, uint256 originChainId, uint64 realizedLpFeePct, uint64 relayerFeePct, uint64 newRelayerFeePct, uint32 depositId, bytes depositorSignature)
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
relayRootBundle
nonpayablefunction relayRootBundle(bytes32 relayerRefundRoot, bytes32 slowRelayRoot)
setCrossDomainAdmin
nonpayablefunction setCrossDomainAdmin(address newCrossDomainAdmin)
setCurrentTime
nonpayablefunction setCurrentTime(uint256 time)
setDepositQuoteTimeBuffer
nonpayablefunction setDepositQuoteTimeBuffer(uint32 newDepositQuoteTimeBuffer)
setEnableRoute
nonpayablefunction setEnableRoute(address originToken, uint256 destinationChainId, bool enabled)
setHubPool
nonpayablefunction setHubPool(address newHubPool)
setL2GatewayRouter
nonpayablefunction setL2GatewayRouter(address newL2GatewayRouter)
speedUpDeposit
nonpayablefunction speedUpDeposit(address depositor, uint64 newRelayerFeePct, uint32 depositId, bytes depositorSignature)
whitelistToken
nonpayablefunction whitelistToken(address l2Token, address l1Token)
events
ArbitrumTokensBridged
event ArbitrumTokensBridged(address indexed l1Token, address target, uint256 numberOfTokensBridged)
EmergencyDeleteRootBundle
event EmergencyDeleteRootBundle(uint256 indexed rootBundleId)
EnabledDepositRoute
event EnabledDepositRoute(address indexed originToken, uint256 indexed destinationChainId, bool enabled)
ExecutedRelayerRefundRoot
event ExecutedRelayerRefundRoot(uint256 amountToReturn, uint256 indexed chainId, uint256[] refundAmounts, uint32 indexed rootBundleId, uint32 indexed leafId, address l2TokenAddress, address[] refundAddresses, address caller)
FilledRelay
event FilledRelay(uint256 amount, uint256 totalFilledAmount, uint256 fillAmount, uint256 repaymentChainId, uint256 originChainId, uint256 destinationChainId, uint64 relayerFeePct, uint64 appliedRelayerFeePct, uint64 realizedLpFeePct, uint32 depositId, address destinationToken, address indexed relayer, address indexed depositor, address recipient, bool isSlowRelay)
FundsDeposited
event FundsDeposited(uint256 amount, uint256 originChainId, uint256 destinationChainId, uint64 relayerFeePct, uint32 indexed depositId, uint32 quoteTimestamp, address indexed originToken, address recipient, address indexed depositor)
RelayedRootBundle
event RelayedRootBundle(uint32 indexed rootBundleId, bytes32 indexed relayerRefundRoot, bytes32 indexed slowRelayRoot)
RequestedSpeedUpDeposit
event RequestedSpeedUpDeposit(uint64 newRelayerFeePct, uint32 indexed depositId, address indexed depositor, bytes depositorSignature)
SetDepositQuoteTimeBuffer
event SetDepositQuoteTimeBuffer(uint32 newBuffer)
SetHubPool
event SetHubPool(address indexed newHubPool)
SetL2GatewayRouter
event SetL2GatewayRouter(address indexed newL2GatewayRouter)
SetXDomainAdmin
event SetXDomainAdmin(address indexed newAdmin)
TokensBridged
event TokensBridged(uint256 amountToReturn, uint256 indexed chainId, uint32 indexed leafId, address indexed l2TokenAddress, address caller)
WhitelistedTokens
event WhitelistedTokens(address indexed l2Token, address indexed l1Token)
errors
No errors.
creation bytecode
0x60a06040526002805463ffffffff60a01b1916604b60a31b1790553480156200002757600080fd5b506040516200482a3803806200482a8339810160408190526200004a916200025a565b600080546001600160a81b0319166001600160a01b03831617600160a01b179055838383836200007a84620000ab565b620000858362000151565b506001600160a01b031660805250620000a0905085620001f3565b5050505050620002ca565b6001600160a01b038116620001075760405162461bcd60e51b815260206004820152601960248201527f4261642062726964676520726f7574657220616464726573730000000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fa9e8c42c9e7fca7f62755189a16b2f5314d43d8fb24e91ba54e6d65f9314e84990600090a250565b6001600160a01b038116620001a95760405162461bcd60e51b815260206004820152601460248201527f4261642068756220706f6f6c20616464726573730000000000000000000000006044820152606401620000fe565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f1f17a88f67b0f49060a34bec1a4723a563620e6aa265eb640b5046dcee0759a090600090a250565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fdc4a5f4c066ad14c1306e624550b42395e08f992a76b416cc7b1ad11503d376c90600090a250565b80516001600160a01b03811681146200025557600080fd5b919050565b600080600080600060a086880312156200027357600080fd5b6200027e866200023d565b94506200028e602087016200023d565b93506200029e604087016200023d565b9250620002ae606087016200023d565b9150620002be608087016200023d565b90509295509295909350565b60805161452162000309600039600081816101e401528181610dd001528181610e990152818161237e01528181612d2c0152612d8201526145216000f3fe6080604052600436106101c65760003560e01c806357f6dcb8116100f7578063c835685911610095578063e282d5b911610064578063e282d5b9146105e0578063ee2a53f814610600578063f06850f614610635578063ffc351a31461066257600080fd5b8063c835685914610523578063daf9c21014610550578063de7eba7814610593578063e1904402146105b357600080fd5b80639a8a0592116100d15780639a8a059214610497578063a1244c67146104aa578063ac9650d8146104e3578063be3576ee1461050357600080fd5b806357f6dcb81461040d57806389a153cc146104575780638a7860ce1461047757600080fd5b806329cb924d11610164578063493a4f841161013e578063493a4f84146103555780634e3485c8146103755780635249fef1146103955780635285e058146103e057600080fd5b806329cb924d146102ff578063364f01a614610322578063492289781461034257600080fd5b80631dfb2d02116101a05780631dfb2d021461027f57806322f8e5661461029f578063272751c7146102bf5780632752042e146102df57600080fd5b806317fcb39b146101d25780631b3d5559146102305780631c39c38d1461025257600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506102067f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023c57600080fd5b5061025061024b3660046137c6565b610682565b005b34801561025e57600080fd5b506000546102069073ffffffffffffffffffffffffffffffffffffffff1681565b34801561028b57600080fd5b5061025061029a3660046138c2565b61070b565b3480156102ab57600080fd5b506102506102ba3660046138dd565b610798565b3480156102cb57600080fd5b506102506102da366004613904565b610841565b3480156102eb57600080fd5b506102506102fa366004613944565b610953565b34801561030b57600080fd5b50610314610a54565b604051908152602001610227565b34801561032e57600080fd5b5061025061033d36600461395f565b610b0c565b6102506103503660046139aa565b610b9b565b34801561036157600080fd5b50610250610370366004613a10565b611012565b34801561038157600080fd5b506102506103903660046138c2565b611128565b3480156103a157600080fd5b506103d06103b0366004613a32565b600460209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610227565b3480156103ec57600080fd5b506001546102069073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041957600080fd5b506002546104429074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610227565b34801561046357600080fd5b50610250610472366004613a5c565b61116e565b34801561048357600080fd5b506102506104923660046138dd565b6112ca565b3480156104a357600080fd5b5046610314565b3480156104b657600080fd5b50600254610442907801000000000000000000000000000000000000000000000000900463ffffffff1681565b6104f66104f1366004613afa565b61139e565b6040516102279190613be5565b34801561050f57600080fd5b5061025061051e366004613c65565b611578565b34801561052f57600080fd5b506006546102069073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055c57600080fd5b5061020661056b3660046138c2565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561059f57600080fd5b506102506105ae3660046138c2565b611604565b3480156105bf57600080fd5b506002546102069073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105ec57600080fd5b506102506105fb366004613dc3565b61164a565b34801561060c57600080fd5b5061062061061b3660046138dd565b6117a8565b60408051928352602083019190915201610227565b34801561064157600080fd5b506103146106503660046138dd565b60056020526000908152604090205481565b34801561066e57600080fd5b5061025061067d366004613e32565b6117d6565b61068a611941565b6106b7600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6106c28383836119c7565b610706600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b505050565b610713611d73565b61071b611941565b610748600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b61075181611e3d565b610795600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b50565b60005473ffffffffffffffffffffffffffffffffffffffff166107ba57600080fd5b6000546040517f22f8e5660000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff909116906322f8e56690602401600060405180830381600087803b15801561082657600080fd5b505af115801561083a573d6000803e3d6000fd5b5050505050565b610849611d73565b610851611941565b61087e600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b73ffffffffffffffffffffffffffffffffffffffff8316600081815260046020908152604080832086845282529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182528492917f0a21fdd43d0ad0c62689ee7230a47309a050755bcc52eba00310add65297692a910160405180910390a3610706600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b61095b611d73565b610963611941565b610990600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b600280547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f0e55dd180fa793d9036c804d0a116e6a7617a48e72cee1f83d92793a793fcc039060200160405180910390a1610795600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b6000805473ffffffffffffffffffffffffffffffffffffffff1615610b075760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329cb924d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b029190613f10565b905090565b504290565b610b14611d73565b610b1c611941565b610b49600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b610b538282611f29565b610b97600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b5050565b610ba3611941565b610bd0600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260046020908152604080832086845290915290205460ff16610c6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f44697361626c656420726f75746500000000000000000000000000000000000060448201526064015b60405180910390fd5b6706f05b59d3b200008267ffffffffffffffff1610610cea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c69642072656c6179657220666565000000000000000000000000006044820152606401610c66565b600254610d159074010000000000000000000000000000000000000000900463ffffffff1682613f58565b63ffffffff16610d23610a54565b10158015610d685750600254610d579074010000000000000000000000000000000000000000900463ffffffff1682613f7d565b63ffffffff16610d65610a54565b11155b610dce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c69642071756f74652074696d6500000000000000000000000000006044820152606401610c66565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015610e295750600034115b15610f1d57833414610e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6d73672e76616c7565206d757374206d6174636820616d6f756e7400000000006044820152606401610c66565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610eff57600080fd5b505af1158015610f13573d6000803e3d6000fd5b5050505050610f3f565b610f3f73ffffffffffffffffffffffffffffffffffffffff8616333087611fa5565b610f768446600254869086907801000000000000000000000000000000000000000000000000900463ffffffff16868b8d33612081565b60028054601890610fa8907801000000000000000000000000000000000000000000000000900463ffffffff16613fa5565b91906101000a81548163ffffffff021916908363ffffffff16021790555061100a600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b505050505050565b61101a611d73565b611022611941565b61104f600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6003805460018101825560008281529181027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c81018590557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01838155604051919290918491869163ffffffff8616917fc86ba04c55bc5eb2f2876b91c438849a296dbec7b08751c3074d92e04f0a77af91a45050610b97600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b611130611d73565b611138611941565b611165600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b61075181612112565b611176611941565b6111a3600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b60006040518061012001604052808c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018681526020016112184690565b81526020018567ffffffffffffffff1681526020018467ffffffffffffffff1681526020018363ffffffff168152509050600061125482612181565b9050600061126682848b8860006121b1565b905061127782828a8887600061245e565b5050506112be600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b50505050505050505050565b6112d2611d73565b6112da611941565b611307600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6003818154811061131a5761131a613fc8565b60009182526020822060039091020181815560010181905560405182917f3569b846531b754c99cb80df3f49cd72fa6fe106aaee5ab8e0caf35a9d7ce88d91a2610795600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b60603415611408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c79206d756c746963616c6c207769746820302076616c756500000000006044820152606401610c66565b8167ffffffffffffffff8111156114215761142161360a565b60405190808252806020026020018201604052801561145457816020015b606081526020019060019003908161143f5790505b50905060005b82811015611571576000803086868581811061147857611478613fc8565b905060200281019061148a9190613ff7565b60405161149892919061405c565b600060405180830381855af49150503d80600081146114d3576040519150601f19603f3d011682016040523d82523d6000602084013e6114d8565b606091505b50915091508161153e576044815110156114f157600080fd5b6004810190508080602001905181019061150b919061409c565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6691906140ed565b8084848151811061155157611551613fc8565b60200260200101819052505050808061156990614100565b91505061145a565b5092915050565b611580611941565b6115ad600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6115c08a8a8a8a8a468b8b8b8b8b6125a0565b6112be600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b61160c611d73565b611614611941565b611641600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6107518161271f565b611652611941565b61167f600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6706f05b59d3b200008367ffffffffffffffff16106116fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c69642072656c6179657220666565000000000000000000000000006044820152606401610c66565b611707844685858561280b565b8373ffffffffffffffffffffffffffffffffffffffff168263ffffffff167fb9de16bf376724405019a10ef4fedac57fecd292bf86c08d81d7c42d394d5d378584604051611756929190614138565b60405180910390a36117a2600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b50505050565b600381815481106117b857600080fd5b60009182526020909120600390910201805460019091015490915082565b6117de611941565b61180b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055565b6118188c8785858561280b565b60006040518061012001604052808e73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b815260200188815260200161188d4690565b81526020018767ffffffffffffffff1681526020018667ffffffffffffffff1681526020018463ffffffff16815250905060006118c982612181565b905060006118db82848d8960006121b1565b90506118ec82828c8987600061245e565b505050611933600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b505050505050505050505050565b60005474010000000000000000000000000000000000000000900460ff166119c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c66565b565b46826020015114611a34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c696420636861696e496400000000000000000000000000000000006044820152606401610c66565b8160400151518260a001515114611aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c6964206c65616600000000000000000000000000000000000000006044820152606401610c66565b600060038463ffffffff1681548110611ac257611ac2613fc8565b90600052602060002090600302019050611ae1816001015484846128a8565b611b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4261642050726f6f6600000000000000000000000000000000000000000000006044820152606401610c66565b611b5e81600201846060015163ffffffff166128e5565b15611bc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416c726561647920636c61696d656400000000000000000000000000000000006044820152606401610c66565b611bdc81600201846060015163ffffffff16612926565b60408301515160005b81811015611c6d57600085604001518281518110611c0557611c05613fc8565b602002602001015190506000811115611c6457611c648660a001518381518110611c3157611c31613fc8565b602002602001015182886080015173ffffffffffffffffffffffffffffffffffffffff166129649092919063ffffffff16565b50600101611be5565b50835115611d0657611c7e846129ba565b836080015173ffffffffffffffffffffffffffffffffffffffff16846060015163ffffffff1685602001517f828fc203220356df8f072a91681caee7d5c75095e2a95e80ed5a14b384697f71876000015133604051611cfd92919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60405180910390a45b836060015163ffffffff168563ffffffff1685602001517ff8bd640004bcec1b89657020f561d0b070cbdf662d0b158db9dccb0a8301bfab8760000151886040015189608001518a60a0015133604051611d649594939291906141dc565b60405180910390a45050505050565b600154611da99073ffffffffffffffffffffffffffffffffffffffff167311110000000000000000000000000000000011110190565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4f4e4c595f434f554e544552504152545f4741544557415900000000000000006044820152606401610c66565b73ffffffffffffffffffffffffffffffffffffffff8116611eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4261642068756220706f6f6c20616464726573730000000000000000000000006044820152606401610c66565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f1f17a88f67b0f49060a34bec1a4723a563620e6aa265eb640b5046dcee0759a090600090a250565b73ffffffffffffffffffffffffffffffffffffffff82811660008181526007602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055517f8d7f294eaa476236fe8cb5629376a12cd37dace3d21e6a7b98f1641c4ed5f09e9190a35050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526117a29085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b86565b604080518a8152602081018a905290810188905267ffffffffffffffff8716606082015263ffffffff858116608083015273ffffffffffffffffffffffffffffffffffffffff84811660a084015280841692908616918816907f4a4fc49abd237bfd7f4ac82d6c7a284c69daaea5154430cff04ad7482c6c42549060c00160405180910390a4505050505050505050565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fdc4a5f4c066ad14c1306e624550b42395e08f992a76b416cc7b1ad11503d376c90600090a250565b600081604051602001612194919061423a565b604051602081830303815290604052805190602001209050919050565b60006706f05b59d3b200008367ffffffffffffffff161080156121e957506706f05b59d3b200008560c0015167ffffffffffffffff16105b61224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c6964206665657300000000000000000000000000000000000000006044820152606401610c66565b6060850151600087815260056020526040902054106122ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f72656c61792066696c6c656400000000000000000000000000000000000000006044820152606401610c66565b836000036122da57506000612455565b6122f384848760c001516122ee91906142e1565b612c92565b600087815260056020526040812054606088015192935086926123169190614304565b90508281101561233f5780925061233c83868960c0015161233791906142e1565b612ccc565b91505b6000888152600560205260408120805485929061235d90849061431b565b9091555050604087015173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169116036123e557836123d25760408701516123d29073ffffffffffffffffffffffffffffffffffffffff16333085611fa5565b6123e0876020015183612cf5565b612452565b8361241f576123e0338860200151848a6040015173ffffffffffffffffffffffffffffffffffffffff16611fa5909392919063ffffffff16565b612452876020015183896040015173ffffffffffffffffffffffffffffffffffffffff166129649092919063ffffffff16565b50505b95945050505050565b816000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f56450a30040c51955338a4a9fbafcf94f7ca4b75f4cd83c2f5e29ef77fbe0a3a8460600151600560008b815260200190815260200160002054898988608001518960a001518a60e001518c8c60c001518d61010001518e604001518f602001518f6040516125909d9c9b9a999897969594939291909c8d5260208d019b909b5260408c019990995260608b019790975260808a019590955260a089019390935267ffffffffffffffff91821660c0890152811660e08801521661010086015263ffffffff1661012085015273ffffffffffffffffffffffffffffffffffffffff9081166101408501521661016083015215156101808201526101a00190565b60405180910390a3505050505050565b60006040518061012001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020018881526020018767ffffffffffffffff1681526020018667ffffffffffffffff1681526020018563ffffffff16815250905061267560038463ffffffff168154811061265c5761265c613fc8565b9060005260206000209060030201600001548284612e36565b6126db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f6f66000000000000000000000000000000000000006044820152606401610c66565b60006126e682612181565b905060006126fd82848560600151600060016121b1565b905061270f828260008087600161245e565b5050505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff811661279c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4261642062726964676520726f757465722061646472657373000000000000006044820152606401610c66565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fa9e8c42c9e7fca7f62755189a16b2f5314d43d8fb24e91ba54e6d65f9314e84990600090a250565b60408051608060208201819052601160a08301527f4143524f53532d56322d4645452d312e3000000000000000000000000000000060c083015267ffffffffffffffff86169282019290925263ffffffff8416606082015290810185905260009060e001604051602081830303815290604052805190602001209050600061289282612e4e565b905061289f878285612e89565b50505050505050565b60006128db8285856040516020016128c09190614333565b60405160208183030381529060405280519060200120612f27565b90505b9392505050565b6000806128f4610100846143fd565b9050600061290461010085614411565b6000928352602095909552506040902054600190931b92831690921492915050565b6000612934610100836143fd565b9050600061294461010084614411565b600092835260209490945250604090208054600190931b90921790915550565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526107069084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611fff565b608081015173ffffffffffffffffffffffffffffffffffffffff9081166000908152600760205260409020541680612a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f556e696e697469616c697a6564206d61696e6e657420746f6b656e00000000006044820152606401610c66565b60065460025483516040517f7b3a3c8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152928316602482015260448101919091526080606482015260006084820152911690637b3a3c8b9060a4016000604051808303816000875af1158015612ae2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612b28919081019061409c565b5060025482516040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091526000917f997d81a0a8415d688a6c319736602098252bf6445e0e879326f682f11928e317910160405180910390a25050565b6000612be8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612f3d9092919063ffffffff16565b8051909150156107065780806020019051810190612c069190614425565b610706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c66565b6000612ca682670de0b6b3a7640000614442565b67ffffffffffffffff16612cc284670de0b6b3a7640000614463565b6128de91906143fd565b6000670de0b6b3a7640000612ce18382614442565b612cc29067ffffffffffffffff1685614463565b73ffffffffffffffffffffffffffffffffffffffff82163b15612d5357610b9773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383612964565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015612ddb57600080fd5b505af1158015612def573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8516925083156108fc02915083906000818181858888f19350505050158015610706573d6000803e3d6000fd5b60006128db8285856040516020016128c0919061423a565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01612194565b612e938282612f4c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610c66565b600082612f348584612f70565b14949350505050565b60606128db8484600085612fdc565b6000806000612f5b8585613172565b91509150612f68816131e0565b509392505050565b600081815b8451811015612f68576000858281518110612f9257612f92613fc8565b60200260200101519050808311612fb85760008381526020829052604090209250612fc9565b600081815260208490526040902092505b5080612fd481614100565b915050612f75565b60608247101561306e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610c66565b73ffffffffffffffffffffffffffffffffffffffff85163b6130ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c66565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161311591906144a0565b60006040518083038185875af1925050503d8060008114613152576040519150601f19603f3d011682016040523d82523d6000602084013e613157565b606091505b5091509150613167828286613434565b979650505050505050565b60008082516041036131a85760208301516040840151606085015160001a61319c87828585613487565b945094505050506131d9565b82516040036131d157602083015160408401516131c686838361359f565b9350935050506131d9565b506000905060025b9250929050565b60008160048111156131f4576131f46144bc565b036131fc5750565b6001816004811115613210576132106144bc565b03613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610c66565b600281600481111561328b5761328b6144bc565b036132f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610c66565b6003816004811115613306576133066144bc565b03613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610c66565b60048160048111156133a7576133a76144bc565b03610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610c66565b606083156134435750816128de565b8251156134535782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6691906140ed565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156134be5750600090506003613596565b8460ff16601b141580156134d657508460ff16601c14155b156134e75750600090506004613596565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561353b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661358f57600060019250925050613596565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316816135d560ff86901c601b61431b565b90506135e387828885613487565b935093505050935093915050565b803563ffffffff8116811461360557600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561365c5761365c61360a565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156136a9576136a961360a565b604052919050565b600067ffffffffffffffff8211156136cb576136cb61360a565b5060051b60200190565b600082601f8301126136e657600080fd5b813560206136fb6136f6836136b1565b613662565b82815260059290921b8401810191818101908684111561371a57600080fd5b8286015b84811015613735578035835291830191830161371e565b509695505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461360557600080fd5b600082601f83011261377557600080fd5b813560206137856136f6836136b1565b82815260059290921b840181019181810190868411156137a457600080fd5b8286015b84811015613735576137b981613740565b83529183019183016137a8565b6000806000606084860312156137db57600080fd5b6137e4846135f1565b9250602084013567ffffffffffffffff8082111561380157600080fd5b9085019060c0828803121561381557600080fd5b61381d613639565b823581526020830135602082015260408301358281111561383d57600080fd5b613849898286016136d5565b60408301525061385b606084016135f1565b606082015261386c60808401613740565b608082015260a08301358281111561388357600080fd5b61388f89828601613764565b60a083015250935060408601359150808211156138ab57600080fd5b506138b8868287016136d5565b9150509250925092565b6000602082840312156138d457600080fd5b6128de82613740565b6000602082840312156138ef57600080fd5b5035919050565b801515811461079557600080fd5b60008060006060848603121561391957600080fd5b61392284613740565b9250602084013591506040840135613939816138f6565b809150509250925092565b60006020828403121561395657600080fd5b6128de826135f1565b6000806040838503121561397257600080fd5b61397b83613740565b915061398960208401613740565b90509250929050565b803567ffffffffffffffff8116811461360557600080fd5b60008060008060008060c087890312156139c357600080fd5b6139cc87613740565b95506139da60208801613740565b945060408701359350606087013592506139f660808801613992565b9150613a0460a088016135f1565b90509295509295509295565b60008060408385031215613a2357600080fd5b50508035926020909101359150565b60008060408385031215613a4557600080fd5b613a4e83613740565b946020939093013593505050565b6000806000806000806000806000806101408b8d031215613a7c57600080fd5b613a858b613740565b9950613a9360208c01613740565b9850613aa160408c01613740565b975060608b0135965060808b0135955060a08b0135945060c08b01359350613acb60e08c01613992565b9250613ada6101008c01613992565b9150613ae96101208c016135f1565b90509295989b9194979a5092959850565b60008060208385031215613b0d57600080fd5b823567ffffffffffffffff80821115613b2557600080fd5b818501915085601f830112613b3957600080fd5b813581811115613b4857600080fd5b8660208260051b8501011115613b5d57600080fd5b60209290920196919550909350505050565b60005b83811015613b8a578181015183820152602001613b72565b838111156117a25750506000910152565b60008151808452613bb3816020860160208601613b6f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613c58577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613c46858351613b9b565b94509285019290850190600101613c0c565b5092979650505050505050565b6000806000806000806000806000806101408b8d031215613c8557600080fd5b613c8e8b613740565b9950613c9c60208c01613740565b9850613caa60408c01613740565b975060608b0135965060808b01359550613cc660a08c01613992565b9450613cd460c08c01613992565b9350613ce260e08c016135f1565b9250613cf16101008c016135f1565b91506101208b013567ffffffffffffffff811115613d0e57600080fd5b613d1a8d828e016136d5565b9150509295989b9194979a5092959850565b600067ffffffffffffffff821115613d4657613d4661360a565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613d8357600080fd5b8135613d916136f682613d2c565b818152846020838601011115613da657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215613dd957600080fd5b613de285613740565b9350613df060208601613992565b9250613dfe604086016135f1565b9150606085013567ffffffffffffffff811115613e1a57600080fd5b613e2687828801613d72565b91505092959194509250565b6000806000806000806000806000806000806101808d8f031215613e5557600080fd5b613e5e8d613740565b9b50613e6c60208e01613740565b9a50613e7a60408e01613740565b995060608d0135985060808d0135975060a08d0135965060c08d01359550613ea460e08e01613992565b9450613eb36101008e01613992565b9350613ec26101208e01613992565b9250613ed16101408e016135f1565b915067ffffffffffffffff6101608e01351115613eed57600080fd5b613efe8e6101608f01358f01613d72565b90509295989b509295989b509295989b565b600060208284031215613f2257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff83811690831681811015613f7557613f75613f29565b039392505050565b600063ffffffff808316818516808303821115613f9c57613f9c613f29565b01949350505050565b600063ffffffff808316818103613fbe57613fbe613f29565b6001019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261402c57600080fd5b83018035915067ffffffffffffffff82111561404757600080fd5b6020019150368190038213156131d957600080fd5b8183823760009101908152919050565b600061407a6136f684613d2c565b905082815283838301111561408e57600080fd5b6128de836020830184613b6f565b6000602082840312156140ae57600080fd5b815167ffffffffffffffff8111156140c557600080fd5b8201601f810184136140d657600080fd5b6140e58482516020840161406c565b949350505050565b6020815260006128de6020830184613b9b565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361413157614131613f29565b5060010190565b67ffffffffffffffff831681526040602082015260006128db6040830184613b9b565b600081518084526020808501945080840160005b8381101561418b5781518752958201959082019060010161416f565b509495945050505050565b600081518084526020808501945080840160005b8381101561418b57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016141aa565b85815260a0602082015260006141f560a083018761415b565b73ffffffffffffffffffffffffffffffffffffffff808716604085015283820360608501526142248287614196565b9250808516608085015250509695505050505050565b815173ffffffffffffffffffffffffffffffffffffffff90811682526020808401518216908301526040808401519182169083015261012082019050606083015160608301526080830151608083015260a083015160a083015260c08301516142af60c084018267ffffffffffffffff169052565b5060e08301516142cb60e084018267ffffffffffffffff169052565b506101009283015163ffffffff16919092015290565b600067ffffffffffffffff808316818516808303821115613f9c57613f9c613f29565b60008282101561431657614316613f29565b500390565b6000821982111561432e5761432e613f29565b500190565b6020815281516020820152602082015160408201526000604083015160c0606084015261436360e084018261415b565b905063ffffffff606085015116608084015273ffffffffffffffffffffffffffffffffffffffff60808501511660a084015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c08501526124558282614196565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261440c5761440c6143ce565b500490565b600082614420576144206143ce565b500690565b60006020828403121561443757600080fd5b81516128de816138f6565b600067ffffffffffffffff83811690831681811015613f7557613f75613f29565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561449b5761449b613f29565b500290565b600082516144b2818460208701613b6f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220824fd71e31f6f23b9cad96da1db93c08eb986fdd4ea50840024056d9e4ecfab764736f6c634300080d00330000000000000000000000005288c571fd7ad117bea99bf60fe0846c4e84f933000000000000000000000000c186fa914353c44b2e33ebe05f21846f1048beda000000000000000000000000c186fa914353c44b2e33ebe05f21846f1048beda00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000000000000000000000000000000000000000000000