0 txs
1.42m calls
constructor
No constructor.
functions
allowlistSize
viewfunction allowlistSize() view returns (uint64)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultMultiplierBps
viewfunction defaultMultiplierBps() view returns (uint16)
dstConfig
viewfunction dstConfig(uint32 dstEid) view returns (uint64 lzReceiveBaseGas, uint16 multiplierBps, uint128 floorMarginUSD, uint128 nativeCap, uint64 lzComposeBaseGas)
endpoint
viewfunction endpoint() view returns (address)
getFee
viewfunction getFee(address _sender, bytes _options) view returns (uint256 fee)
getFee
viewfunction getFee(uint32 _dstEid, address _sender, uint256 _calldataSize, bytes _options) view returns (uint256 fee)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSupportedOptionTypes
viewfunction getSupportedOptionTypes(uint32 _eid) view returns (uint8[])
hasAcl
viewfunction hasAcl(address _sender) view returns (bool)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
localEidV2
viewfunction localEidV2() view returns (uint32)
paused
viewfunction paused() view returns (bool)
priceFeed
viewfunction priceFeed() view returns (address)
receiveUln301
viewfunction receiveUln301() view returns (address)
renounceRole
purefunction renounceRole(bytes32, address) pure
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
workerFeeLib
viewfunction workerFeeLib() view returns (address)
assignJob
nonpayablefunction assignJob(address _sender, bytes _options) returns (uint256 fee)
assignJob
nonpayablefunction assignJob(uint32 _dstEid, address _sender, uint256 _calldataSize, bytes _options) returns (uint256 fee)
compose302
payablefunction compose302(address _from, address _to, bytes32 _guid, uint16 _index, bytes _message, bytes _extraData, uint256 _gasLimit) payable
execute301
nonpayablefunction execute301(bytes _packet, uint256 _gasLimit)
execute302
payablefunction execute302(tuple _executionParams) payable
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _endpoint, address _receiveUln301, address[] _messageLibs, address _priceFeed, address _roleAdmin, address[] _admins)
nativeDrop
payablefunction nativeDrop(tuple _origin, uint32 _dstEid, address _oapp, tuple[] _nativeDropParams, uint256 _nativeDropGasLimit) payable
nativeDropAndExecute301
payablefunction nativeDropAndExecute301(tuple _origin, tuple[] _nativeDropParams, uint256 _nativeDropGasLimit, bytes _packet, uint256 _gasLimit) payable
nativeDropAndExecute302
payablefunction nativeDropAndExecute302(tuple[] _nativeDropParams, uint256 _nativeDropGasLimit, tuple _executionParams) payable
onUpgrade
nonpayablefunction onUpgrade(address _receiveUln301)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setDefaultMultiplierBps
nonpayablefunction setDefaultMultiplierBps(uint16 _multiplierBps)
setDstConfig
nonpayablefunction setDstConfig(tuple[] _params)
setPaused
nonpayablefunction setPaused(bool _paused)
setPriceFeed
nonpayablefunction setPriceFeed(address _priceFeed)
setSupportedOptionTypes
nonpayablefunction setSupportedOptionTypes(uint32 _eid, uint8[] _optionTypes)
setWorkerFeeLib
nonpayablefunction setWorkerFeeLib(address _workerFeeLib)
withdrawFee
nonpayablefunction withdrawFee(address _lib, address _to, uint256 _amount)
withdrawToken
nonpayablefunction withdrawToken(address _token, address _to, uint256 _amount)
events
DstConfigSet
event DstConfigSet((uint32 dstEid, uint64 lzReceiveBaseGas, uint64 lzComposeBaseGas, uint16 multiplierBps, uint128 floorMarginUSD, uint128 nativeCap)[] params)
Initialized
event Initialized(uint8 version)
NativeDropApplied
event NativeDropApplied((uint32 srcEid, bytes32 sender, uint64 nonce) origin, uint32 dstEid, address oapp, (address receiver, uint256 amount)[] params, bool[] success)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetDefaultMultiplierBps
event SetDefaultMultiplierBps(uint16 multiplierBps)
SetPriceFeed
event SetPriceFeed(address priceFeed)
SetSupportedOptionTypes
event SetSupportedOptionTypes(uint32 dstEid, uint8[] optionTypes)
SetWorkerLib
event SetWorkerLib(address workerLib)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(address lib, address to, uint256 amount)
errors
Transfer_NativeFailed
error Transfer_NativeFailed(address _to, uint256 _value)
Transfer_ToAddressIsZero
error Transfer_ToAddressIsZero()
Worker_NotAllowed
error Worker_NotAllowed()
Worker_OnlyMessageLib
error Worker_OnlyMessageLib()
Worker_RoleRenouncingDisabled
error Worker_RoleRenouncingDisabled()
creation bytecode
0x608060405234801561001057600080fd5b50614c73806100206000396000f3fe6080604052600436106102835760003560e01c8063724e78da11610153578063c358de0a116100cb578063cfc325701161007f578063d547741f11610064578063d547741f14610881578063e395eb5c146108a1578063fa34c84e146108ec57600080fd5b8063cfc325701461081c578063d2ae21041461082f57600080fd5b8063c7b2370b116100b0578063c7b2370b146107bc578063c8f8dcd1146107dc578063cd88b903146107fc57600080fd5b8063c358de0a1461076f578063c416aa511461078f57600080fd5b806391d1485411610122578063a217fddf11610107578063a217fddf1461070c578063c015bb7d14610721578063c2803b2c1461074157600080fd5b806391d14854146105dc5780639e9449651461062f57600080fd5b8063724e78da14610569578063741bef1a146105895780637cd44734146105b65780638624ba07146105c957600080fd5b80632f2ff15d11610201578063475b6d9e116101b55780635e280f111161019a5780635e280f11146104d6578063709eb66414610529578063717e8a421461054957600080fd5b8063475b6d9e146104ab5780635c975abb146104be57600080fd5b806336568abe116101e657806336568abe146104585780633927c075146104785780633d85ac331461048b57600080fd5b80632f2ff15d146104185780633146646a1461043857600080fd5b80631095b6d711610258578063248a9ca31161023d578063248a9ca31461038d57806326e67a37146103cb5780632de11376146103f857600080fd5b80631095b6d71461034d57806316c38b3c1461036d57600080fd5b80629fc68114610288578062bf2e80146102aa57806301e33667146102fd57806301ffc9a71461031d575b600080fd5b34801561029457600080fd5b506102a86102a3366004613a59565b61090c565b005b3480156102b657600080fd5b5060c9546102e5907c0100000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561030957600080fd5b506102a8610318366004613afe565b610cab565b34801561032957600080fd5b5061033d610338366004613b3a565b610ce6565b60405190151581526020016102f4565b34801561035957600080fd5b506102a8610368366004613afe565b610d7f565b34801561037957600080fd5b506102a8610388366004613b8a565b610f0e565b34801561039957600080fd5b506103bd6103a8366004613ba7565b60009081526065602052604090206001015490565b6040519081526020016102f4565b3480156103d757600080fd5b506103eb6103e6366004613bd2565b610f33565b6040516102f49190613bef565b34801561040457600080fd5b5061033d610413366004613c36565b610fba565b34801561042457600080fd5b506102a8610433366004613c51565b61109e565b34801561044457600080fd5b506102a8610453366004613cc6565b6110c8565b34801561046457600080fd5b506102a8610473366004613c51565b611191565b6102a8610486366004613d6f565b6111c3565b34801561049757600080fd5b506102a86104a6366004613e4d565b6112ad565b6102a86104b9366004613f55565b611493565b3480156104ca57600080fd5b5060975460ff1661033d565b3480156104e257600080fd5b5061012e546105049073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f4565b34801561053557600080fd5b506103bd610544366004613fd6565b6114e7565b34801561055557600080fd5b506103bd610564366004613fd6565b611640565b34801561057557600080fd5b506102a8610584366004613c36565b6117c6565b34801561059557600080fd5b5060ca546105049073ffffffffffffffffffffffffffffffffffffffff1681565b6102a86105c4366004614047565b611863565b6102a86105d736600461410d565b611a18565b3480156105e857600080fd5b5061033d6105f7366004613c51565b600091825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561063b57600080fd5b506106bf61064a366004613bd2565b61012d602052600090815260409020805460019091015467ffffffffffffffff8083169261ffff68010000000000000000820416926fffffffffffffffffffffffffffffffff6a0100000000000000000000909204821692918116917001000000000000000000000000000000009091041685565b6040805167ffffffffffffffff968716815261ffff90951660208601526fffffffffffffffffffffffffffffffff938416908501529116606083015291909116608082015260a0016102f4565b34801561071857600080fd5b506103bd600081565b34801561072d57600080fd5b506103bd61073c366004614180565b611c2e565b34801561074d57600080fd5b5061012f546105049073ffffffffffffffffffffffffffffffffffffffff1681565b34801561077b57600080fd5b506102a861078a3660046141d3565b611dc2565b34801561079b57600080fd5b5060c9546105049073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107c857600080fd5b506102a86107d7366004613c36565b611e6f565b3480156107e857600080fd5b506103bd6107f7366004614180565b611f0c565b34801561080857600080fd5b506102a86108173660046141ee565b612073565b6102a861082a366004614276565b6120bd565b34801561083b57600080fd5b5060c9546108689074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f4565b34801561088d57600080fd5b506102a861089c366004613c51565b612279565b3480156108ad57600080fd5b5061012e546108d79074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102f4565b3480156108f857600080fd5b506102a8610907366004613c36565b61229e565b60006109367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811661098f5773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103556109b1565b3373ffffffffffffffffffffffffffffffffffffffff8216146109b157600080fd5b600054610100900460ff16158080156109d15750600054600160ff909116105b806109eb5750303b1580156109eb575060005460ff166001145b610a7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610ada57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610ae261238c565b610af18686612ee0878761242d565b61012e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16908117909155604080517f416ecebf000000000000000000000000000000000000000000000000000000008152905163416ecebf916004808201926020929091908290030181865afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bad91906142ab565b61012e80547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff939093169290920291909117905561012f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790558015610ca157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610cd5816124e9565b610ce08484846124f6565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610d7957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610da9816124e9565b73ffffffffffffffffffffffffffffffffffffffff841660009081527fe3a3b2721d010eec8988605a93cd7c15d969808c0e2b42f6155dc2b4fa13c081602052604090205460ff16610e27576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b158015610e9757600080fd5b505af1158015610eab573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b6000610f19816124e9565b8115610f2b57610f27612526565b5050565b610f276125ab565b63ffffffff8116600090815260cb6020908152604091829020805483518184028101840190945280845260609392830182828015610fae57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610f7f5790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081527f0f6a9529577ef7bf1cbc8fccda1cc3c881f755c7e92e34c7c4deac1fa3c1c791602052604081205460ff161561100f57506000919050565b60c95474010000000000000000000000000000000000000000900467ffffffffffffffff161580611084575073ffffffffffffffffffffffffffffffffffffffff821660009081527f35c5067391a9036240763c1067bfa438a7b0131204a675a2fe562dd73782ce85602052604090205460ff165b1561109157506001919050565b506000919050565b919050565b6000828152606560205260409020600101546110b9816124e9565b6110c38383612602565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756110f2816124e9565b6110fa6126c9565b61012f546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f89061115590879087908790600401614311565b600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b50505050610ce0600160fb55565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756111ed816124e9565b6111f56126c9565b611215886112038686612743565b61120d8787612766565b8a8a8a61277f565b5061012f546040517fe65106f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e65106f89061127190879087908790600401614311565b600060405180830381600087803b15801561128b57600080fd5b505af115801561129f573d6000803e3d6000fd5b50505050610ca1600160fb55565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756112d7816124e9565b60005b82518110156114575760008382815181106112f7576112f7614335565b6020908102919091018101516040805160a080820183528385015167ffffffffffffffff908116835260608086015161ffff9081168589019081526080808901516fffffffffffffffffffffffffffffffff908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff16600090815261012d909a5296909820945185549851945188166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff9590921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090991690841617979097179290921695909517825551600191820180549351909516700100000000000000000000000000000000027fffffffffffffffff000000000000000000000000000000000000000000000000909316931692909217179091559190910190506112da565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc53826040516114879190614364565b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756114bd816124e9565b6114c56126c9565b6114d387878787878761277f565b506114de600160fb55565b50505050505050565b6000846114f381610fba565b611529576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115316128f4565b6040805160a08101825260ca5473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a1660208084018290528a831684860152606084018a905260c95461ffff7c01000000000000000000000000000000000000000000000000000000008204166080860152600092835261012d9091529084902093517f434ee016000000000000000000000000000000000000000000000000000000008152929391169163434ee016916115f3918591908a908a9060040161440b565b602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906144c9565b98975050505050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61166c816124e9565b8561167681610fba565b6116ac576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b46128f4565b6040805160a08101825260ca5473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8b1660208084018290528b831684860152606084018b905260c95461ffff7c01000000000000000000000000000000000000000000000000000000008204166080860152600092835261012d9091529084902093517f566ef762000000000000000000000000000000000000000000000000000000008152929391169163566ef76291611776918591908b908b9060040161440b565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b991906144c9565b9998505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756117f0816124e9565b60ca80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001611487565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561188d816124e9565b6118956126c9565b61012e546040517f91d20fa100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906391d20fa190849034906118fe908f908f908f908f908f908f908f908f906004016144e2565b6000604051808303818589803b15801561191757600080fd5b5088f1945050505050801561192a575060015b611a02573d808015611958576040519150601f19603f3d011682016040523d82523d6000602084013e61195d565b606091505b5061012e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663697fe6b68c8c8c8c88348e8e8e8e8c6040518c63ffffffff1660e01b81526004016119ce9b9a999897969594939291906145bc565b600060405180830381600087803b1580156119e857600080fd5b505af11580156119fc573d6000803e3d6000fd5b50505050505b611a0c600160fb55565b50505050505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a42816124e9565b611a4a6126c9565b61012e54600090611a8a90602085019074010000000000000000000000000000000000000000900463ffffffff16611a828287613c36565b89898961277f565b90506000611a98823461467e565b61012e5490915073ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e08601358360208801611ace818a613c36565b60808a0135611ae060a08c018c614691565b611aed60c08e018e614691565b6040518a63ffffffff1660e01b8152600401611b0f9796959493929190614732565b6000604051808303818589803b158015611b2857600080fd5b5088f19450505050508015611b3b575060015b611c1b573d808015611b69576040519150601f19603f3d011682016040523d82523d6000602084013e611b6e565b606091505b5061012e5473ffffffffffffffffffffffffffffffffffffffff16636bf73fa360208701611b9c8189613c36565b608089013560e08a013587611bb460a08d018d614691565b611bc160c08f018f614691565b8b6040518b63ffffffff1660e01b8152600401611be79a99989796959493929190614796565b600060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b50505050505b5050611c27600160fb55565b5050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611c5a816124e9565b84611c6481610fba565b611c9a576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ca26128f4565b6040805160608101825260ca5473ffffffffffffffffffffffffffffffffffffffff908116825288811660208084019190915260c9547c0100000000000000000000000000000000000000000000000000000000810461ffff168486015261012e5474010000000000000000000000000000000000000000900463ffffffff16600090815261012d9092529084902093517f650037840000000000000000000000000000000000000000000000000000000081529293911691636500378491611d74918591908b908b90600401614822565b6020604051808303816000875af1158015611d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db791906144c9565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611dec816124e9565b60c980547fffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611487565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e99816124e9565b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611487565b600083611f1881610fba565b611f4e576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f566128f4565b6040805160608101825260ca5473ffffffffffffffffffffffffffffffffffffffff908116825287811660208084019190915260c9547c0100000000000000000000000000000000000000000000000000000000810461ffff168486015261012e5474010000000000000000000000000000000000000000900463ffffffff16600090815261012d9092529084902093517f337c7a9e000000000000000000000000000000000000000000000000000000008152929391169163337c7a9e91612028918591908a908a90600401614822565b602060405180830381865afa158015612045573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206991906144c9565b9695505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209d816124e9565b63ffffffff8416600090815260cb60205260409020611c27908484613836565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756120e7816124e9565b6120ef6126c9565b61012e5473ffffffffffffffffffffffffffffffffffffffff16630c0c389e60e084013534602086016121228188613c36565b608088013561213460a08a018a614691565b61214160c08c018c614691565b6040518a63ffffffff1660e01b81526004016121639796959493929190614732565b6000604051808303818589803b15801561217c57600080fd5b5088f1945050505050801561218f575060015b61226f573d8080156121bd576040519150601f19603f3d011682016040523d82523d6000602084013e6121c2565b606091505b5061012e5473ffffffffffffffffffffffffffffffffffffffff16636bf73fa3602085016121f08187613c36565b608087013560e08801353461220860a08b018b614691565b61221560c08d018d614691565b8b6040518b63ffffffff1660e01b815260040161223b9a99989796959493929190614796565b600060405180830381600087803b15801561225557600080fd5b505af1158015612269573d6000803e3d6000fd5b50505050505b610f27600160fb55565b600082815260656020526040902060010154612294816124e9565b6110c38383612961565b60006122c87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff81166123215773ffffffffffffffffffffffffffffffffffffffff7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355612343565b3373ffffffffffffffffffffffffffffffffffffffff82161461234357600080fd5b5061012f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff16612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a73565b61242b612a27565b565b600054610100900460ff166124c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a73565b6124cc612abe565b6124d4612abe565b6124dc612b55565b611c278585858585612c16565b6124f38133612dfb565b50565b73ffffffffffffffffffffffffffffffffffffffff831661251b576110c38282612eb5565b6110c3838383612fbb565b61252e6128f4565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586125813390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6125b3613029565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612581565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca821480156126615750600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156126bf5760c980546014906126989074010000000000000000000000000000000000000000900467ffffffffffffffff166148d3565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b610f278282613095565b600260fb5403612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a73565b600260fb55565b600160fb55565b60006127536031602d84866148fa565b61275c91614924565b60e01c9392505050565b60006127786127758484613189565b90565b9392505050565b6000808367ffffffffffffffff81111561279b5761279b613918565b6040519080825280602002602001820160405280156127c4578160200160208202803683370190505b50905060005b848110156128a75760008686838181106127e6576127e6614335565b9050604002018036038101906127fc919061496c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1682602001518790604051600060405180830381858888f193505050503d8060008114612863576040519150601f19603f3d011682016040523d82523d6000602084013e612868565b606091505b505090508084848151811061287f5761287f614335565b91151560209283029190910182015282015161289b90866149c3565b945050506001016127ca565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c34688888888888866040516128e196959493929190614a14565b60405180910390a1509695505050505050565b60975460ff161561242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a73565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca821480156129bf5750600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff165b15612a1d5760c980546014906129f69074010000000000000000000000000000000000000000900467ffffffffffffffff16614aa6565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b610f2782826131a2565b600054610100900460ff1661273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a73565b600054610100900460ff1661242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a73565b600054610100900460ff16612bec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a73565b609780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600054610100900460ff16612cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a73565b60c980547fffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000061ffff86160217905560ca80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691909117909155821615612d5157612d51600083612602565b60005b8551811015612da857612da07f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110612d9357612d93614335565b6020026020010151612602565b600101612d54565b5060005b8151811015612df357612deb7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110612d9357612d93614335565b600101612dac565b505050505050565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f2757612e3b8161325d565b612e4683602061327c565b604051602001612e57929190614ae8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610a7391600401614b69565b73ffffffffffffffffffffffffffffffffffffffff8216612f02576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612f5c576040519150601f19603f3d011682016040523d82523d6000602084013e612f61565b606091505b50509050806110c3576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610a73565b73ffffffffffffffffffffffffffffffffffffffff8216613008576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110c373ffffffffffffffffffffffffffffffffffffffff841683836134bf565b60975460ff1661242b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a73565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f2757600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561312b3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006131996051603184866148fa565b61277891614b7c565b600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610f2757600082815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6060610d7973ffffffffffffffffffffffffffffffffffffffff831660145b6060600061328b836002614bb8565b6132969060026149c3565b67ffffffffffffffff8111156132ae576132ae613918565b6040519080825280601f01601f1916602001820160405280156132d8576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061330f5761330f614335565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061337257613372614335565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006133ae846002614bb8565b6133b99060016149c3565b90505b6001811115613456577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106133fa576133fa614335565b1a60f81b82828151811061341057613410614335565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361344f81614bcf565b90506133bc565b508315612778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a73565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526110c39286929160009161358a918516908490613637565b90508051600014806135ab5750808060200190518101906135ab9190614c04565b6110c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a73565b6060613646848460008561364e565b949350505050565b6060824710156136e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a73565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516137099190614c21565b60006040518083038185875af1925050503d8060008114613746576040519150601f19603f3d011682016040523d82523d6000602084013e61374b565b606091505b5091509150611db787838387606083156137ed5782516000036137e65773ffffffffffffffffffffffffffffffffffffffff85163b6137e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a73565b5081613646565b61364683838151156138025781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739190614b69565b82805482825590600052602060002090601f016020900481019282156138cf5791602002820160005b838211156138a057833560ff1683826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261385f565b80156138cd5782816101000a81549060ff02191690556001016020816000010492830192600103026138a0565b505b506138db9291506138df565b5090565b5b808211156138db57600081556001016138e0565b803573ffffffffffffffffffffffffffffffffffffffff8116811461109957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561396a5761396a613918565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139b7576139b7613918565b604052919050565b600067ffffffffffffffff8211156139d9576139d9613918565b5060051b60200190565b600082601f8301126139f457600080fd5b81356020613a09613a04836139bf565b613970565b8083825260208201915060208460051b870101935086841115613a2b57600080fd5b602086015b84811015613a4e57613a41816138f4565b8352918301918301613a30565b509695505050505050565b60008060008060008060c08789031215613a7257600080fd5b613a7b876138f4565b9550613a89602088016138f4565b9450604087013567ffffffffffffffff80821115613aa657600080fd5b613ab28a838b016139e3565b9550613ac060608a016138f4565b9450613ace60808a016138f4565b935060a0890135915080821115613ae457600080fd5b50613af189828a016139e3565b9150509295509295509295565b600080600060608486031215613b1357600080fd5b613b1c846138f4565b9250613b2a602085016138f4565b9150604084013590509250925092565b600060208284031215613b4c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461277857600080fd5b80151581146124f357600080fd5b600060208284031215613b9c57600080fd5b813561277881613b7c565b600060208284031215613bb957600080fd5b5035919050565b63ffffffff811681146124f357600080fd5b600060208284031215613be457600080fd5b813561277881613bc0565b6020808252825182820181905260009190848201906040850190845b81811015613c2a57835160ff1683529284019291840191600101613c0b565b50909695505050505050565b600060208284031215613c4857600080fd5b612778826138f4565b60008060408385031215613c6457600080fd5b82359150613c74602084016138f4565b90509250929050565b60008083601f840112613c8f57600080fd5b50813567ffffffffffffffff811115613ca757600080fd5b602083019150836020828501011115613cbf57600080fd5b9250929050565b600080600060408486031215613cdb57600080fd5b833567ffffffffffffffff811115613cf257600080fd5b613cfe86828701613c7d565b909790965060209590950135949350505050565b600060608284031215613d2457600080fd5b50919050565b60008083601f840112613d3c57600080fd5b50813567ffffffffffffffff811115613d5457600080fd5b6020830191508360208260061b8501011115613cbf57600080fd5b600080600080600080600060e0888a031215613d8a57600080fd5b613d948989613d12565b9650606088013567ffffffffffffffff80821115613db157600080fd5b613dbd8b838c01613d2a565b909850965060808a0135955060a08a0135915080821115613ddd57600080fd5b50613dea8a828b01613c7d565b989b979a5095989497959660c090950135949350505050565b803567ffffffffffffffff8116811461109957600080fd5b803561ffff8116811461109957600080fd5b80356fffffffffffffffffffffffffffffffff8116811461109957600080fd5b60006020808385031215613e6057600080fd5b823567ffffffffffffffff811115613e7757600080fd5b8301601f81018513613e8857600080fd5b8035613e96613a04826139bf565b81815260c09182028301840191848201919088841115613eb557600080fd5b938501935b83851015613f495780858a031215613ed25760008081fd5b613eda613947565b8535613ee581613bc0565b8152613ef2868801613e03565b878201526040613f03818801613e03565b908201526060613f14878201613e1b565b908201526080613f25878201613e2d565b9082015260a0613f36878201613e2d565b9082015283529384019391850191613eba565b50979650505050505050565b60008060008060008060e08789031215613f6e57600080fd5b613f788888613d12565b95506060870135613f8881613bc0565b9450613f96608088016138f4565b935060a087013567ffffffffffffffff811115613fb257600080fd5b613fbe89828a01613d2a565b979a969950949794969560c090950135949350505050565b600080600080600060808688031215613fee57600080fd5b8535613ff981613bc0565b9450614007602087016138f4565b935060408601359250606086013567ffffffffffffffff81111561402a57600080fd5b61403688828901613c7d565b969995985093965092949392505050565b600080600080600080600080600060e08a8c03121561406557600080fd5b61406e8a6138f4565b985061407c60208b016138f4565b975060408a0135965061409160608b01613e1b565b955060808a013567ffffffffffffffff808211156140ae57600080fd5b6140ba8d838e01613c7d565b909750955060a08c01359150808211156140d357600080fd5b506140e08c828d01613c7d565b9a9d999c50979a9699959894979660c00135949350505050565b60006101008284031215613d2457600080fd5b6000806000806060858703121561412357600080fd5b843567ffffffffffffffff8082111561413b57600080fd5b61414788838901613d2a565b909650945060208701359350604087013591508082111561416757600080fd5b50614174878288016140fa565b91505092959194509250565b60008060006040848603121561419557600080fd5b61419e846138f4565b9250602084013567ffffffffffffffff8111156141ba57600080fd5b6141c686828701613c7d565b9497909650939450505050565b6000602082840312156141e557600080fd5b61277882613e1b565b60008060006040848603121561420357600080fd5b833561420e81613bc0565b9250602084013567ffffffffffffffff8082111561422b57600080fd5b818601915086601f83011261423f57600080fd5b81358181111561424e57600080fd5b8760208260051b850101111561426357600080fd5b6020830194508093505050509250925092565b60006020828403121561428857600080fd5b813567ffffffffffffffff81111561429f57600080fd5b613646848285016140fa565b6000602082840312156142bd57600080fd5b815161277881613bc0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006143256040830185876142c8565b9050826020830152949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b828110156143fe578151805163ffffffff1685528681015167ffffffffffffffff9081168887015286820151168686015260608082015161ffff16908601526080808201516fffffffffffffffffffffffffffffffff9081169187019190915260a091820151169085015260c09093019290850190600101614381565b5091979650505050505050565b845173ffffffffffffffffffffffffffffffffffffffff908116825260208087015163ffffffff1690830152604080870151909116818301526060808701519083015260808087015161ffff90811682850152865467ffffffffffffffff80821660a08701529381901c90911660c085015260501c6fffffffffffffffffffffffffffffffff90811660e08501526001870154908116610100850152901c16610120820152600061016080610140840152611db781840185876142c8565b6000602082840312156144db57600080fd5b5051919050565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525087604083015261ffff8716606083015260c0608083015261452c60c0830186886142c8565b82810360a084015261453f8185876142c8565b9b9a5050505050505050505050565b60005b83811015614569578181015183820152602001614551565b50506000910152565b6000815180845261458a81602086016020860161454e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600061012073ffffffffffffffffffffffffffffffffffffffff808f168452808e166020850152508b604084015261ffff8b1660608401528960808401528860a08401528060c0840152614613818401888a6142c8565b905082810360e08401526146288186886142c8565b905082810361010084015261463d8185614572565b9e9d5050505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610d7957610d7961464f565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126146c657600080fd5b83018035915067ffffffffffffffff8211156146e157600080fd5b602001915036819003821315613cbf57600080fd5b803561470181613bc0565b63ffffffff1682526020818101359083015267ffffffffffffffff61472860408301613e03565b1660408301525050565b61473c81896146f6565b73ffffffffffffffffffffffffffffffffffffffff8716606082015285608082015260e060a0820152600061477560e0830186886142c8565b82810360c08401526147888185876142c8565b9a9950505050505050505050565b60006101406147a5838e6146f6565b73ffffffffffffffffffffffffffffffffffffffff8c1660608401528a60808401528960a08401528860c08401528060e08401526147e6818401888a6142c8565b90508281036101008401526147fc8186886142c8565b90508281036101208401526148118185614572565b9d9c50505050505050505050505050565b600061012073ffffffffffffffffffffffffffffffffffffffff8088511684528060208901511660208501525061ffff60408801511660408401526148bf6060840187805467ffffffffffffffff808216845261ffff8260401c1660208501526fffffffffffffffffffffffffffffffff808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b80610100840152611db781840185876142c8565b600067ffffffffffffffff8083168181036148f0576148f061464f565b6001019392505050565b6000808585111561490a57600080fd5b8386111561491757600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156149645780818660040360031b1b83161692505b505092915050565b60006040828403121561497e57600080fd5b6040516040810181811067ffffffffffffffff821117156149a1576149a1613918565b6040526149ad836138f4565b8152602083013560208201528091505092915050565b80820180821115610d7957610d7961464f565b60008151808452602080850194506020840160005b83811015614a095781511515875295820195908201906001016149eb565b509495945050505050565b600060e08201614a24838a6146f6565b63ffffffff8816606084015273ffffffffffffffffffffffffffffffffffffffff878116608085015260e060a0850152908590528590610100840160005b87811015614a935782614a74856138f4565b1682526020848101359083015260409384019390910190600101614a62565b5084810360c086015261453f81876149d6565b600067ffffffffffffffff821680614ac057614ac061464f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614b2081601785016020880161454e565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614b5d81602884016020880161454e565b01602801949350505050565b6020815260006127786020830184614572565b80356020831015610d79577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b8082028115828204841417610d7957610d7961464f565b600081614bde57614bde61464f565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600060208284031215614c1657600080fd5b815161277881613b7c565b60008251614c3381846020870161454e565b919091019291505056fea2646970667358221220a37e2888a46667ffc638ad92d3c98f50b8b8950a768deacaaa3f876dede027c364736f6c63430008160033