0 txs
0 calls
constructor
constructor(address _factory, address _WETH)
functions
factory
viewfunction factory() view returns (address)
getAmountIn
purefunction getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) pure returns (uint256 amountIn)
getAmountOut
purefunction getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) pure returns (uint256 amountOut)
getAmountsIn
viewfunction getAmountsIn(uint256 amountOut, address[] path) view returns (uint256[] amounts)
getAmountsOut
viewfunction getAmountsOut(uint256 amountIn, address[] path) view returns (uint256[] amounts)
quote
purefunction quote(uint256 amountA, uint256 reserveA, uint256 reserveB) pure returns (uint256 amountB)
WETH
viewfunction WETH() view returns (address)
addLiquidity
nonpayablefunction addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity)
addLiquidityETH
payablefunction addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity)
removeLiquidity
nonpayablefunction removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB)
removeLiquidityETH
nonpayablefunction removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) returns (uint256 amountToken, uint256 amountETH)
removeLiquidityETHSupportingFeeOnTransferTokens
nonpayablefunction removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) returns (uint256 amountETH)
removeLiquidityETHWithPermit
nonpayablefunction removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) returns (uint256 amountToken, uint256 amountETH)
removeLiquidityETHWithPermitSupportingFeeOnTransferTokens
nonpayablefunction removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) returns (uint256 amountETH)
removeLiquidityWithPermit
nonpayablefunction removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) returns (uint256 amountA, uint256 amountB)
swapETHForExactTokens
payablefunction swapETHForExactTokens(uint256 amountOut, address[] path, address to, uint256 deadline) payable returns (uint256[] amounts)
swapExactETHForTokens
payablefunction swapExactETHForTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) payable returns (uint256[] amounts)
swapExactETHForTokensSupportingFeeOnTransferTokens
payablefunction swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] path, address to, uint256 deadline) payable
swapExactTokensForETH
nonpayablefunction swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
swapExactTokensForETHSupportingFeeOnTransferTokens
nonpayablefunction swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline)
swapExactTokensForTokens
nonpayablefunction swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
swapExactTokensForTokensSupportingFeeOnTransferTokens
nonpayablefunction swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] path, address to, uint256 deadline)
swapTokensForExactETH
nonpayablefunction swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
swapTokensForExactTokens
nonpayablefunction swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] path, address to, uint256 deadline) returns (uint256[] amounts)
events
No events.
errors
No errors.
creation bytecode
0x60c06040523480156200001157600080fd5b5060405162005ec438038062005ec4833981810160405260408110156200003757600080fd5b8101908080519060200190929190805190602001909291905050508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050505060805160601c60a05160601c615cbb6200020960003980610156528061150b5280611549528061161052806118395280611c8f5280611eb55280611fab528061242d52806125b152806126985280612747528061285a52806128ef5280612c8e5280612cdc5280612dcf5280612e7d5280612f035280612f84528061362e52806138fa528061395352806139875280613a085280613bdf5280613cef5280613d845250806116995280611759528061190c52806119445280611ad45280611b945280611d185280611dd55280611f89528061215c52806124e452806127cb528061292e5280612ae65280612ba35280612fc3528061334152806135ab52806135d4528061360c52806137d552806139315280613c635280613dc352806149a552806149e95280614d5e5280614fc552806155b652806156de52806158285250615cbb6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514611001578063d06ca61f14611058578063ded9382a1461117c578063e8e337001461125e578063f305d71914611344578063fb3bdb41146113f2576101ab565b80638803dbee14610c00578063ad5c464814610d19578063ad615dec14610d70578063af2979eb14610dd3578063b6f9de9514610e80578063baa2abde14610f2d576101ab565b80634a25d94a116101085780634a25d94a1461071f5780635b0d5984146108385780635c11d79514610913578063791ac947146109d75780637ff36ab514610a9b57806385f8c25914610b9d576101ab565b806302751cec146101b0578063054d50d41461026457806318cbafe5146102c75780631f00ca74146103e05780632195995c1461050457806338ed173914610606576101ab565b366101ab577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101a957fe5b005b600080fd5b3480156101bc57600080fd5b50610247600480360360c08110156101d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114f4565b604051808381526020018281526020019250505060405180910390f35b34801561027057600080fd5b506102b16004803603606081101561028757600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506115e8565b6040518082815260200191505060405180910390f35b3480156102d357600080fd5b50610389600480360360a08110156102ea57600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561031b57600080fd5b82018360208201111561032d57600080fd5b8035906020019184602083028401116401000000008311171561034f57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115fe565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103cc5780820151818401526020810190506103b1565b505050509050019250505060405180910390f35b3480156103ec57600080fd5b506104ad6004803603604081101561040357600080fd5b81019080803590602001909291908035906020019064010000000081111561042a57600080fd5b82018360208201111561043c57600080fd5b8035906020019184602083028401116401000000008311171561045e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611905565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156104f05780820151818401526020810190506104d5565b505050509050019250505060405180910390f35b34801561051057600080fd5b506105e9600480360361016081101561052857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061193a565b604051808381526020018281526020019250505060405180910390f35b34801561061257600080fd5b506106c8600480360360a081101561062957600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561065a57600080fd5b82018360208201111561066c57600080fd5b8035906020019184602083028401116401000000008311171561068e57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611abf565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561070b5780820151818401526020810190506106f0565b505050509050019250505060405180910390f35b34801561072b57600080fd5b506107e1600480360360a081101561074257600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561077357600080fd5b82018360208201111561078557600080fd5b803590602001918460208302840111640100000000831117156107a757600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c7d565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610824578082015181840152602081019050610809565b505050509050019250505060405180910390f35b34801561084457600080fd5b506108fd600480360361014081101561085c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611f81565b6040518082815260200191505060405180910390f35b34801561091f57600080fd5b506109d5600480360360a081101561093657600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561096757600080fd5b82018360208201111561097957600080fd5b8035906020019184602083028401116401000000008311171561099b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061211b565b005b3480156109e357600080fd5b50610a99600480360360a08110156109fa57600080fd5b81019080803590602001909291908035906020019092919080359060200190640100000000811115610a2b57600080fd5b820183602082011115610a3d57600080fd5b80359060200191846020830284011164010000000083111715610a5f57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061241d565b005b610b4660048036036080811015610ab157600080fd5b810190808035906020019092919080359060200190640100000000811115610ad857600080fd5b820183602082011115610aea57600080fd5b80359060200191846020830284011164010000000083111715610b0c57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612735565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610b89578082015181840152602081019050610b6e565b505050509050019250505060405180910390f35b348015610ba957600080fd5b50610bea60048036036060811015610bc057600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612abb565b6040518082815260200191505060405180910390f35b348015610c0c57600080fd5b50610cc2600480360360a0811015610c2357600080fd5b81019080803590602001909291908035906020019092919080359060200190640100000000811115610c5457600080fd5b820183602082011115610c6657600080fd5b80359060200191846020830284011164010000000083111715610c8857600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ad1565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d05578082015181840152602081019050610cea565b505050509050019250505060405180910390f35b348015610d2557600080fd5b50610d2e612c8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d7c57600080fd5b50610dbd60048036036060811015610d9357600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050612cb0565b6040518082815260200191505060405180910390f35b348015610ddf57600080fd5b50610e6a600480360360c0811015610df657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc6565b6040518082815260200191505060405180910390f35b610f2b60048036036080811015610e9657600080fd5b810190808035906020019092919080359060200190640100000000811115610ebd57600080fd5b820183602082011115610ecf57600080fd5b80359060200191846020830284011164010000000083111715610ef157600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612e6d565b005b348015610f3957600080fd5b50610fe4600480360360e0811015610f5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613329565b604051808381526020018281526020019250505060405180910390f35b34801561100d57600080fd5b506110166135a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561106457600080fd5b506111256004803603604081101561107b57600080fd5b8101908080359060200190929190803590602001906401000000008111156110a257600080fd5b8201836020820111156110b457600080fd5b803590602001918460208302840111640100000000831117156110d657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506135cd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561116857808201518184015260208101905061114d565b505050509050019250505060405180910390f35b34801561118857600080fd5b5061124160048036036101408110156111a057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613602565b604051808381526020018281526020019250505060405180910390f35b34801561126a57600080fd5b50611320600480360361010081101561128257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137a5565b60405180848152602001838152602001828152602001935050505060405180910390f35b6113ce600480360360c081101561135a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506138e1565b60405180848152602001838152602001828152602001935050505060405180910390f35b61149d6004803603608081101561140857600080fd5b81019080803590602001909291908035906020019064010000000081111561142f57600080fd5b82018360208201111561144157600080fd5b8035906020019184602083028401116401000000008311171561146357600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bcd565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156114e05780820151818401526020810190506114c5565b505050509050019250505060405180910390f35b600080824281101561150557600080fd5b611534897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a613329565b8093508194505050611547898685613f8d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b505050506115dc8583614169565b50965096945050505050565b60006115f58484846142c8565b90509392505050565b6060814281101561160e57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1686866001898990500381811061165757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461169457600080fd5b6117007f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506143f8565b9150868260018451038151811061171357fe5b6020026020010151101561172657600080fd5b6117eb8686600081811061173657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336117d17f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061178557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b60018181106117af57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b856000815181106117de57fe5b60200260200101516146cb565b61183782878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050306148dc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8360018551038151811061188357fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b505050506118fa84836001855103815181106118ed57fe5b6020026020010151614169565b509695505050505050565b60606119327f00000000000000000000000000000000000000000000000000000000000000008484614b87565b905092915050565b600080600061196a7f00000000000000000000000000000000000000000000000000000000000000008f8f614570565b9050600087611979578c61199b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848d8c8c8c6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b158015611a7e57600080fd5b505af1158015611a92573d6000803e3d6000fd5b50505050611aa58f8f8f8f8f8f8f613329565b809450819550505050509b509b9950505050505050505050565b60608142811015611acf57600080fd5b611b3b7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506143f8565b91508682600184510381518110611b4e57fe5b60200260200101511015611b6157600080fd5b611c2686866000818110611b7157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611c0c7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110611bc057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110611bea57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b85600081518110611c1957fe5b60200260200101516146cb565b611c7282878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050866148dc565b509695505050505050565b60608142811015611c8d57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660018989905003818110611cd657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d1357600080fd5b611d7f7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050614b87565b91508682600081518110611d8f57fe5b60200260200101511115611da257600080fd5b611e6786866000818110611db257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611e4d7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110611e0157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110611e2b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b85600081518110611e5a57fe5b60200260200101516146cb565b611eb382878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050306148dc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d83600185510381518110611eff57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611f3d57600080fd5b505af1158015611f51573d6000803e3d6000fd5b50505050611f768483600185510381518110611f6957fe5b6020026020010151614169565b509695505050505050565b600080611fcf7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000614570565b9050600086611fde578b612000565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848c8b8b8b6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b505050506121098d8d8d8d8d8d612cc6565b925050509a9950505050505050505050565b804281101561212957600080fd5b6121da8585600081811061213957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16336121d47f00000000000000000000000000000000000000000000000000000000000000008989600081811061218857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a60018181106121b257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b8a6146cb565b60008585600188889050038181106121ee57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561228757600080fd5b505afa15801561229b573d6000803e3d6000fd5b505050506040513d60208110156122b157600080fd5b8101908080519060200190929190505050905061230f868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505085614d07565b8661240882888860018b8b90500381811061232657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123bf57600080fd5b505afa1580156123d3573d6000803e3d6000fd5b505050506040513d60208110156123e957600080fd5b810190808051906020019092919050505061517e90919063ffffffff16565b101561241357600080fd5b5050505050505050565b804281101561242b57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1685856001888890500381811061247457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b157600080fd5b612562858560008181106124c157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361255c7f00000000000000000000000000000000000000000000000000000000000000008989600081811061251057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061253a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b8a6146cb565b6125ad858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505030614d07565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561264c57600080fd5b505afa158015612660573d6000803e3d6000fd5b505050506040513d602081101561267657600080fd5b810190808051906020019092919050505090508681101561269657600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561270957600080fd5b505af115801561271d573d6000803e3d6000fd5b5050505061272b8482614169565b5050505050505050565b6060814281101561274557600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061278957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c657600080fd5b6128327f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506143f8565b9150868260018451038151811061284557fe5b6020026020010151101561285857600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836000815181106128a157fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128d457600080fd5b505af11580156128e8573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6129a67f00000000000000000000000000000000000000000000000000000000000000008989600081811061295a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061298457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b846000815181106129b357fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a2457600080fd5b505af1158015612a38573d6000803e3d6000fd5b505050506040513d6020811015612a4e57600080fd5b8101908080519060200190929190505050612a6557fe5b612ab182878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050866148dc565b5095945050505050565b6000612ac8848484615201565b90509392505050565b60608142811015612ae157600080fd5b612b4d7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050614b87565b91508682600081518110612b5d57fe5b60200260200101511115612b7057600080fd5b612c3586866000818110612b8057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633612c1b7f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110612bcf57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b6001818110612bf957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b85600081518110612c2857fe5b60200260200101516146cb565b612c8182878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050866148dc565b509695505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000612cbd84848461533e565b90509392505050565b60008142811015612cd657600080fd5b612d05887f00000000000000000000000000000000000000000000000000000000000000008989893089613329565b905080925050612dcd88858a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612d8d57600080fd5b505afa158015612da1573d6000803e3d6000fd5b505050506040513d6020811015612db757600080fd5b8101908080519060200190929190505050613f8d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612e4057600080fd5b505af1158015612e54573d6000803e3d6000fd5b50505050612e628483614169565b509695505050505050565b8042811015612e7b57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1685856000818110612ebf57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612efc57600080fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f6957600080fd5b505af1158015612f7d573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61303b7f000000000000000000000000000000000000000000000000000000000000000089896000818110612fef57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061301957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156130a557600080fd5b505af11580156130b9573d6000803e3d6000fd5b505050506040513d60208110156130cf57600080fd5b81019080805190602001909291905050506130e657fe5b60008686600189899050038181106130fa57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561319357600080fd5b505afa1580156131a7573d6000803e3d6000fd5b505050506040513d60208110156131bd57600080fd5b8101908080519060200190929190505050905061321b878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505086614d07565b8761331482898960018c8c90500381811061323257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156132cb57600080fd5b505afa1580156132df573d6000803e3d6000fd5b505050506040513d60208110156132f557600080fd5b810190808051906020019092919050505061517e90919063ffffffff16565b101561331f57600080fd5b5050505050505050565b600080824281101561333a57600080fd5b60006133677f00000000000000000000000000000000000000000000000000000000000000008c8c614570565b90508073ffffffffffffffffffffffffffffffffffffffff166323b872dd33838c6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561342457600080fd5b505af1158015613438573d6000803e3d6000fd5b505050506040513d602081101561344e57600080fd5b8101908080519060200190929190505050506000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b1580156134e157600080fd5b505af11580156134f5573d6000803e3d6000fd5b505050506040513d604081101561350b57600080fd5b8101908080519060200190929190805190602001909291905050509150915060006135368e8e615422565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614613573578183613576565b82825b80975081985050508a87101561358b57600080fd5b8986101561359857600080fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606135fa7f000000000000000000000000000000000000000000000000000000000000000084846143f8565b905092915050565b60008060006136527f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000614570565b9050600087613661578c613683565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b90508173ffffffffffffffffffffffffffffffffffffffff1663d505accf3330848d8c8c8c6040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff168152602001838152602001828152602001975050505050505050600060405180830381600087803b15801561376657600080fd5b505af115801561377a573d6000803e3d6000fd5b5050505061378c8e8e8e8e8e8e6114f4565b809450819550505050509a509a98505050505050505050565b600080600083428110156137b857600080fd5b6137c68c8c8c8c8c8c615599565b809450819550505060006137fb7f00000000000000000000000000000000000000000000000000000000000000008e8e614570565b90506138098d3383886146cb565b6138158c3383876146cb565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505050506040513d60208110156138be57600080fd5b810190808051906020019092919050505092505050985098509895505050505050565b600080600083428110156138f457600080fd5b6139228a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c615599565b809450819550505060006139777f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000614570565b90506139858b3383886146cb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156139ed57600080fd5b505af1158015613a01573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613aad57600080fd5b505af1158015613ac1573d6000803e3d6000fd5b505050506040513d6020811015613ad757600080fd5b8101908080519060200190929190505050613aee57fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b158015613b6d57600080fd5b505af1158015613b81573d6000803e3d6000fd5b505050506040513d6020811015613b9757600080fd5b8101908080519060200190929190505050925083341115613bbf57613bbe33853403614169565b5b505096509650969350505050565b60608142811015613bdd57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1686866000818110613c2157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613c5e57600080fd5b613cca7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050614b87565b91503482600081518110613cda57fe5b60200260200101511115613ced57600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db083600081518110613d3657fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015613d6957600080fd5b505af1158015613d7d573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613e3b7f000000000000000000000000000000000000000000000000000000000000000089896000818110613def57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a6001818110613e1957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16614570565b84600081518110613e4857fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613eb957600080fd5b505af1158015613ecd573d6000803e3d6000fd5b505050506040513d6020811015613ee357600080fd5b8101908080519060200190929190505050613efa57fe5b613f4682878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050866148dc565b81600081518110613f5357fe5b6020026020010151341115613f8357613f823383600081518110613f7357fe5b60200260200101513403614169565b5b5095945050505050565b600060608473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106140665780518252602082019150602081019050602083039250614043565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140c8576040519150601f19603f3d011682016040523d82523d6000602084013e6140cd565b606091505b509150915081801561410d575060008151148061410c57508080602001905160208110156140fa57600080fd5b81019080805190602001909291905050505b5b614162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615c2e602d913960400191505060405180910390fd5b5050505050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff8111801561419b57600080fd5b506040519080825280601f01601f1916602001820160405280156141ce5781602001600182028036833780820191505090505b506040518082805190602001908083835b6020831061420257805182526020820191506020810190506020830392506141df565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614264576040519150601f19603f3d011682016040523d82523d6000602084013e614269565b606091505b50509050806142c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180615b886034913960400191505060405180910390fd5b505050565b6000808411614322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615c5b602b913960400191505060405180910390fd5b6000831180156143325750600082115b614387576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615be16028913960400191505060405180910390fd5b600061439e6103e5866158e990919063ffffffff16565b905060006143b584836158e990919063ffffffff16565b905060006143e0836143d26103e8896158e990919063ffffffff16565b61597e90919063ffffffff16565b90508082816143eb57fe5b0493505050509392505050565b6060600282511015614472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a20494e56414c49445f50415448000081525060200191505060405180910390fd5b815167ffffffffffffffff8111801561448a57600080fd5b506040519080825280602002602001820160405280156144b95781602001602082028036833780820191505090505b50905082816000815181106144ca57fe5b60200260200101818152505060005b60018351038110156145685760008061451c878685815181106144f857fe5b602002602001015187600187018151811061450f57fe5b6020026020010151615a01565b9150915061453e84848151811061452f57fe5b602002602001015183836142c8565b84600185018151811061454d57fe5b602002602001018181525050505080806001019150506144d9565b509392505050565b600080600061457f8585615422565b91509150858282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012060405160200180807fff000000000000000000000000000000000000000000000000000000000000008152506001018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001807feb2904cd0add938c896008a511981684931cd8a5841b34c87da98b7c5d37ae55815250602001925050506040516020818303038152906040528051906020012060001c925050509392505050565b600060608573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106147d857805182526020820191506020810190506020830392506147b5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461483a576040519150601f19603f3d011682016040523d82523d6000602084013e61483f565b606091505b509150915081801561487f575060008151148061487e575080806020019051602081101561486c57600080fd5b81019080805190602001909291905050505b5b6148d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615b576031913960400191505060405180910390fd5b505050505050565b60005b6001835103811015614b81576000808483815181106148fa57fe5b602002602001015185600185018151811061491157fe5b60200260200101519150915060006149298383615422565b509050600087600186018151811061493d57fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461498557826000614989565b6000835b91509150600060028a510388106149a057886149e2565b6149e17f0000000000000000000000000000000000000000000000000000000000000000878c60028c01815181106149d457fe5b6020026020010151614570565b5b9050614a0f7f00000000000000000000000000000000000000000000000000000000000000008888614570565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f848484600067ffffffffffffffff81118015614a4557600080fd5b506040519080825280601f01601f191660200182016040528015614a785781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614b06578082015181840152602081019050614aeb565b50505050905090810190601f168015614b335780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614b5557600080fd5b505af1158015614b69573d6000803e3d6000fd5b505050505050505050505080806001019150506148df565b50505050565b6060600282511015614c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a20494e56414c49445f50415448000081525060200191505060405180910390fd5b815167ffffffffffffffff81118015614c1957600080fd5b50604051908082528060200260200182016040528015614c485781602001602082028036833780820191505090505b5090508281600183510381518110614c5c57fe5b6020026020010181815250506000600183510390505b6000811115614cff57600080614cb287866001860381518110614c9157fe5b6020026020010151878681518110614ca557fe5b6020026020010151615a01565b91509150614cd4848481518110614cc557fe5b60200260200101518383615201565b846001850381518110614ce357fe5b6020026020010181815250505050808060019003915050614c72565b509392505050565b60005b600183510381101561517957600080848381518110614d2557fe5b6020026020010151856001850181518110614d3c57fe5b6020026020010151915091506000614d548383615422565b5090506000614d847f00000000000000000000000000000000000000000000000000000000000000008585614570565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614dd257600080fd5b505afa158015614de6573d6000803e3d6000fd5b505050506040513d6060811015614dfc57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506000808773ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614614e83578284614e86565b83835b91509150614f54828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015614f0b57600080fd5b505afa158015614f1f573d6000803e3d6000fd5b505050506040513d6020811015614f3557600080fd5b810190808051906020019092919050505061517e90919063ffffffff16565b9550614f618683836142c8565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614614fa557826000614fa9565b6000835b91509150600060028c51038a10614fc0578a615002565b6150017f0000000000000000000000000000000000000000000000000000000000000000898e60028e0181518110614ff457fe5b6020026020010151614570565b5b90508573ffffffffffffffffffffffffffffffffffffffff1663022c0d9f848484600067ffffffffffffffff8111801561503b57600080fd5b506040519080825280601f01601f19166020018201604052801561506e5781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156150fc5780820151818401526020810190506150e1565b50505050905090810190601f1680156151295780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561514b57600080fd5b505af115801561515f573d6000803e3d6000fd5b505050505050505050505050508080600101915050614d0a565b505050565b60008282840391508111156151fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b600080841161525b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615b2b602c913960400191505060405180910390fd5b60008311801561526b5750600082115b6152c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615be16028913960400191505060405180910390fd5b60006152e96103e86152db87876158e990919063ffffffff16565b6158e990919063ffffffff16565b905060006153146103e5615306888761517e90919063ffffffff16565b6158e990919063ffffffff16565b9050615333600182848161532457fe5b0461597e90919063ffffffff16565b925050509392505050565b6000808411615398576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615c096025913960400191505060405180910390fd5b6000831180156153a85750600082115b6153fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180615be16028913960400191505060405180910390fd5b8261541183866158e990919063ffffffff16565b8161541857fe5b0490509392505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156154aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615bbc6025913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106154e45782846154e7565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415615592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f556e697377617056324c6962726172793a205a45524f5f41444452455353000081525060200191505060405180910390fd5b9250929050565b600080600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a439058a8a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561568557600080fd5b505afa158015615699573d6000803e3d6000fd5b505050506040513d60208110156156af57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415615820577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166376f797388989336040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156157e357600080fd5b505af11580156157f7573d6000803e3d6000fd5b505050506040513d602081101561580d57600080fd5b8101908080519060200190929190505050505b60008061584e7f00000000000000000000000000000000000000000000000000000000000000008b8b615a01565b915091506000821480156158625750600081145b1561587657878780945081955050506158dc565b600061588389848461533e565b90508781116158a8578581101561589957600080fd5b888180955081965050506158da565b60006158b589848661533e565b9050898111156158c157fe5b878110156158ce57600080fd5b80898096508197505050505b505b5050965096945050505050565b600080821480615906575082828385029250828161590357fe5b04145b615978576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b60008282840191508110156159fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000806000615a108585615422565b509050600080615a21888888614570565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015615a6657600080fd5b505afa158015615a7a573d6000803e3d6000fd5b505050506040513d6060811015615a9057600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614615b14578082615b17565b81815b809550819650505050505093509391505056fe556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c6564556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54a2646970667358221220bc22981bcc0d829c3adf21d4adfba8e62b8ed283ebcef58381b5785cfe72528464736f6c63430006060033000000000000000000000000128ef601f62cca79d2cd6493a30d8769a08666740000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270