199 txs
951 calls
constructor
constructor(address owner, string chain_)
functions
chain
viewfunction chain() view returns (string)
checkOrderInfo
viewfunction checkOrderInfo(tuple orderInfo) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
EXPIRATION
viewfunction EXPIRATION() view returns (uint256)
getOrderHash
viewfunction getOrderHash(uint256 idx) view returns (bytes32)
getOrderHashLength
viewfunction getOrderHashLength() view returns (uint256)
getOrderHashs
viewfunction getOrderHashs() view returns (bytes32[])
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSwapRequest
viewfunction getSwapRequest(bytes32 orderHash) view returns (tuple)
getTakerAddresses
viewfunction getTakerAddresses() view returns (string[] receivers, string[] senders)
getWhiteListToken
viewfunction getWhiteListToken(uint256 nonce) view returns (tuple token)
getWhiteListTokenLength
viewfunction getWhiteListTokenLength() view returns (uint256)
getWhiteListTokens
viewfunction getWhiteListTokens() view returns (tuple[] tokens)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAKER_ROLE
viewfunction MAKER_ROLE() view returns (bytes32)
MAX_MARKER_CONFIRM_DELAY
viewfunction MAX_MARKER_CONFIRM_DELAY() view returns (uint256)
paused
viewfunction paused() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TAKER_ROLE
viewfunction TAKER_ROLE() view returns (bytes32)
takerReceivers
viewfunction takerReceivers(uint256) view returns (string)
takerSenders
viewfunction takerSenders(uint256) view returns (string)
whiteListTokens
viewfunction whiteListTokens(bytes32) view returns (string chain, string symbol, string addr, uint8 decimals, uint256 amount)
addSwapRequest
nonpayablefunction addSwapRequest(tuple orderInfo, bool inByContract, bool outByContract)
addWhiteListTokens
nonpayablefunction addWhiteListTokens(tuple[] tokens)
cancelSwapRequest
nonpayablefunction cancelSwapRequest(tuple orderInfo)
confirmSwapRequest
nonpayablefunction confirmSwapRequest(tuple orderInfo, bytes[] inTxHashs)
forceCancelSwapRequest
nonpayablefunction forceCancelSwapRequest(tuple orderInfo)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
makerConfirmSwapRequest
nonpayablefunction makerConfirmSwapRequest(tuple orderInfo, bytes[] outTxHashs)
makerRejectSwapRequest
nonpayablefunction makerRejectSwapRequest(tuple orderInfo)
pause
nonpayablefunction pause()
removeWhiteListTokens
nonpayablefunction removeWhiteListTokens(tuple[] tokens)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackSwapRequest
nonpayablefunction rollbackSwapRequest(tuple orderInfo)
setTakerAddresses
nonpayablefunction setTakerAddresses(string[] takerReceivers_, string[] takerSenders_)
unpause
nonpayablefunction unpause()
events
AddSwapRequest
event AddSwapRequest(address indexed taker, bool inByContract, bool outByContract, ((string chain, address maker, uint256 nonce, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] inTokenset, (string chain, string symbol, string addr, uint8 decimals, uint256 amount)[] outTokenset, string[] inAddressList, string[] outAddressList, uint256 inAmount, uint256 outAmount, uint256 deadline, address requester) order, bytes32 orderHash, bytes orderSign) orderInfo)
AddWhiteListToken
event AddWhiteListToken((string chain, string symbol, string addr, uint8 decimals, uint256 amount) token)
CancelSwapRequest
event CancelSwapRequest(address indexed taker, bytes32 orderHash)
ConfirmSwapRequest
event ConfirmSwapRequest(address indexed taker, bytes32 orderHash)
ForceCancelSwapRequest
event ForceCancelSwapRequest(bytes32 orderHash)
MakerConfirmSwapRequest
event MakerConfirmSwapRequest(address indexed maker, bytes32 orderHash)
MakerRejectSwapRequest
event MakerRejectSwapRequest(address indexed maker, bytes32 orderHash)
Paused
event Paused(address account)
RemoveWhiteListToken
event RemoveWhiteListToken((string chain, string symbol, string addr, uint8 decimals, uint256 amount) token)
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)
RollbackSwapRequest
event RollbackSwapRequest(address indexed taker, bytes32 orderHash)
SetTakerAddresses
event SetTakerAddresses(string[] receivers, string[] senders)
Unpaused
event Unpaused(address account)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60806040523461022257613f9d8038038061001981610226565b928339810190604081830312610222578051906001600160a01b0382168203610222576020810151906001600160401b03821161022257019082601f830112156102225781516001600160401b03811161020e57610080601f8201601f1916602001610226565b9381855260208285010111610222576020815f92826100b196018388015e8501015260ff196001541660015561024b565b5080516001600160401b03811161020e57600254600181811c91168015610204575b60208210146101f057601f811161018d575b50602091601f821160011461012d579181925f92610122575b50508160011b915f199060031b1c1916176002555b604051613ca890816102d58239f35b015190505f806100fe565b601f1982169260025f52805f20915f5b8581106101755750836001951061015d575b505050811b01600255610113565b01515f1960f88460031b161c191690555f808061014f565b9192602060018192868501518155019401920161013d565b60025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f830160051c810191602084106101e6575b601f0160051c01905b8181106101db57506100e5565b5f81556001016101ce565b90915081906101c5565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100d3565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761020e57604052565b6001600160a01b0381165f9081525f516020613f7d5f395f51905f52602052604090205460ff166102cf576001600160a01b03165f8181525f516020613f7d5f395f51905f5260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f9056fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714611fd457508063020641ac14611e1c57806305e0a9b514611dff57806318b5477a14611acc578063248a9ca314611aa25780632f2ff15d14611a6557806333abcb7014611a48578063347b42311461191357806336568abe146118cf5780633dd4bab31461189c5780633f4ba83a1461183657806348193a8714611753578063500a217c1461153c5780635489583c146114fa578063577bcce5146113d55780635c975abb146113b35780637b66e189146112fd5780637c3311701461102a5780638456cb5914610fd25780638582a84c14610ee257806391d1485414610e9a578063a217fddf14610e80578063a38a938f14610e09578063a4a85ee614610c9b578063b983456a14610929578063b9f0d68e14610887578063bb4b57341461086b578063bd32961b146107b5578063c72c5be214610698578063c763e5a114610656578063c8eff9ed1461061c578063d547741f146105d8578063dd4eddd414610438578063e22ae4cd146102c3578063e477a5711461020d578063f65de94a146101d35763faa5042a146101b3575f80fd5b346101cf575f3660031901126101cf576020604051610e108152f35b5f80fd5b346101cf575f3660031901126101cf5760206040517f508ee82d0bdf04e000303ab4f02b172e60c5f2d35b2e559b05bed2cf403bb58b8152f35b346101cf575f3660031901126101cf576040518060206003549283815201809260035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f5b8181106102ad575050508161026b91038261205e565b604051918291602083019060208452518091526040830191905f5b818110610294575050500390f35b8251845285945060209384019390920191600101610286565b8254845260209093019260019283019201610255565b346101cf5760203660031901126101cf575f60e06040516102e381612027565b60608152606060208201528260408201528260608201528260808201528260a08201528260c082015201526004355f52600560205260405f206040519061032982612027565b610332816127f6565b8252610340600182016127f6565b6020830190815260028201549160408401919060ff84166007811015610424578352606085019360018060a01b038160081c1685526080860160ff8260a81c161515815260ff60a088019260b01c16151582526103e1600460038501549460c08a0195865201549460e089019586526103ce6040519960208b525161010060208c01526101208b01906126ef565b9051898203601f190160408b01526126ef565b9451956007871015610424578796606088015260018060a01b03905116608087015251151560a086015251151560c08501525160e0840152516101008301520390f35b634e487b7160e01b5f52602160045260245ffd5b346101cf5760203660031901126101cf576004356001600160401b0381116101cf5761046a60209136906004016122bd565b610472612f61565b61047a613077565b61048381613092565b0151805f5260056020526104aa60018060a01b03600260405f20015460081c1633146128d3565b805f52600560205260ff600260405f2001541660078110156104245760020361058057805f52600560205260ff600260405f20015460b01c1661053b575f8181526005602090815260409182902060028101805460ff1916600117905543600390910155905191825233917f687ac0baa99a9d73568a904a4f9b4682a4c56fdb2baf4f9d38547a09056c86079190a2005b60405162461bcd60e51b815260206004820152601f60248201527f6f757420627920636f6e74726163742063616e6e6f7420726f6c6c6261636b006044820152606490fd5b60405162461bcd60e51b815260206004820152602a60248201527f73776170207265717565737420737461747573206973206e6f74206d616b657260448201526917d8dbdb999a5c9b595960b21b6064820152608490fd5b346101cf5760403660031901126101cf5761061a6004356105f76120de565b90610615610610825f525f602052600160405f20015490565b61303f565b61349b565b005b346101cf575f3660031901126101cf5760206040517f70d8f6b4dfca278d41482e0778a0bf123d87b86b23b71cc0ef42c2f082e8053a8152f35b346101cf575f3660031901126101cf576106946040516106808161067981612590565b038261205e565b6040519182916020835260208301906126cb565b0390f35b346101cf575f3660031901126101cf576009546106b481612108565b906106c2604051928361205e565b8082526106d1601f1991612108565b015f5b81811061079e57825f5b815181101561078857806106f360019261252b565b90549060031b1c5f52600b60205260405f2060046040519161071483612043565b60405161072581610679818561262f565b835260405161073a816106798189860161262f565b602084015260405161075381610679816002860161262f565b604084015260ff60038201541660608401520154608082015261077682856129a7565b5261078181846129a7565b50016106de565b604051602080825281906106949082018561279e565b6020906107a9612e0d565b828286010152016106d4565b346101cf5760203660031901126101cf576004355f52600b60205261084060405f20604051906107f0826107e9818461262f565b038361205e565b60405161080481610679816001860161262f565b61085c60405161081b81610679816002880161262f565b61084e600460ff6003870154169501549360405197889760a0895260a08901906126cb565b9087820360208901526126cb565b9085820360408701526126cb565b91606084015260808301520390f35b346101cf575f3660031901126101cf5760206040516154608152f35b346101cf5760203660031901126101cf576004356003548110156108f5576003548110156108e15760035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0154604051908152602090f35b634e487b7160e01b5f52603260045260245ffd5b60405162461bcd60e51b815260206004820152600c60248201526b6f7574206f662072616e676560a01b6044820152606490fd5b346101cf5761093736612453565b61093f612fd0565b610947613077565b61095082613092565b602082015191825f52600560205260405f206040519061096f82612027565b610978816127f6565b8252610986600182016127f6565b6020830152600281015491604081019160ff841660078110156104245760e091600491855260018060a01b038660081c16606085015260ff8660a81c161515608085015260ff60a085019660b01c1615158652600381015460c08501520154910152610a0060018060a01b03602085510151163314612a7e565b516007811015610424576001610a169114612911565b5115610a9357610a3a91505160808101519060c06101008201519101519133613152565b805f526005602052600260405f2001600260ff19825416179055805f52600560205243600360405f2001556040519081527fa62d33d023f8a43030ca7ac80fe4f281147d0f38b3d70fe070a1738424de470f60203392a2005b516080015151815103610c5657815f526005602052600160405f200190805190600160401b8211610bcb578254828455808310610bdf575b50602001915f5260205f20915f905b828210610aea5750505050610a3a565b80518051906001600160401b038211610bcb57610b1182610b0b8854612558565b88612962565b602090601f8311600114610b625792610b48836001959460209487965f92610b57575b50508160011b915f199060031b1c19161790565b87555b01940191019092610ada565b015190508b80610b34565b90601f19831691875f52815f20925f5b818110610bb35750936020936001969387969383889510610b9b575b505050811b018755610b4b565b01515f1960f88460031b161c191690558a8080610b8e565b92936020600181928786015181550195019301610b72565b634e487b7160e01b5f52604160045260245ffd5b835f528260205f2091820191015b818110610bfa5750610acb565b80610c0760019254612558565b80610c14575b5001610bed565b601f81118314610c2957505f81555b87610c0d565b610c4590825f5283601f60205f20920160051c8201910161294c565b805f525f6020812081835555610c23565b60405162461bcd60e51b815260206004820152601760248201527f77726f6e67206f757454784861736873206c656e6774680000000000000000006044820152606490fd5b346101cf5760203660031901126101cf576004356001600160401b0381116101cf57610ccd60209136906004016122bd565b610cd5612f61565b610cdd613077565b610ce681613092565b0151805f526005602052610d0d60018060a01b03600260405f20015460081c1633146128d3565b805f52600560205260ff600260405f200154166007811015610424576001610d359114612abc565b805f526005602052600460405f200154610e108101809111610df5574210610db057805f526005602052600260405f2001600560ff19825416179055805f52600560205243600360405f2001556040519081527fe8ba3f3f3a6d41466268c349d9f92c9f88c057d168743198d5d5b28112a6495260203392a2005b60405162461bcd60e51b815260206004820152601860248201527f737761702072657175657374206e6f742074696d656f757400000000000000006044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b346101cf5760203660031901126101cf576004356008548110156101cf576008548110156108e15760085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee301610679610680610694926040519283809261262f565b634e487b7160e01b5f525f60045260245ffd5b346101cf575f3660031901126101cf5760206040515f8152f35b346101cf5760403660031901126101cf57610eb36120de565b6004355f525f60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b346101cf5760203660031901126101cf576004356001600160401b0381116101cf57610f1290369060040161211f565b610f1a612f12565b5f5b815181101561061a5780610f3b610f35600193856129a7565b5161342a565b610f4481613a5a565b610f50575b5001610f1c565b5f52600b6020525f600460408220610f6781612ec4565b610f72858201612ec4565b610f7e60028201612ec4565b82600382015501557f322eb65de8ac88004dcdd926eca55e4a24ac3552ff6599c572ef65955c077ffa610fc9610fb483866129a7565b51604051918291602083526020830190612747565b0390a183610f49565b346101cf575f3660031901126101cf57610fea612f12565b610ff2613077565b600160ff19815416176001557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346101cf5760403660031901126101cf576004356001600160401b0381116101cf5761105a90369060040161223f565b6024356001600160401b0381116101cf5761107990369060040161223f565b90611082612f12565b5f5b6007548110156110b157806110a361109d600193612513565b50612e3a565b805460ff1916905501611084565b506007545f600755806112b4575b505f5b8151811015611124576110d581836129a7565b5190600754600160401b811015610bcb578060016110f892016007556007612543565b610e6d57600192611108916129bb565b61111461109d82612513565b805460ff191683179055016110c2565b826008545f6008558061126b575b505f5b81518110156111815761114881836129a7565b5190600854600160401b811015610bcb5780600161116b92016008556008612543565b610e6d5760019261117b916129bb565b01611135565b60405160408101906040815260075480925260608101602060408460051b840101019260075f5260205f20915f905b82821061123d5785858082036020820152600854808352602083019060208160051b8501019360085f5260205f20925f915b838310611211577fcd8f5b01816ea1fd62930707db3b2e211841775baab35b28e1486e279cff237d86880387a1005b90919293956020600161122e8193601f198682030187528a61262f565b980193019301919392906111e2565b909192946020600161125d8193601f19603f198a8303010186528961262f565b9701920192019092916111b0565b60085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3908101905b8181106112a25750611132565b806112ae600192612ec4565b01611295565b60075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688908101905b8181106112eb57506110bf565b806112f7600192612ec4565b016112de565b346101cf5760203660031901126101cf57611316612e0d565b5061132260043561252b565b90549060031b1c5f52600b60205261069460405f2060046040519161134683612043565b60405161135781610679818561262f565b835260405161136d81610679816001860161262f565b602084015260405161138681610679816002860161262f565b604084015260ff600382015416606084015201546080820152604051918291602083526020830190612747565b346101cf575f3660031901126101cf57602060ff600154166040519015158152f35b346101cf575f3660031901126101cf576007546113f181612108565b906113ff604051928361205e565b80825260075f9081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688602084015b8383106114d5576008548561144282612108565b91611450604051938461205e565b80835260085f9081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3602085015b8383106114b0576114a285610694886040519384936040855260408501906126ef565b9083820360208501526126ef565b6001602081926040516114c781610679818961262f565b81520192019201919061147f565b6001602081926040516114ec81610679818961262f565b81520192019201919061142e565b346101cf5760203660031901126101cf576004356001600160401b0381116101cf5761153461152f60209236906004016122bd565b612bcf565b604051908152f35b346101cf5760603660031901126101cf576004356001600160401b0381116101cf5761156c9036906004016122bd565b60243590811515908183036101cf5760443591821515918284036101cf57611592612f61565b61159a613077565b6115a381612bcf565b61171c576040817feaac43431372830ccf7467860567859497968b38eef5801eedccff85ec29f8749560206116e394019788515f5260056020526002845f2001600160ff1982541617905588515f5260056020526002845f20018054610100600160a81b033360081b1690610100600160a81b03191617905561162689516139d0565b50611702575b6116e8575b86515f5260056020526002825f2001805460ff60a81b8660a81b169060ff60a81b191617905586515f5260056020526002825f2001805460ff60b01b8760b01b169060ff60b01b191617905586515f526005602052436003835f20015586515f526005602052426004835f2001558151948594855260208501526060828501526116c6815160608087015260c0860190612b13565b965160808501520151828603605f190160a08401523395906126cb565b0390a2005b6116fd815160c060808201519101519061351b565b611631565b611717825160a060608201519101519061351b565b61162c565b60405162461bcd60e51b815260206004820152600f60248201526e1bdc99195c881b9bdd081d985b1a59608a1b6044820152606490fd5b346101cf5760203660031901126101cf576004356001600160401b0381116101cf576117839036906004016122bd565b61178b612fd0565b611793613077565b61179c81613092565b602081810151915101516117ba906001600160a01b03163314612a7e565b805f52600560205260ff600260405f2001541660078110156104245760016117e29114612abc565b5f8181526005602090815260409182902060028101805460ff1916600417905543600390910155905191825233917fbc45fa33776297b698cb5875e39f4c323b19038dcb08d5edde4dbf094bb7a04e9190a2005b346101cf575f3660031901126101cf5761184e612f12565b60015460ff81161561188d5760ff19166001557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b346101cf5760203660031901126101cf576004356007548110156101cf576106806118c961069492612513565b906126b0565b346101cf5760403660031901126101cf576118e86120de565b336001600160a01b038216036119045761061a9060043561349b565b63334bd91960e11b5f5260045ffd5b346101cf5760203660031901126101cf576004356001600160401b0381116101cf5761194390369060040161211f565b61194b612f12565b5f5b815181101561061a5780611966610f35600193856129a7565b61196f81613965565b61197b575b500161194d565b61199b61198883866129a7565b5151825f52600b60205260405f206129bb565b6119c060206119aa84876129a7565b510151825f52600b6020528460405f20016129bb565b6119e660406119cf84876129a7565b510151825f52600b602052600260405f20016129bb565b60ff60606119f484876129a7565b51015116905f52600b602052600360405f20019060ff198254161790557f4f251df180e16a8fe86d46ef086c56fb1f8718248a2c33105c1e5d1d5cae5f1f611a3f610fb483866129a7565b0390a183611974565b346101cf575f3660031901126101cf576020600954604051908152f35b346101cf5760403660031901126101cf5761061a600435611a846120de565b90611a9d610610825f525f602052600160405f20015490565b6133a2565b346101cf5760203660031901126101cf5760206115346004355f525f602052600160405f20015490565b346101cf57611ada36612453565b611ae2612f61565b611aea613077565b611af382613092565b602082015191825f52600560205260405f20604051611b1181612027565b611b1a826127f6565b8152611b28600183016127f6565b602082015260028201549160ff8316906040830192600783101561042457611b9592845260e0600460018060a01b038760081c169384606085015260ff6080850198818160a81c1615158a5260b01c16151560a0850152600381015460c0850152015491015233146128d3565b516007811015610424576002611bab9114612911565b5115611c2757611bce91505160608101519060a060e08201519101519133613152565b805f526005602052600260405f2001600360ff19825416179055805f52600560205243600360405f2001556040519081527f787f54b5701ae8d92f5fe167c9046362bd2d16ecabd8a2eb01ac5e0e90ff159560203392a2005b516060015151815103611dc157815f52600560205260405f2090805190600160401b8211610bcb578254828455808310611d4a575b50602001915f5260205f20915f905b828210611c7b5750505050611bce565b80518051906001600160401b038211610bcb57611c9c82610b0b8854612558565b602090601f8311600114611ce15792611cd2836001959460209487965f92610b575750508160011b915f199060031b1c19161790565b87555b01940191019092611c6b565b90601f19831691875f52815f20925f5b818110611d325750936020936001969387969383889510611d1a575b505050811b018755611cd5565b01515f1960f88460031b161c191690558a8080611d0d565b92936020600181928786015181550195019301611cf1565b835f528260205f2091820191015b818110611d655750611c5c565b80611d7260019254612558565b80611d7f575b5001611d58565b601f81118314611d9457505f81555b87611d78565b611db090825f5283601f60205f20920160051c8201910161294c565b805f525f6020812081835555611d8e565b60405162461bcd60e51b81526020600482015260166024820152750eee4dedcce40d2dca8f090c2e6d0e640d8cadccee8d60531b6044820152606490fd5b346101cf575f3660031901126101cf576020600354604051908152f35b346101cf5760203660031901126101cf576004356001600160401b0381116101cf57611e4e60209136906004016122bd565b611e56612f12565b611e5e613077565b611e6781613092565b0151805f52600560205260ff600260405f200154166007811015610424576001148015611faf575b15611f4c57805f526005602052600460405f2001546154608101809111610df5574210611f07575f8181526005602090815260409182902060028101805460ff191660061790554360039091015590519182527f93c5e4b71845d08837fbe3c5efed43976f31cd310635f1c142fc4cef1916f55c91a1005b60405162461bcd60e51b815260206004820152601860248201527f737761702072657175657374206e6f74206578706972656400000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152603560248201527f73776170207265717565737420737461747573206973206e6f742070656e64696044820152741b99c81bdc881b585ad95c8818dbdb999a5c9b5959605a1b6064820152608490fd5b50805f52600560205260ff600260405f20015416600781101561042457600214611e8f565b346101cf5760203660031901126101cf576004359063ffffffff60e01b82168092036101cf57602091637965db0b60e01b8114908115612016575b5015158152f35b6301ffc9a760e01b1490508361200f565b61010081019081106001600160401b03821117610bcb57604052565b60a081019081106001600160401b03821117610bcb57604052565b90601f801991011681019081106001600160401b03821117610bcb57604052565b6001600160401b038111610bcb57601f01601f191660200190565b81601f820112156101cf576020813591016120b48261207f565b926120c2604051948561205e565b828452828201116101cf57815f92602092838601378301015290565b602435906001600160a01b03821682036101cf57565b35906001600160a01b03821682036101cf57565b6001600160401b038111610bcb5760051b60200190565b9080601f830112156101cf5781359161213783612108565b92612145604051948561205e565b80845260208085019160051b830101918383116101cf5760208101915b83831061217157505050505090565b82356001600160401b0381116101cf57820160a0818703601f1901126101cf576040519161219e83612043565b60208201356001600160401b0381116101cf578760206121c09285010161209a565b835260408201356001600160401b0381116101cf578760206121e49285010161209a565b602084015260608201356001600160401b0381116101cf5787602061220b9285010161209a565b604084015260808201359260ff841684036101cf5760a0602094938594606084015201356080820152815201920191612162565b9080601f830112156101cf57813561225681612108565b92612264604051948561205e565b81845260208085019260051b820101918383116101cf5760208201905b83821061229057505050505090565b81356001600160401b0381116101cf576020916122b28784809488010161209a565b815201910190612281565b91906060838203126101cf5760405190606082018281106001600160401b03821117610bcb57604052819380356001600160401b0381116101cf578101610160818403126101cf576040519061016082018281106001600160401b03821117610bcb5760405280356001600160401b0381116101cf578461233f91830161209a565b825261234d602082016120f4565b60208301526040810135604083015260608101356001600160401b0381116101cf578461237b91830161211f565b606083015260808101356001600160401b0381116101cf578461239f91830161211f565b608083015260a08101356001600160401b0381116101cf57846123c391830161223f565b60a083015260c08101356001600160401b0381116101cf57816123ee866101409361241b950161223f565b60c085015260e081013560e0850152610100810135610100850152610120810135610120850152016120f4565b6101408201528352602081013560208401526040810135916001600160401b0383116101cf5760409261244e920161209a565b910152565b9060406003198301126101cf576004356001600160401b0381116101cf578261247e916004016122bd565b91602435906001600160401b0382116101cf57806023830112156101cf5781600401356124aa81612108565b926124b8604051948561205e565b8184526024602085019260051b820101918383116101cf5760248201905b8382106124e557505050505090565b81356001600160401b0381116101cf57602091612508876024859488010161209a565b8152019101906124d6565b6007548110156108e15760075f5260205f2001905f90565b6009548110156108e15760095f5260205f2001905f90565b80548210156108e1575f5260205f2001905f90565b90600182811c92168015612586575b602083101461257257565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612567565b6002545f929161259f82612558565b808252916001811690811561261357506001146125ba575050565b60025f9081529293509091907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b8383106125f9575060209250010190565b6001816020929493945483858701015201910191906125e8565b9050602093945060ff929192191683830152151560051b010190565b5f929181549161263e83612558565b8083529260018116908115612693575060011461265a57505050565b5f9081526020812093945091925b838310612679575060209250010190565b600181602092949394548385870101520191019190612668565b915050602093945060ff929192191683830152151560051b010190565b90610e6d576126c8610679916040519283809261262f565b90565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9080602083519182815201916020808360051b8301019401925f915b83831061271a57505050505090565b9091929394602080612738600193601f1986820301875289516126cb565b9701930193019193929061270b565b90608080612788612776612764865160a0875260a08701906126cb565b602087015186820360208801526126cb565b604086015185820360408701526126cb565b9360ff6060820151166060850152015191015290565b9080602083519182815201916020808360051b8301019401925f915b8383106127c957505050505090565b90919293946020806127e7600193601f198682030187528951612747565b970193019301919392906127ba565b9081549161280383612108565b92612811604051948561205e565b80845260208401915f5260205f20915f905b8282106128305750505050565b6040515f855461283f81612558565b80845290600181169081156128b05750600114612879575b506001928261286b8594602094038261205e565b815201940191019092612823565b5f878152602081209092505b81831061289a57505081016020016001612857565b6001816020925483868801015201920191612885565b60ff191660208581019190915291151560051b8401909101915060019050612857565b156128da57565b60405162461bcd60e51b815260206004820152600f60248201526e3737ba1037b93232b9103a30b5b2b960891b6044820152606490fd5b1561291857565b60405162461bcd60e51b815260206004820152600c60248201526b39ba30ba3ab99032b93937b960a11b6044820152606490fd5b818110612957575050565b5f815560010161294c565b9190601f811161297157505050565b61299b925f5260205f20906020601f840160051c8301931061299d575b601f0160051c019061294c565b565b909150819061298e565b80518210156108e15760209160051b010190565b91909182516001600160401b038111610bcb576129e2816129dc8454612558565b84612962565b6020601f8211600114612a20578190612a119394955f92612a155750508160011b915f199060031b1c19161790565b9055565b015190505f80610b34565b601f19821690835f52805f20915f5b818110612a6657509583600195969710612a4e575b505050811b019055565b01515f1960f88460031b161c191690555f8080612a44565b9192602060018192868b015181550194019201612a2f565b15612a8557565b60405162461bcd60e51b815260206004820152600f60248201526e3737ba1037b93232b91036b0b5b2b960891b6044820152606490fd5b15612ac357565b60405162461bcd60e51b815260206004820152602260248201527f73776170207265717565737420737461747573206973206e6f742070656e64696044820152616e6760f01b6064820152608490fd5b90610140612b9c612b8a612b78612b66612b38875161016088526101608801906126cb565b60018060a01b036020890151166020880152604088015160408801526060880151878203606089015261279e565b6080870151868203608088015261279e565b60a086015185820360a08701526126ef565b60c085015184820360c08601526126ef565b60e0808501519084015261010080850151908401526101208085015190840152928101516001600160a01b031691015290565b8051610120810151421015612e0657604051612c0981612bfb6020820194602086526040830190612b13565b03601f19810183528261205e565b51902060208201518103612dff578151602001516040830151612c369183906001600160a01b031661370c565b15612df857612c50905f52600460205260405f2054151590565b612df257805160a08101515160608201515103612deb5760c08101515160808201515103612de4576020908101516001600160a01b03165f9081527f4d430f3f24376a94a169c3f7aca7dfe11b3cfdb15137f93d46bddbf73fa0a37e909152604090205460ff1615612dde575f5b60c0825101518051821015612d0b57602080612cdc8460ff946129a7565b51604051928184925191829101835e81016006815203019020541615612d0457600101612cbe565b5050600890565b5050805151604051612d2d81612bfb60208201946020865260408301906126cb565b519020604051602081019060208252612d4c81612bfb60408201612590565b51902003612dd8575f5b6060825101518051821015612d9a57612d75610f3583612d86936129a7565b5f52600a60205260405f2054151590565b15612d9357600101612d56565b5050600a90565b50505f5b6080825101518051821015612dd157612d75610f3583612dbd936129a7565b15612dca57600101612d9e565b5050600b90565b5050505f90565b50600990565b50600790565b5050600690565b5050600590565b50600490565b5050600390565b5050600290565b5050600190565b60405190612e1a82612043565b5f6080836060815260606020820152606060408201528260608201520152565b60405190815f825492612e4c84612558565b9360018116908115612eaa5750600114612e71575b5060209250600681520301902090565b9150505f528160205f205f905b838210612e9257505060209181015f612e61565b60209192508060019154848701520191018391612e7e565b60ff191684525060209380151502830191505f9050612e61565b612ece8154612558565b9081612ed8575050565b81601f5f9311600114612ee9575055565b81835260208320612f0591601f0160051c81019060010161294c565b8082528160208120915555565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615612f4a57565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527fbce3cb76524401fa9579c1cdc205954302fef9d43cb0bb2acfe936b4a844cebd602052604090205460ff1615612f9957565b63e2517d3f60e01b5f52336004527f508ee82d0bdf04e000303ab4f02b172e60c5f2d35b2e559b05bed2cf403bb58b60245260445ffd5b335f9081527f4d430f3f24376a94a169c3f7aca7dfe11b3cfdb15137f93d46bddbf73fa0a37e602052604090205460ff161561300857565b63e2517d3f60e01b5f52336004527f70d8f6b4dfca278d41482e0778a0bf123d87b86b23b71cc0ef42c2f082e8053a60245260445ffd5b5f8181526020818152604080832033845290915290205460ff16156130615750565b63e2517d3f60e01b5f523360045260245260445ffd5b60ff6001541661308357565b63d93c066560e01b5f5260045ffd5b602081016130ac81515f52600460205260405f2054151590565b15613115575190516040516130d181612bfb6020820194602086526040830190612b13565b519020036130db57565b60405162461bcd60e51b81526020600482015260126024820152711bdc99195c881a185cda081a5b9d985b1a5960721b6044820152606490fd5b60405162461bcd60e51b81526020600482015260156024820152746f726465722068617368206e6f742065786973747360581b6044820152606490fd5b909392915f5b855181101561339a57613178604061317083896129a7565b51015161380e565b61318b61318583876129a7565b5161380e565b6001600160a01b039091169060806131a3848a6129a7565b51015184810290808204861490151715610df5576040516370a0823160e01b81526001600160a01b038716600482018190526305f5e1009092049190602081602481885afa80156132b15783915f91613366575b501061332c57604051636eb1769f60e11b815260048101829052306024820152602081604481885afa80156132b15783915f916132f8575b50106132bc576020925f9260405191858301936323b872dd60e01b8552602484015260018060a01b0316604483015260648201526064815261327260848261205e565b519082855af1156132b1575f513d6132a85750803b155b6132965750600101613158565b635274afe760e01b5f5260045260245ffd5b60011415613289565b6040513d5f823e3d90fd5b60405162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606490fd5b9150506020813d8211613324575b816133136020938361205e565b810103126101cf578290515f61322f565b3d9150613306565b60405162461bcd60e51b81526020600482015260126024820152716e6f7420656e6f7567682062616c616e636560701b6044820152606490fd5b9150506020813d8211613392575b816133816020938361205e565b810103126101cf578290515f6131f7565b3d9150613374565b505050509050565b5f818152602081815260408083206001600160a01b038616845290915290205460ff16613424575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b60206134956001835193838101519084606060408301519201519181604051978895818088019b8051918291018d5e8701908282015f8152815193849201905e0101905f8252805192839101825e019060ff60f81b9060f81b16815203601e1981018452018261205e565b51902090565b5f818152602081815260408083206001600160a01b038616845290915290205460ff1615613424575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b80518251036136b2576002545f5b82518110156136ac5761353c81846129a7565b515160208151910151906020811061369b575b5061355983612558565b6002601f8211613673575b549060208110613662575b500361362b576001600160a01b0361358c604061317084876129a7565b16156135f1576001600160a01b036135a761318583876129a7565b16156135b557600101613529565b60405162461bcd60e51b81526020600482015260146024820152737a65726f2072656365697665206164647265737360601b6044820152606490fd5b60405162461bcd60e51b81526020600482015260126024820152717a65726f20746f6b656e206164647265737360701b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e0c6d0c2d2dc40dcdee840dac2e8c6d608b1b6044820152606490fd5b5f199060200360031b1b165f61356f565b5f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace613564565b5f199060200360031b1b165f61354f565b50505050565b60405162461bcd60e51b815260206004820152602c60248201527f746f6b656e736574206c656e677468206e6f74206d617463682061646472657360448201526b0e698d2e6e840d8cadccee8d60a31b6064820152608490fd5b9190823b613747579061371e91613a20565b5060048110156104245715918261373457505090565b6001600160a01b03918216911614919050565b915f92612bfb61377d85946040519283916020830195630b135d3f60e11b875260248401526040604484015260648301906126cb565b51915afa3d156137e5573d6137918161207f565b9061379f604051928361205e565b81523d5f602083013e5b816137d7575b816137b8575090565b90506020818051810103126101cf5760200151630b135d3f60e11b1490565b9050602081511015906137af565b60606137a9565b9081518110156108e1570160200190565b60ff16600a019060ff8211610df557565b602a8151036139275760405161382560408261205e565b60148152602080820192903684375f5b6014811061388a5750505190516bffffffffffffffffffffffff198116919060148210613865575b505060601c90565b6bffffffffffffffffffffffff1960149290920360031b82901b161690505f8061385d565b8060011b81810460021482151715610df5578060020180600211610df5576138c7906001600160f81b0319906138c090866137ec565b5116613b19565b60041b90610ff060f0831692168203610df55760030180600311610df5576138f960ff916138c08360f81b91876137ec565b16019060ff8211610df55760019160f81b6001600160f81b0319165f1a61392082866137ec565b5301613835565b60405162461bcd60e51b8152602060048201526016602482015275092dcecc2d8d2c840c2c8c8e4cae6e640d8cadccee8d60531b6044820152606490fd5b805f52600a60205260405f2054155f146139cb57600954600160401b811015610bcb576139b461399e8260018594016009556009612543565b819391549060031b91821b915f19901b19161790565b9055600954905f52600a60205260405f2055600190565b505f90565b805f52600460205260405f2054155f146139cb57600354600160401b811015610bcb57613a0961399e8260018594016003556003612543565b9055600354905f52600460205260405f2055600190565b8151919060418303613a5057613a499250602082015190606060408401519301515f1a90613bf0565b9192909190565b50505f9160029190565b5f818152600a60205260409020548015613424575f198101818111610df5576009545f19810191908211610df557818103613ae1575b5050506009548015613acd575f1901613aaa816009612543565b8154905f199060031b1b191690556009555f52600a6020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b613b03613af261399e936009612543565b90549060031b1c9283926009612543565b90555f52600a60205260405f20555f8080613a90565b60f81c603081101580613be5575b15613b3b57602f190160ff8111610df55790565b606181101580613bda575b15613b6757613b54906137fd565b60ff60601991160160ff8111610df55790565b604181101580613bcf575b613bb35760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103432bc1031b430b930b1ba32b960591b6044820152606490fd5b613bbc906137fd565b60ff60401991160160ff8111610df55790565b506046811115613b72565b506066811115613b46565b506039811115613b27565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613c67579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156132b1575f516001600160a01b03811615613c5d57905f905f90565b505f906001905f90565b5050505f916003919056fea264697066735822122045e925fdce5eaad559bbc057e3e3ebfcd6f3debf78364abf02f2859a84c0d4b464736f6c634300081c0033ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5000000000000000000000000d463d3d8333b7ad6a14d00e1700c80af5a37f75100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000008424153455f455448000000000000000000000000000000000000000000000000