UNPKG

@layerzerolabs/oft-alt-evm

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation

1 lines 259 kB
{"abi":[{"type":"constructor","inputs":[{"name":"_localEidV2","type":"uint32","internalType":"uint32"},{"name":"_vid","type":"uint32","internalType":"uint32"},{"name":"_messageLibs","type":"address[]","internalType":"address[]"},{"name":"_priceFeed","type":"address","internalType":"address"},{"name":"_signers","type":"address[]","internalType":"address[]"},{"name":"_quorum","type":"uint64","internalType":"uint64"},{"name":"_admins","type":"address[]","internalType":"address[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowlistSize","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"assignJob","inputs":[{"name":"_param","type":"tuple","internalType":"struct ILayerZeroDVN.AssignJobParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"packetHeader","type":"bytes","internalType":"bytes"},{"name":"payloadHash","type":"bytes32","internalType":"bytes32"},{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"sender","type":"address","internalType":"address"}]},{"name":"_options","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"totalFee","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"assignJob","inputs":[{"name":"_dstEid","type":"uint16","internalType":"uint16"},{"name":"","type":"uint16","internalType":"uint16"},{"name":"_confirmations","type":"uint64","internalType":"uint64"},{"name":"_sender","type":"address","internalType":"address"}],"outputs":[{"name":"totalFee","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"assignJob","inputs":[{"name":"_sender","type":"address","internalType":"address"},{"name":"","type":"bytes","internalType":"bytes"},{"name":"_cmd","type":"bytes","internalType":"bytes"},{"name":"_options","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"defaultMultiplierBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"dstConfig","inputs":[{"name":"dstEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"gas","type":"uint64","internalType":"uint64"},{"name":"multiplierBps","type":"uint16","internalType":"uint16"},{"name":"floorMarginUSD","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"_params","type":"tuple[]","internalType":"struct ExecuteParam[]","components":[{"name":"vid","type":"uint32","internalType":"uint32"},{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"expiration","type":"uint256","internalType":"uint256"},{"name":"signatures","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getFee","inputs":[{"name":"_dstEid","type":"uint32","internalType":"uint32"},{"name":"_confirmations","type":"uint64","internalType":"uint64"},{"name":"_sender","type":"address","internalType":"address"},{"name":"_options","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getFee","inputs":[{"name":"_dstEid","type":"uint16","internalType":"uint16"},{"name":"","type":"uint16","internalType":"uint16"},{"name":"_confirmations","type":"uint64","internalType":"uint64"},{"name":"_sender","type":"address","internalType":"address"}],"outputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getFee","inputs":[{"name":"_sender","type":"address","internalType":"address"},{"name":"","type":"bytes","internalType":"bytes"},{"name":"_cmd","type":"bytes","internalType":"bytes"},{"name":"_options","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"fee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getSupportedOptionTypes","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"uint8[]","internalType":"uint8[]"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"_role","type":"bytes32","internalType":"bytes32"},{"name":"_account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasAcl","inputs":[{"name":"_sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hashCallData","inputs":[{"name":"_vid","type":"uint32","internalType":"uint32"},{"name":"_target","type":"address","internalType":"address"},{"name":"_callData","type":"bytes","internalType":"bytes"},{"name":"_expiration","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"localEidV2","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"priceFeed","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quorum","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"quorumChangeAdmin","inputs":[{"name":"_param","type":"tuple","internalType":"struct ExecuteParam","components":[{"name":"vid","type":"uint32","internalType":"uint32"},{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"expiration","type":"uint256","internalType":"uint256"},{"name":"signatures","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"revokeRole","inputs":[{"name":"_role","type":"bytes32","internalType":"bytes32"},{"name":"_account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultMultiplierBps","inputs":[{"name":"_multiplierBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDstConfig","inputs":[{"name":"_params","type":"tuple[]","internalType":"struct IDVN.DstConfigParam[]","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"gas","type":"uint64","internalType":"uint64"},{"name":"multiplierBps","type":"uint16","internalType":"uint16"},{"name":"floorMarginUSD","type":"uint128","internalType":"uint128"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPaused","inputs":[{"name":"_paused","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPriceFeed","inputs":[{"name":"_priceFeed","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQuorum","inputs":[{"name":"_quorum","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSigner","inputs":[{"name":"_signer","type":"address","internalType":"address"},{"name":"_active","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSupportedOptionTypes","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_optionTypes","type":"uint8[]","internalType":"uint8[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setWorkerFeeLib","inputs":[{"name":"_workerFeeLib","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signerSize","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"signers","inputs":[{"name":"signer","type":"address","internalType":"address"}],"outputs":[{"name":"active","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"usedHashes","inputs":[{"name":"executableHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"used","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"verifySignatures","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signatures","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"","type":"uint8","internalType":"enum MultiSigMock.Errors"}],"stateMutability":"view"},{"type":"function","name":"vid","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"withdrawFee","inputs":[{"name":"_lib","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawFeeFromUlnV2","inputs":[{"name":"_lib","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address payable"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawToken","inputs":[{"name":"_token","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"workerFeeLib","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"ExecuteFailed","inputs":[{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"HashAlreadyUsed","inputs":[{"name":"param","type":"tuple","indexed":false,"internalType":"struct ExecuteParam","components":[{"name":"vid","type":"uint32","internalType":"uint32"},{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"expiration","type":"uint256","internalType":"uint256"},{"name":"signatures","type":"bytes","internalType":"bytes"}]},{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetDefaultMultiplierBps","inputs":[{"name":"multiplierBps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"SetDstConfig","inputs":[{"name":"params","type":"tuple[]","indexed":false,"internalType":"struct IDVN.DstConfigParam[]","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"gas","type":"uint64","internalType":"uint64"},{"name":"multiplierBps","type":"uint16","internalType":"uint16"},{"name":"floorMarginUSD","type":"uint128","internalType":"uint128"}]}],"anonymous":false},{"type":"event","name":"SetPriceFeed","inputs":[{"name":"priceFeed","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetSupportedOptionTypes","inputs":[{"name":"dstEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"optionTypes","type":"uint8[]","indexed":false,"internalType":"uint8[]"}],"anonymous":false},{"type":"event","name":"SetWorkerLib","inputs":[{"name":"workerLib","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UpdateQuorum","inputs":[{"name":"_quorum","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"UpdateSigner","inputs":[{"name":"_signer","type":"address","indexed":false,"internalType":"address"},{"name":"_active","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"VerifierFeePaid","inputs":[{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"VerifySignaturesFailed","inputs":[{"name":"idx","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Withdraw","inputs":[{"name":"lib","type":"address","indexed":false,"internalType":"address"},{"name":"to","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"DVN_DuplicatedHash","inputs":[{"name":"executableHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"DVN_InstructionExpired","inputs":[]},{"type":"error","name":"DVN_InvalidRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"DVN_InvalidSignatures","inputs":[]},{"type":"error","name":"DVN_InvalidTarget","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"DVN_InvalidVid","inputs":[{"name":"vid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"DVN_OnlySelf","inputs":[]},{"type":"error","name":"EnforcedPause","inputs":[]},{"type":"error","name":"ExpectedPause","inputs":[]},{"type":"error","name":"MultiSig_OnlySigner","inputs":[]},{"type":"error","name":"MultiSig_QuorumIsZero","inputs":[]},{"type":"error","name":"MultiSig_SignersSizeIsLessThanQuorum","inputs":[{"name":"signersSize","type":"uint64","internalType":"uint64"},{"name":"quorum","type":"uint64","internalType":"uint64"}]},{"type":"error","name":"MultiSig_StateAlreadySet","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"active","type":"bool","internalType":"bool"}]},{"type":"error","name":"MultiSig_UnorderedSigners","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Transfer_NativeFailed","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"Transfer_ToAddressIsZero","inputs":[]},{"type":"error","name":"Worker_NotAllowed","inputs":[]},{"type":"error","name":"Worker_OnlyMessageLib","inputs":[]},{"type":"error","name":"Worker_RoleRenouncingDisabled","inputs":[]}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b5060405162004aae38038062004aae8339810160408190526200003391620004ca565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee05f865f5b8551811015620000d357620000c97f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b557620000b5620005a5565b60200260200101516200027860201b60201c565b5060010162000071565b505f5b815181101562000124576200011a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b557620000b5620005a5565b50600101620000d6565b505050505050806001600160401b03165f036200015457604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019a5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b5f805b835181101562000229575f848281518110620001bd57620001bd620005a5565b60200260200101519050826001600160a01b0316816001600160a01b031611620001fa576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600460205260409020805460ff19166001908117909155909250016200019d565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a052620005f3565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002c957505f838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003165760018054601590620002f190600160a81b90046001600160401b0316620005b9565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032283836200032e565b50600190505b92915050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff16620003d1575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003883390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000328565b505f62000328565b805163ffffffff81168114620003ed575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b0381168114620003ed575f80fd5b5f82601f8301126200042d575f80fd5b815160206001600160401b03808311156200044c576200044c620003f2565b8260051b604051601f19603f83011681018181108482111715620004745762000474620003f2565b604052938452602081870181019490810192508785111562000494575f80fd5b6020870191505b84821015620004bf57620004af8262000406565b835291830191908301906200049b565b979650505050505050565b5f805f805f805f60e0888a031215620004e1575f80fd5b620004ec88620003d9565b9650620004fc60208901620003d9565b60408901519096506001600160401b038082111562000519575f80fd5b620005278b838c016200041d565b96506200053760608b0162000406565b955060808a01519150808211156200054d575f80fd5b6200055b8b838c016200041d565b945060a08a01519150808216821462000572575f80fd5b60c08a01519193508082111562000587575f80fd5b50620005968a828b016200041d565b91505092959891949750929550565b634e487b7160e01b5f52603260045260245ffd5b5f6001600160401b038281166002600160401b03198101620005e957634e487b7160e01b5f52601160045260245ffd5b6001019392505050565b60805160a05161447d620006315f395f818161090e0152818161253401526126c301525f818161084f0152818161173901526122a4015261447d5ff3fe6080604052600436106102c0575f3560e01c806395d376d711610170578063cd88b903116100d1578063e395eb5c11610087578063f42ed2ed11610062578063f42ed2ed1461096e578063fd62e75014610981578063fdb9b0f1146109a1575f80fd5b8063e395eb5c146108fd578063f010cb2314610930578063f3b4ebd01461094f575f80fd5b8063d2ae2104116100b7578063d2ae210414610886578063d547741f146108bf578063dafe0ccc146108de575f80fd5b8063cd88b9031461081f578063cf34c7681461083e575f80fd5b8063c358de0a11610126578063c5e193cd1161010c578063c5e193cd146107b4578063c7a823e0146107d3578063c7b2370b14610800575f80fd5b8063c358de0a14610764578063c416aa5114610783575f80fd5b8063a217fddf11610156578063a217fddf14610704578063aef18bf714610717578063b143044b14610745575f80fd5b806395d376d71461064e5780639e94496514610661575f80fd5b806330bb3aac116102255780635c975abb116101db578063741bef1a116101b6578063741bef1a1461058f5780638585c945146105e057806391d14854146105ff575f80fd5b80635c975abb1461052b578063724e78da14610542578063736c0d5b14610561575f80fd5b806336568abe1161020b57806336568abe146104ce57806352d3b871146104ed5780635553fb8e1461050c575f80fd5b806330bb3aac1461049057806331cb6105146104af575f80fd5b80631703a0181161027a57806326e67a371161026057806326e67a37146104265780632de11376146104525780632f2ff15d14610471575f80fd5b80631703a018146103a5578063248a9ca3146103ea575f80fd5b806301ffc9a7116102aa57806301ffc9a7146103385780631095b6d71461036757806316c38b3c14610386575f80fd5b8062bf2e80146102c457806301e3366714610317575b5f80fd5b3480156102cf575f80fd5b506001546102ff907d010000000000000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b348015610322575f80fd5b50610336610331366004613597565b6109c0565b005b348015610343575f80fd5b506103576103523660046135d5565b6109fb565b604051901515815260200161030e565b348015610372575f80fd5b50610336610381366004613597565b610a93565b348015610391575f80fd5b506103366103a036600461362a565b610c1d565b3480156103b0575f80fd5b506005546103d19068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161030e565b3480156103f5575f80fd5b50610418610404366004613643565b5f9081526020819052604090206001015490565b60405190815260200161030e565b348015610431575f80fd5b5061044561044036600461366d565b610c41565b60405161030e9190613686565b34801561045d575f80fd5b5061035761046c3660046136cc565b610cc4565b34801561047c575f80fd5b5061033661048b3660046136e7565b610da5565b34801561049b575f80fd5b506104186104aa366004613771565b610ef4565b3480156104ba575f80fd5b506103366104c93660046137e4565b611067565b3480156104d9575f80fd5b506103366104e83660046136e7565b6110aa565b3480156104f8575f80fd5b50610336610507366004613817565b6110dc565b348015610517575f80fd5b50610418610526366004613897565b6112a5565b348015610536575f80fd5b5060015460ff16610357565b34801561054d575f80fd5b5061033661055c3660046136cc565b611418565b34801561056c575f80fd5b5061035761057b3660046136cc565b60046020525f908152604090205460ff1681565b34801561059a575f80fd5b506002546105bb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030e565b3480156105eb575f80fd5b506103366105fa3660046138ea565b6114bd565b34801561060a575f80fd5b506103576106193660046136e7565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61041861065c366004613919565b611502565b34801561066c575f80fd5b506106c961067b36600461366d565b60066020525f908152604090205467ffffffffffffffff81169068010000000000000000810461ffff16906a010000000000000000000090046fffffffffffffffffffffffffffffffff1683565b6040805167ffffffffffffffff909416845261ffff90921660208401526fffffffffffffffffffffffffffffffff169082015260600161030e565b34801561070f575f80fd5b506104185f81565b348015610722575f80fd5b50610357610731366004613643565b60076020525f908152604090205460ff1681565b348015610750575f80fd5b5061033661075f3660046139be565b6116d7565b34801561076f575f80fd5b5061033661077e3660046139fd565b6119db565b34801561078e575f80fd5b506001546105bb90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156107bf575f80fd5b506104186107ce366004613897565b611a89565b3480156107de575f80fd5b506107f26107ed366004613a16565b611c62565b60405161030e929190613a7e565b34801561080b575f80fd5b5061033661081a3660046136cc565b611e65565b34801561082a575f80fd5b50610336610839366004613ac9565b611f09565b348015610849575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161030e565b348015610891575f80fd5b506001546103d1907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b3480156108ca575f80fd5b506103366108d93660046136e7565b611f59565b3480156108e9575f80fd5b506103366108f8366004613597565b61206e565b348015610908575f80fd5b506108717f000000000000000000000000000000000000000000000000000000000000000081565b34801561093b575f80fd5b5061041861094a366004613b0b565b61219e565b34801561095a575f80fd5b50610336610969366004613b71565b6121d9565b61041861097c366004613bab565b61244a565b34801561098c575f80fd5b506005546103d19067ffffffffffffffff1681565b3480156109ac575f80fd5b506104186109bb366004613bab565b612603565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756109ea81612790565b6109f584848461279a565b50505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610a8d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610abd81612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16610b3a576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ffd9be52200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063fd9be522906044015f604051808303815f87803b158015610ba7575f80fd5b505af1158015610bb9573d5f803e3d5ffd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b5f610c2781612790565b8115610c3957610c356127cf565b5050565b610c3561284e565b63ffffffff81165f90815260036020908152604091829020805483518184028101840190945280845260609392830182828015610cb857602002820191905f5260205f20905f905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610c895790505b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f93c430521711328044ae92d0f1f1286cf040bc4a382f1642bd89984e86630553602052604081205460ff1615610d1757505f919050565b6001547501000000000000000000000000000000000000000000900467ffffffffffffffff161580610d8c575073ffffffffffffffffffffffffffffffffffffffff82165f9081527f4ac82e3087b7dedf7f532cbc6915c722df8c1e31f1388c318a617b52760eaf8b602052604090205460ff165b15610d9957506001919050565b505f919050565b919050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480610df357507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610e1d57507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b15610e6057303314610e5b576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eea565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb057610e5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6040517f94fdc372000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109f583836128a5565b5f83610eff81610cc4565b610f35576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825263ffffffff8a16602080840182905267ffffffffffffffff808c16858701528a8416606086015260055468010000000000000000900416608085015260015461ffff7d01000000000000000000000000000000000000000000000000000000000082041660a08601525f92835260069091529084902093517f7bfa20a9000000000000000000000000000000000000000000000000000000008152929361010090910490911691637bfa20a99161101c918591908a908a90600401613c97565b602060405180830381865afa158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613d63565b98975050505050505050565b3033146110a0576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c358282612975565b6040517fdec9f03100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561110681612790565b5f5b82811015611266573684848381811061112357611123613d7a565b9050608002019050604051806060016040528082602001602081019061114991906138ea565b67ffffffffffffffff16815260200161116860608401604085016139fd565b61ffff1681526020016111816080840160608501613dc6565b6fffffffffffffffffffffffffffffffff16905260065f6111a5602085018561366d565b63ffffffff16815260208082019290925260409081015f20835181549385015194909201516fffffffffffffffffffffffffffffffff166a0100000000000000000000027fffffffffffff00000000000000000000000000000000ffffffffffffffffffff61ffff90951668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090941667ffffffffffffffff90931692909217929092179290921691909117905550600101611108565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051611298929190613ddf565b60405180910390a1505050565b5f816112b081610cc4565b6112e6576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808a16602080850182905267ffffffffffffffff808b168688015289851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517f7bfa20a9000000000000000000000000000000000000000000000000000000008152939461010090920490921692637bfa20a9926113ce928692600401613edd565b602060405180830381865afa1580156113e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140d9190613d63565b979650505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561144281612790565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146114f6576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ff81612b73565b50565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61152d81612790565b61153d60a08601608087016136cc565b61154681610cc4565b61157c576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810190915260025473ffffffffffffffffffffffffffffffffffffffff1681525f906020808201906115b6908a018a61366d565b63ffffffff1681526020016115d160808a0160608b016138ea565b67ffffffffffffffff1681526020016115f060a08a0160808b016136cc565b73ffffffffffffffffffffffffffffffffffffffff908116825260055468010000000000000000900467ffffffffffffffff166020808401919091526001547d010000000000000000000000000000000000000000000000000000000000810461ffff16604090940193909352929350610100909104169063df2b057e9083906006905f90611681908d018d61366d565b63ffffffff1663ffffffff1681526020019081526020015f2089896040518563ffffffff1660e01b81526004016116bb9493929190613c97565b6020604051808303815f875af11580156113e9573d5f803e3d5ffd5b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561170181612790565b5f5b828110156109f5573684848381811061171e5761171e613d7a565b90506020028101906117309190613fb2565b905063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611766602083018361366d565b63ffffffff161461177757506119d3565b4281606001351161178857506119d3565b5f6117c0611799602084018461366d565b6117a960408501602086016136cc565b6117b66040860186613fee565b866060013561219e565b90505f6117d4826107ed6080860186613fee565b50905080611817576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a15050506119d3565b5f6118366118286040860186613fee565b6118319161404f565b612c8a565b905080156118cd575f8381526007602052604090205460ff1615611896577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab9784846040516118859291906140f7565b60405180910390a1505050506119d3565b5f83815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555b5f806118df60408701602088016136cc565b73ffffffffffffffffffffffffffffffffffffffff166119026040880188613fee565b6040516119109291906141bc565b5f604051808303815f865af19150503d805f8114611949576040519150601f19603f3d011682016040523d82523d5f602084013e61194e565b606091505b5091509150816119cc578215611992575f85815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516119c39291906141cb565b60405180910390a15b5050505050505b600101611703565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611a0581612790565b600180547fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d01000000000000000000000000000000000000000000000000000000000061ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d906020016114b1565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de611ab481612790565b82611abe81610cc4565b611af4576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825260025473ffffffffffffffffffffffffffffffffffffffff908116825261ffff808b16602080850182905267ffffffffffffffff808c16868801528a851660608701526005546801000000000000000090041660808601526001547d010000000000000000000000000000000000000000000000000000000000810490931660a08601525f918252600681528582208651918201875291815294517fdf2b057e00000000000000000000000000000000000000000000000000000000815293946101009092049092169263df2b057e92611bdc928692600401613edd565b6020604051808303815f875af1158015611bf8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613d63565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef84604051611c4f91815260200190565b60405180910390a1505050949350505050565b6005545f908190611c8a9068010000000000000000900467ffffffffffffffff166041614210565b8314611c9b57505f90506001611e5d565b5f611cf2866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018290525f90605c01604051602081830303815290604052805190602001209050919050565b90505f805b60055468010000000000000000900467ffffffffffffffff16811015611e5257365f8888611d26856041614210565b90611d32866001614227565b611d3d906041614210565b92611d4a9392919061423a565b915091505f80611d8f8785858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612d7292505050565b5090925090505f816003811115611da857611da8613a51565b14611dc0575f60019850985050505050505050611e5d565b8573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1611611e06575f60029850985050505050505050611e5d565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205460ff16611e45575f60039850985050505050505050611e5d565b5093505050600101611cf7565b5060015f9350935050505b935093915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611e8f81612790565b600180547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e0906020016114b1565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611f3381612790565b63ffffffff84165f908152600360205260409020611f529084846134be565b5050505050565b817f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca811480611fa757507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80611fd157507f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de81145b156120145730331461200f576040517ffaba723a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612064565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758103610eb05761200f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775612790565b6109f58383612dbb565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561209881612790565b73ffffffffffffffffffffffffffffffffffffffff84165f9081527f9b50f4667d2d24216ccbf0dce3a90c0f620fa4d895e7b069d80ff6247fd25620602052604090205460ff16612115576040517f5ee08b9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f07b18bde00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528516906307b18bde906044015f604051808303815f87803b158015612182575f80fd5b505af1158015612194573d5f803e3d5ffd5b5050505050505050565b5f85858386866040516020016121b8959493929190614261565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511612216576040517f0bbaf26300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061222760408301602084016136cc565b73ffffffffffffffffffffffffffffffffffffffff161461229d5761225260408201602083016136cc565b6040517f1ce0bfcd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ee1565b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166122d1602083018361366d565b63ffffffff1614612324576122e9602082018261366d565b6040517f2697e1c200000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610ee1565b5f612335611799602084018461366d565b90505f612349826107ed6080860186613fee565b50905080612383576040517f15ecadee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526007602052604090205460ff16156123ce576040517f9d6a45a600000000000000000000000000000000000000000000000000000000815260048101839052602401610ee1565b5f828152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556109f5907fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217759061243890860186613fee565b81019061244591906136cc565b6128a5565b5f7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61247581612790565b8861247f81610cc4565b6124b5576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528c811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fbbc5a33b00000000000000000000000000000000000000000000000000000000815292936101009091049091169163bbc5a33b916125b4918591908d908d908d908d906004016142d2565b6020604051808303815f875af11580156125d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f49190613d63565b9b9a5050505050505050505050565b5f8761260e81610cc4565b612644576040517f4ab5ebcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160808101825260025473ffffffffffffffffffffffffffffffffffffffff90811682528b811660208084019190915260055468010000000000000000900467ffffffffffffffff16838501526001547d010000000000000000000000000000000000000000000000000000000000810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff165f90815260069092529084902093517fd358b30000000000000000000000000000000000000000000000000000000000815292936101009091049091169163d358b30091612743918591908c908c908c908c906004016142d2565b602060405180830381865afa15801561275e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127829190613d63565b9a9950505050505050505050565b6114ff8133612e80565b73ffffffffffffffffffffffffffffffffffffffff83166127c4576127bf8282612f05565b505050565b6127bf838383613007565b6127d7613075565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6128566130b4565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612824565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca8314801561290257505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff16155b15612961576001805460159061293a907501000000000000000000000000000000000000000000900467ffffffffffffffff16614397565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836130f0565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036129fb576040517f58c8d2a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683151517905581612a6c57600554612a679060019067ffffffffffffffff166143bd565b612a84565b600554612a849067ffffffffffffffff1660016143e5565b60055490915067ffffffffffffffff680100000000000000009091048116908216811115612af2576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808416600483015282166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff84161790556040805173ffffffffffffffffffffffffffffffffffffffff8616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610c0f565b8067ffffffffffffffff165f03612bb6576040517f5f86e17700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055467ffffffffffffffff908116908216811015612c15576040517ff1c582ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808316600483015283166024820152604401610ee1565b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a23249906020016114b1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f0223536e0000000000000000000000000000000000000000000000000000000014801590612d1f57507fffffffff0000000000000000000000000000000000000000000000000000000082167fab750e750000000000000000000000000000000000000000000000000000000014155b8015610a8d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f704316e500000000000000000000000000000000000000000000000000000000141592915050565b5f805f8351604103612da9576020840151604085015160608601515f1a612d9b888285856131e9565b955095509550505050612db4565b505081515f91506002905b9250925092565b5f7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015612e1757505f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915290205460ff165b15612e765760018054601590612e4f907501000000000000000000000000000000000000000000900467ffffffffffffffff16614406565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b61296b83836132dc565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610c35576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216612f52576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114612fa8576040519150601f19603f3d011682016040523d82523d5f602084013e612fad565b606091505b50509050806127bf576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610ee1565b73ffffffffffffffffffffffffffffffffffffffff8216613054576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127bf73ffffffffffffffffffffffffffffffffffffffff84168383613395565b60015460ff16156130b2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60015460ff166130b2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556131803390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610a8d565b505f610a8d565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561322257505f915060039050826132d2565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613273573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166132c957505f9250600191508290506132d2565b92505f91508190505b9450945094915050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156131e2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610a8d565b6040805173ffffffffffffffffffffffffffffffffffffffff841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017815282516127bf93879390925f9283929183919082885af18061343e576040513d5f823e3d81fd5b50505f513d9150811561345557806001141561346f565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156109f5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ee1565b828054828255905f5260205f2090601f01602090048101928215613552579160200282015f5b8382111561352457833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020815f010492830192600103026134e4565b80156135505782816101000a81549060ff02191690556001016020815f01049283019260010302613524565b505b5061355e929150613562565b5090565b5b8082111561355e575f8155600101613563565b73ffffffffffffffffffffffffffffffffffffffff811681146114ff575f80fd5b5f805f606084860312156135a9575f80fd5b83356135b481613576565b925060208401356135c481613576565b929592945050506040919091013590565b5f602082840312156135e5575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613614575f80fd5b9392505050565b80358015158114610da0575f80fd5b5f6020828403121561363a575f80fd5b6136148261361b565b5f60208284031215613653575f80fd5b5035919050565b803563ffffffff81168114610da0575f80fd5b5f6020828403121561367d575f80fd5b6136148261365a565b602080825282518282018190525f9190848201906040850190845b818110156136c057835160ff16835292840192918401916001016136a1565b50909695505050505050565b5f602082840312156136dc575f80fd5b813561361481613576565b5f80604083850312156136f8575f80fd5b82359150602083013561370a81613576565b809150509250929050565b803567ffffffffffffffff81168114610da0575f80fd5b5f8083601f84011261373c575f80fd5b50813567ffffffffffffffff811115613753575f80fd5b60208301915083602082850101111561376a575f80fd5b9250929050565b5f805f805f60808688031215613785575f80fd5b61378e8661365a565b945061379c60208701613715565b935060408601356137ac81613576565b9250606086013567ffffffffffffffff8111156137c7575f80fd5b6137d38882890161372c565b969995985093965092949392505050565b5f80604083850312156137f5575f80fd5b823561380081613576565b915061380e6020840161361b565b90509250929050565b5f8060208385031215613828575f80fd5b823567ffffffffffffffff8082111561383f575f80fd5b818501915085601f830112613852575f80fd5b813581811115613860575f80fd5b8660208260071b8501011115613874575f80fd5b60209290920196919550909350505050565b803561ffff81168114610da0575f80fd5b5f805f80608085870312156138aa575f80fd5b6138b385613886565b93506138c160208601613886565b92506138cf60408601613715565b915060608501356138df81613576565b939692955090935050565b5f602082840312156138fa575f80fd5b61361482613715565b5f60a08284031215613913575f80fd5b50919050565b5f805f6040848603121561392b575f80fd5b833567ffffffffffffffff80821115613942575f80fd5b61394e87838801613903565b94506020860135915080821115613963575f80fd5b506139708682870161372c565b9497909650939450505050565b5f8083601f84011261398d575f80fd5b50813567ffffffffffffffff8111156139a4575f80fd5b6020830191508360208260051b850101111561376a575f80fd5b5f80602083850312156139cf575f80fd5b823567ffffffffffffffff8111156139e5575f80fd5b61